Ver Mensaje Individual
  #5  
Antiguo 11-12-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Reputación: 11
The Cid James Va por buen camino
Cita:
Empezado por bucanero Ver Mensaje
hola,
En cuanto a las DLLs como te ha comentado Casimiro, estando en las carpetas de windows debería de cogerlas sin problemas, otra opción es dejar dichas DLLs en la misma carpeta que el ejecutable y en ninguno de estos casos usar la opción LibraryLocation del componente, salvo que quieras usar otra localización distinta de estas dos (las opciones por defecto).

Para el tema de la configuración por parte del usuario es muy recomendable que marques la opción DesingConnection a true, esta opción te permite mantener la conexión activa en tiempo de diseño pero no conecta automáticamente al crear el componente, esto es necesario si la configuración de diseño va a ser distinta que la configuración en ejecución.

Y aquí te dejo un ejemplo de como puedes hacer para que el usuario pueda configurar la conexión y guardar y recuperar dicha configuración:


Código Delphi [-]
uses dialogs, Forms, Vcl.Controls, inifiles, unit2;

{$R *.dfm}


{ TDataModule3 }
function TDMConnection.ConfigurarDBConnection: Boolean;
var
  FormConfig:TFormDBConfig;
begin
  /// Aqui se muestra un Form con los campos de la conexion, para que el usuario
  /// los pueda modificar y despues guardar dicha configuracion en un fichero INI
  FormConfig:=TFormDBConfig.create(application);
  try
    FormConfig.showModal;
    Result:=(FormConfig.modalResult=mrOk);
  finally
    FormConfig.free
  end;
  if result then
    SaveDBConfig;
end;

procedure TDMConnection.DataModuleDestroy(Sender: TObject);
begin
  ZConnection1.Disconnect;
end;

function TDMConnection.DBConectar: Boolean;

var
  intento:LongInt;
begin
  intento:=0;
  if loadDBConfig then
    repeat
      try
        ZConnection1.Connect;
      except
        // Error en el proceso de conexion
        On E:Exception do
          MessageDlg(E.message, mtError, [mbOK], 0);
      end;
      inc(intento);
      /// se sale:
      ///   si se ha conectado correctamente,
      ///   si se ha intentando conectar 3 o mas veces sin exito
      ///   o si no se ha conseguido conectar y se ha cancelado la ventana de configuración
    until ZConnection1.Connected or (intento>=3) or not ConfigurarDBConnection;
end;

function TDMConnection.loadDBConfig: Boolean;
var
  ConfigFile:TIniFile;
  ASection:String;
begin
  Result:=False;
  ConfigFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
  try
    with ZConnection1 do begin
      ASection:=ZConnection1.Name;
      Database := ConfigFile.ReadString(ASection, 'database', database);
      Catalog := DataBase;
      HostName := ConfigFile.ReadString(ASection, 'HostName', HostName);
      Port := ConfigFile.ReadInteger(ASection, 'Port', Port);
      protocol := ConfigFile.ReadString(ASection, 'protocol', protocol);
      LibraryLocation:= ConfigFile.ReadString(ASection, 'LibraryLocation', LibraryLocation);
      /// Para el Usuario/password es conveniente aplicar algun algoritmo de codificacion/descodificacion
      User := ConfigFile.ReadString(ASection, 'User', User);
      password := ConfigFile.ReadString(ASection, 'password', password);
      Result:=true;
    end;
  finally
    ConfigFile.Free;
  end;
end;

function TDMConnection.SaveDBConfig: Boolean;
var
  ConfigFile:TIniFile;
  ASection:String;
begin
  Result:=False;
  ConfigFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
  try
    with ZConnection1 do begin
      ASection:=ZConnection1.Name;
      ConfigFile.WriteString(ASection, 'database', database);
      ConfigFile.WriteString(ASection, 'HostName', HostName);
      ConfigFile.WriteInteger(ASection, 'Port', Port);
      ConfigFile.WriteString(ASection, 'protocol', protocol);
      ConfigFile.WriteString(ASection, 'LibraryLocation', LibraryLocation);
      /// Para el Usuario/password es conveniente aplicar algun algoritmo de codificacion/descodificacion
      ConfigFile.WriteString(ASection, 'User', User);
      ConfigFile.WriteString(ASection, 'password', password);
      Result:=true;
    end;
  finally
    ConfigFile.Free;
  end;
end;


Y para usarlo solo es necesario poner

Código Delphi [-]

  if not DMConnection.DBConectar then begin
    MessageDlg('No ha sido posible conectarse a la BBDD', mtError, [mbOK], 0);
    exit;
  end;
  MessageDlg('Conexion OK', mtInformation, [mbOK], 0)

Importante en ZEOS guardar también los campos protocol y port (protocolo y puerto) son los que indican el sistema de base de datos que se va utilizar, y que DLLs va a necesitar para conectar, (ZEOS permite conectar a múltiples motores de bases de datos)

Un saludo
Primero que nada muchas gracias por tomarte el tiempo de explicarme, en ese caso si es que entiendo el ejemplo, estaria abriend ola configuracion en un formulario en el caso de que al abrir la aplicacion no conecte el momento de abrir?

Código Delphi [-]
begin   Result:=False;   ConfigFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'))
En cuanto al comentario en el que recomendas algun tipo de codificacion cuales serian los usados normalmente, desconozco los metodos de ofuscacion de codigo, y los hash md5 de "one way" estan totalmente descartados para algo asi
__________________
We are told to remember the idea, not the man, because a man can fail. He can be caught, he can be killed and forgotten, but 400 years later, an idea can still change the world.
Responder Con Cita