Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Problema Access + Delphi + InnoSetup !!!

Buenas, paso a comentar mi problema:

Estoy haciendo una pequeña aplicación en Delphi, la misma interactúa con una BD en Access. Los ADO Conection, ADO Table , etc , etc los tengo en un DataModule. Ahora hice lo siguiente, la ruta de la base para que no sea fija la edite desde el dfm del DataModule ( hice esto: --> "... Source: .\Database.mdb" Teóricamente empieza a buscar la BD en el directorio donde esta el ejecutable.) y la conección anda bárbaro.
El problema surge cuando al programa le hago un instalador.... o sea mediante un programa que se llama InnoSetup 5, creo un instalador de la aplicación. Esto también anda bárbaro, ya que el mismo al final lo tengo que compilar y lo hace bárbaro. En más cuando termino de crearlo, instalo la aplicación y todo!!. Ahora lo raro es lo siguiente: como toda aplicación al final de la instalación me pide de ejecutarla y le digo que Si; bien se ejecuta la misma y anda bárbaro, la conección es perfecta. Bueno yo ahora cierro la aplicación, y cuando vuelvo a ejecutarla no me encuentra la base de datos en una " x " ruta.
Bueno si alguien puede darme una mano voy a estar muy agradecido, suerte y gracias de antemano jeje.
Saludos!
Pancho.-
Responder Con Cita
  #2  
Antiguo 17-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para mi el asunto esta en el adoconnetion.
Creo que deberias o poner la BD en la misma carpeta del exe o usar un archivo ini para que la busque.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 17-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Para mi el asunto esta en el adoconnetion.
Creo que deberias o poner la BD en la misma carpeta del exe o usar un archivo ini para que la busque.
Saludos
Hola como andás?
Mirá, la BD ya está en la misma carpeta que el ejecutable. Te molesto mucho si te pido que me expliques lo del archivo ini para que la busque?
Gracias igualmente.
Saludos!
Pancho.-
Responder Con Cita
  #4  
Antiguo 17-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Paso a paso:
Primero que nada coloco un archivo como muestra, decargalo y lo abres con dobleclick.
Vas a ver dentro esto:
Cita:
[BD]
Path="C:\MiBD\Database.MDB"
[Logon]
Auto="No"
Login=""
Pass=""
Como puedes ver el path va a ser la direccion donde colocaras la base de datos, en este caso estaria en C y en la carpeta mibd.
Para cambiarla simplemente colocas la nueva direccion y guardas el archivo.
Ahora vamos a leer el archivo desde delphi:
Dale doble click al ADOConnetion.
Esto te creara el evento OnCreate, coloca esto ahi:
Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
Var BaseDeDatos, ConStr : String;
    IniFile: TIniFile;
begin
   // Obtiene la ruta y el nombre de la base de datos
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'DatosBD.ini');
   BasedeDatos := IniFile.ReadString('BD','Path','');
   If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
   ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
             'Data Source='+BaseDeDatos+';'+
             'Persist Security Info=False;'+
             'Jet OLEDB: Database Password=admin';
   ADOConnection1.ConnectionString := ConStr;
   ADOConnection1.Open;
end;
Para que funcione el archivo ini coloca en el uses del datamodule estos:
Código Delphi [-]
uses
  SysUtils, Classes, DB, ADODB, IniFiles, Forms, Dialogs;
Como veras al iniciar el programa cuando se inicia el adoconnection busca el archivo ini que se llama datosbd, ahi busca los datos que estan incluidos en el path y completa la ruta de la bd.
Si cambias la bd a donde sea, con solo cambiar la ruta del path en el ini buscara la bd ahi.
El archivo ini TIENE que estar en la misma carpeta del exe del programa, la base de datos puede estar donde quieras.
Listo, sencillo y facil.
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 22-10-2010 a las 22:46:03.
Responder Con Cita
  #5  
Antiguo 18-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Paso a paso:
Primero que nada coloco un archivo como muestra, decargalo y lo abres con dobleclick.
Vas a ver dentro esto:

Como puedes ver el path va a ser la direccion donde colocaras la base de datos, en este caso estaria en C y en la carpeta mibd.
Para cambiarla simplemente colocas la nueva direccion y guardas el archivo.
Ahora vamos a leer el archivo desde delphi:
Dale doble click al ADOConnetion.
Esto te creara el evento OnCreate, coloca esto ahi:

Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
Var BaseDeDatos, ConStr : String;
IniFile: TIniFile;
begin
// Obtiene la ruta y el nombre de la base de datos
IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'DatosBD.ini');
BasedeDatos := IniFile.ReadString('BD','Path','');
If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source='+BaseDeDatos+';'+
'Persist Security Info=False;'+
'Jet OLEDB: Database Password=admin';
ADOConnection1.ConnectionString := ConStr;
ADOConnection1.Open;
end;




