Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-04-2008
cascarrabias cascarrabias is offline
Miembro
 
Registrado: abr 2006
Posts: 103
Poder: 19
cascarrabias Va por buen camino
Paths de la aplicacion

Buen dia, seguramente esto es sencillo pero no pude dar con informacion sobre esto en los foros, pues resulta que mi aplicaction utiliza los componentes zeos para la conexion a bdd postgre , para esto...zeos necesita algunas dll, las cual o bien se pueden poner en las carpetas del sistema o en su defecto en la misma carpeta del ejecutable.... de cualquiera de estas dos maneras no ha problema alguna, ahora bien, si digamos dentro de la carpeta donde esta mi ejecutable, creo una carpeta que se llame 'lib' y meto alli las dll, mi aplicacion dice que no las encuentra, la pregunta es como agrego esta path entonces a mi aplicacion??? " ..\lib " .

Gracias
Responder Con Cita
  #2  
Antiguo 17-04-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola cascarrabias, con ExtractFilePath obtienes el path donde se esta ejecutando tu aplicación.

Código Delphi [-]
 path:= ExtractFilePath(Application.ExeName)+'lib\';
Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 17-04-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por cascarrabias Ver Mensaje
la pregunta es como agrego esta path entonces a mi aplicacion??? " ..\lib " .
En todo caso deberás añadir ese directorio al path del sistema.
Busca/Revisa sobre variables de entorno.

Revisa SetEnvironmentVariable.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 17-04-2008 a las 17:47:26.
Responder Con Cita
  #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
Poder: 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
  #5  
Antiguo 17-04-2008
cascarrabias cascarrabias is offline
Miembro
 
Registrado: abr 2006
Posts: 103
Poder: 19
cascarrabias Va por buen camino
ok

Cita:
Empezado por Caro Ver Mensaje
Hola cascarrabias, con ExtractFilePath obtienes el path donde se esta ejecutando tu aplicación.

Código Delphi [-] path:= ExtractFilePath(Application.ExeName)+'lib\';

Saluditos
Gracias a todos, si bien, creo que no me he dado ha entender....miren...si me llevo mi ejecutable a una maquina ajena a la mia, al ejecutar mi aplicacion me pide las dll, si estas estan en el mismo directorio del ejecutable, no hay problema y mi aplicacion funciona correctamente, ahora pasa que yo las quiero meter ahi mismo pero dentro de una subcarpeta, entonces, ya no me toma en cuenta ...es como si no las tuviera, entonces una solucion es aventarlas en la carpeta del sistema, pero como dije, yo deseo ponerla en mi subcarpeta de donde esta el ejecutable, que codigo necesito agregar a mi aplicacion(antes de comilar) para que busque la libreria en la subcarpeta, espero haberme dado a entender esta vez, y gracias a todos!
Responder Con Cita
  #6  
Antiguo 17-04-2008
cascarrabias cascarrabias is offline
Miembro
 
Registrado: abr 2006
Posts: 103
Poder: 19
cascarrabias Va por buen camino
Cita:
Empezado por roman Ver Mensaje
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

Gracias Roman.....hare unas cuantas pruebas haber si lo logro hacer!
Responder Con Cita
  #7  
Antiguo 21-04-2008
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.490
Poder: 21
MAXIUM Va camino a la fama
Estoy en la duda sobre que sera más optimo:

Código Delphi [-]
 path:= ExtractFilePath(Application.ExeName)+'lib\';
ó
Código Delphi [-]
 path:= GetCurrentDir+'lib\';
Responder Con Cita
  #8  
Antiguo 22-04-2008
cascarrabias cascarrabias is offline
Miembro
 
Registrado: abr 2006
Posts: 103
Poder: 19
cascarrabias Va por buen camino
gracias

Gracias...sigo trabajando en lo que me comento roman ya que no lo pude lograr para postgre....gracias de nuevo roman y saludos

Última edición por cascarrabias fecha: 22-04-2008 a las 01:21:12.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Aplicación de Servicio+Aplicación Normal +Socket jake API de Windows 5 21-06-2007 18:53:19
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
En que archivo Delphi 7 guarda las paths de los componentes ilichhernandez Varios 2 09-12-2006 05:06:55
Diferencia entre aplicacion Clx y aplicación normal??? JorgeBec Varios 1 27-10-2004 17:30:49
Paths para DSPack pkbza Varios 3 19-07-2004 15:22:53


La franja horaria es GMT +2. Ahora son las 09:21:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi