Ver Mensaje Individual
  #4  
Antiguo 17-04-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Pienso que añadir la ruta al PATH puede no ser la mejor opción puesto que pueden existir otras librerías que entren en conflicto con la que nos proponemos usar y que se encuentren antes que la nuestra en el path. Por decir algo, acabo de hacer una búsqueda por libmysql.dll y he encontrado por lo menos ocho copias en mi sistema, varias de la cuales se encuentran en directorios del PATH.

Lo ideal, creo yo, sería cargar manualmente la librería de manera que podamos especificar explícitamente la ruta. Sumergiéndome un poco en el código de ZEOS, he visto que cada driver se implementa en una unidad del tipo ZPlainXXXXX, y en la inicialización de cada una de estas unidades se instancia un objeto Loader que es el que se encarga de cargar las librerías correspondientes al driver. Por ejemplo, para MySQL5 se ve algo similar a esto:

Código Delphi [-]
LibraryLoader := TZMySQLNativeLibraryLoader.Create(
  [WINDOWS1_DLL_LOCATION, WINDOWS2_DLL_LOCATION);

El parámetro del constructor es una lista de librerías a buscar, en este caso, libmysl.dll y libmysql5.dll, pero no veo una manera limpia de agregar librerías a este constructor.

Entonces, y para no alterar el código fuente de ZEOS, he probado esto:

1. Asegurarnos de que la aplicación no intente conectar automáticamente al inicio. Para ello basta poner ZConnection.Active en false en el inspector de objetos.

2. Hacer explícitamente la conexión al inicio, cepillándonos el Loader de la inicializacion de ZPlainXXXXX y creándonos el nuestro:

Código Delphi [-]
uses ZPlainMySQL5

procedure Conectar;
var
  AppPath: String;

begin
  AppPath := ExtractFilePath(Application.ExeName);

  if Assigned(ZPlainMySQL5.LibraryLoader) then
    ZPlainMySQL5.LibraryLoader.Free;

  ZPlainMySQL5.LibraryLoader := TZMySQLNativeLibraryLoader.Create([AppPath + 'lib\libmysql.dll']);
  ZConnection1.Connect;
end;

Al parecer funciona aunque no he probado más a fondo. En el caso de Postgres habría que sustituir ZPlainMySQL5 por ZPlainPostgreSql87 o ZPlainMySQL58, según la versión que se use.

// Saludos
Responder Con Cita