Para que funcione el archivo ini coloca en el uses del datamodule estos:

Código Delphi [-]
uses
SysUtils, Classes, DB, ADODB, IniFiles, Forms, Dialogs;



Como veras al iniciar el programa cuando se inicia el adoconnection busca el archivo ini que se llama datosbd, ahi busca los datos que estan incluidos en el path y completa la ruta de la bd.
Si cambias la bd a donde sea, con solo cambiar la ruta del path en el ini buscara la bd ahi.
El archivo ini TIENE que estar en la misma carpeta del exe del programa, la base de datos puede estar donde quieras.
Listo, sencillo y facil.
Saludos
Buenas,
Lo voy a probar en éstas horas y te aviso como me fué. Gracias de antemano.
Saludos!
Pancho.-
Responder Con Cita
  #6  
Antiguo 18-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Buenas ....
Mirá estube chusmeando bien la idea que me tirastes con el archivo.ini
Por lo que entiendí, es un archivo que en el momento de crearse el modulo de datos de la aplicación, me conecta el ADOConection a la BD ...
Pero el problema que tengo yo no es la conección. Bueno si es la conección, pero no desde Delphi a Access. O sea, lo que me está generando un problema es que cuando yo le creo un instalador al programa, pierdo la ruta ... o sea que me tira el error ( onda un mtError ) diciendome que no pudo conectar la base y me tira una ruta ( C:\ Documents ...\ Administrador ) cualquiera donde NO esta la base y nunca le dije que estaba ahí. Ahora una pregunta, cuando vos me decís que en el archivo.ini le cargue la ruta de mi BD, si yo en ves de ponerle la ruta específica donde se encuentra la base le pongo ".\Database.mdb", funciona igual ??. Te pregunto por que lo voy a tener que meter en otra compu el programa.
No se si me explico bien, pero el problema que tengo yo es que cuando creo el Instalador pierdo la ruta, o mejor dicho, me busca la BD en una ruta cualquierra y bueno, obviamente no la encuentra. Igualmente voy a probar haciendolo como me decís vos con el archivo.ini para ver que onda.

Saludos!
Pancho.-

PD: No puedo abrir el archivo que me adjuntastes desde un editor ...
Responder Con Cita
  #7  
Antiguo 18-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Buenas nuevamente, ya descubrí el problema pero no se como solucionarlo jeje. El tema es así, el instalador de la aplicación anda bárbaro, siempre y cuando la ruta desde el ADOConnection a la BD en Access sea mmm fija digamos ( osea si en el Source le mando D:\Pancho\Sistemas\ "lalala"\Database.mdb ). Ahora, cuando en el Source del ADOConnection le mando: .\Database.mbd ( para hacerlo genérico ), instálo la aplicación correctamente pero cuando la ejecuto no me encuentra la BD, lo raro es que me la busca en una ruta que nunca le especifiqué para nada ¿? ....
Saludos!
Pancho.-

PD: Aclaración, cuando le mando la ruta genérica y ejecuto el programa desde Delphi anda bien. Cuando le genero el instalador anda mal. Perdón si soy muy repetitivo, lo que busco es ser claro jeje.
Responder Con Cita
  #8  
Antiguo 18-10-2010
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.285
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
Tal vez deberías construir esa ruta de forma dinámica.
Es decir, la primera vez que arrancas, buscas el path de tu aplicación, le concatenas el nombre de la base de datos y lo almacenas (NOTA1) para las siguientes ejecuciones.

(NOTA1): Lo normal es usar un archivo de texto (INI por ejemplo) o el registro.
__________________
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.
Responder Con Cita
  #9  
Antiguo 18-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Buenas
Gente, problema "solucionado". Voy a intentar hacer la BD en MySql y a la mierda. Agradesco muchísimo a los que se calentaron en responder.
Saludos!
Pancho.-
Responder Con Cita
  #10  
Antiguo 18-10-2010
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.285
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
Bueno, yo no diría que el problema está "solucionado", más bien está "esquivado"
__________________
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.
Responder Con Cita
  #11  
