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