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
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 11:24:30.


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