Antiguo 18-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Bueno, yo no diría que el problema está "solucionado", más bien está "esquivado"
Buenas,
si, tenés razón, no lo solucioné al problema le hice un Oooole! más bien.
Te pido una mano? Asi igualmente, aunque lo vaya a hacer en MySql, puedo llegar a la solución del problema original.
Me podrías explicar como crear un archivo .ini .... éso nomás. Lo demás ya me lo explicaron más arriba. Va a ser la primera vez que uso ése tipo de archivos, ya entiendo para que se usa y todo, el problema es que no se crearlos jeje. Por lo que tengo entendido simplemente creo un archivo de texto y pongo lo que tenga que poner, la duda es como lo guardo .... lo guardo simplemente con extención .ini y listo?
Gracias!
Saludos!
Pancho-.
Responder Con Cita
  #12  
Antiguo 19-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Buenas,
perdón por tantos idas y vuelta. Finalmente eh podido resolver el problema. Me descargué otro programa para generar instaladores ( InstallShell ). El problema lo tenía cuando, al generar el instalador, me pedía el archivo ejecutable; bueno además de ése archivo tenía que meter la BD en ése momento.
Saludos!
Pancho.-
Responder Con Cita
  #13  
Antiguo 19-10-2010
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.285
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
Hola Pancho.
Auque veo que ya lo has solucionado por otros medios, te puedo explicar cómo lo haría yo. No es complicado.

Cita:
Empezado por Pancholp1986 Ver Mensaje
Me podrías explicar como crear un archivo .ini .... éso nomás. Lo demás ya me lo explicaron más arriba. Va a ser la primera vez que uso ése tipo de archivos, ya entiendo para que se usa y todo, el problema es que no se crearlos jeje. Por lo que tengo entendido simplemente creo un archivo de texto y pongo lo que tenga que poner, la duda es como lo guardo .... lo guardo simplemente con extención .ini y listo?
Supongamos que la Base de Datos siempre está en el directorio del ejecutable o en una carpeta llamada BD, por ejemplo.
Al instalar copias la Base de Datos en el lugar donde toca (el mismo del EXE o en la carpeta BD).

(1) Al arrancar la apliación compruebas si existe el fichero de configuración (app.bd.ini), por ejemplo.

(2a) Si existe, ir paso (4)
(2b) Si no existe crear el fichero ini (app.bd.ini)

(3) Calcular la ruta de la Base de Datos a partir del path del EXE (Application.ExeName) y guardarla en el fichero.

(4) Leer la tura del fichero y asignarla a la conexión (si vienes del (3) ya la tienes).

Para crear y leer ficheros INI, delphi tienes la clase TIniFile.
__________________
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.
Responder Con Cita
  #14  
Antiguo 19-10-2010
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.285
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
Si buscas en los foros (sobre TINIFile) y revisas el FTP encontrarás ejemplos y código de cómo trabajar con este tipo de archivos. Es un tema que hemos tratado otras veces.

Un saludo.
__________________
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.
Responder Con Cita
  #15  
Antiguo 20-10-2010
Pancholp1986 Pancholp1986 is offline
Miembro
 
Registrado: jul 2010
Posts: 42
Poder: 0
Pancholp1986 Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Si buscas en los foros (sobre TINIFile) y revisas el FTP encontrarás ejemplos y código de cómo trabajar con este tipo de archivos. Es un tema que hemos tratado otras veces.

Un saludo.
Buenas,
Te agradesco mucho el aporte. Sinceramente no lo voy a probar AHORA, la verdad fué un dolor de huevos lo que me pasó así que lo quiero dejar ahí, como "solucionado".
Igualmente mas adelante me va a volver a pasar algo por el estilo seguro, así que, en todo caso, ya se donde tener un excelente material para guiarme. Gracias nuevamente y que sigas bien!

Saludos!
Pancho.-
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
Problema con Access y Delphi 2 Besto Conexión con bases de datos 3 17-04-2008 15:32:46
Problema de Access Violation en Delphi 7 nlsgarcia API de Windows 5 20-02-2007 02:58:07
Problema con transacciones en Access y Delphi Capi666 SQL 1 11-01-2007 21:49:14
Problema con instalador (en InnoSetup) Laurana C++ Builder 2 30-11-2006 13:44:33
Delphi->Access (Problema con Usuarios de Windows) Gelmin Conexión con bases de datos 2 10-06-2005 19:54:11


La franja horaria es GMT +2. Ahora son las 12:52:17.


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