Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-06-2010
Sacmaed Sacmaed is offline
Registrado
 
Registrado: may 2010
Posts: 8
Poder: 0
Sacmaed Va por buen camino
Conexion a base de datos

Buenas tardes, he terminado una aplicación en Delphi, y por otra parte estoy creando un proyecto de instalación. Ambos proyectos son independientes. Mi problema viene porque al ejecutar el instalador, yo elijo la ruta(directorio) de instalación del proyecto principal, hasta ahi, todo bien, me copia el proyecto en el directorio que yo elijo, pero lo que necesito es pasarle el valor de ese directorio(ruta), al adoConnection.ConecctionString del proyecto principal.

Esto es lo que tengo en el oncreate del proyecto principal:


procedure TfmProyecto.FormCreate(Sender: TObject);
begin
dmModuloDatos.ADOConnection2.Connected:=false;
dmModuloDatos.ADOConnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Archivos de programa\Eduardo\Prueba\Datos\Database Proyecto.mdb;Persist Security Info=False';
dmModuloDatos.ADOConnection2.Connected:=true;
end;

Lo que aparece señalado en rojo es la ruta donde debería estar la base de datos, pero si cambio el directorio de instalación, no se como puedo recoger el valor de la ruta del otro formulario para pasarselo a este.
Espero haber sido lo más claro posible, un saludo y gracias de antemano
Responder Con Cita
  #2  
Antiguo 06-06-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 esto es mejor usar un archivo INI.
Con el se instala donde sea y solo se modifica el archivo.
El programa buscara la direccion de la BD en ese archivo, es muy sencillo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 06-06-2010
Sacmaed Sacmaed is offline
Registrado
 
Registrado: may 2010
Posts: 8
Poder: 0
Sacmaed Va por buen camino
Pues la verdad es que no me lo había ni planteado, pero ahora el problema es que no he creado nunca ningun archivo INI, me podrías mandar a algún hilo sobre esto, o explicarme un poco..gracias de nuevo
Responder Con Cita
  #4  
Antiguo 06-06-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Es muy sencillo, te lo explico paso a paso:
Veo que tienes el AdoConnection en un Datamodule, en tu caso: dmModuloDatos
1- Datamodule: (dmModuloDatos)
Vamos a colocar en el USES del Datamodule IniFiles asi:
Código Delphi [-]
uses
  SysUtils, Classes, DB, ADODB, IniFiles, Forms, Dialogs;
Posicionate en la parte BLANCA del dataModule y dale doble Click, eso te genera el evento OnCreate del datamodule.
Coloca esto:
Código Delphi [-]
procedure TdmModuloDatos.dmModuloDatosCreate(Sender: TObject);
// de aqui hacia abajo.......
Var BaseDeDatos, ConStr : String;
    IniFile: TIniFile;
begin
   // Obtiene la ruta y el nombre de la base de datos del archivo INI
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'BD.ini');
  // BD.ini es el nombre del archivo ini, se puede cambiar a cualquier otro.
    BasedeDatos := IniFile.ReadString('BD','Path','');
  
  // si no lo encuentra envia un error
   If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
 
 // muestra los datos de conexion y los une a los del INI  
 ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
             'Data Source='+BaseDeDatos+';'+
             'Persist Security Info=False;'+
             'Jet OLEDB: Database Password=admin';
  
  // enlaza el adoconnection con los datos.
   ADOConnection2.ConnectionString := ConStr;
  
  // ejecuta la conexion
   ADOConnection2.Open;
end;
Listo, asi de simple, el programa arranca, revisa el datamodule, busca el archivo ini, recoge la informacion y ya.
El archivo ini tiene que estar en la misma carpeta que el EXE del programa para que lo encuentre, la DB puede estar donde sea, la direccion se la dara el ini.
Pongo aqui uno hecho para que simplemente le cambies la direccion (path) a la que necesites (actualmente tiene la misma direccion que pusiste tu).

Saludos
PD: Si se me olvida algo grita......
__________________
Siempre Novato

Última edición por Caral fecha: 17-07-2010 a las 18:54:11.
Responder Con Cita
  #5  
Antiguo 06-06-2010
Sacmaed Sacmaed is offline
Registrado
 
Registrado: may 2010
Posts: 8
Poder: 0
Sacmaed Va por buen camino
Muchas gracias por tu ayuda, sólo detecto un pequeño problema, bueno en realidad es un gran problema, al instalar los archivos en cualquier carpeta del disco duro, cuando realizo algún cambi0 en la base de datos, ejemplo insertar algún registro, dar de baja algun registro, no lo hace en la base de datos que hemos copiado, sino en la original, te explico mejor: Con esta sentencia elijo donde instalar el programa.

If not DirectoryExists(c:\Archivos de programa\Eduardo\Prueba') then
CreateDir('c:\Archivos de programa\Eduardo\Prueba') ;
CopiaTodo('c:\Archivos de Programa\Eduardo\proyecto nuevo\*.*',
'c:\Archivos de programa\Eduardo\Prueba');
showmessage('Todos los archivos se han copiado con éxito');

Funciona bien y dentro del directorio prueba se guarda todo.El problema es que dentro del directorio original "c:\Archivos de Programa\Eduardo\proyecto nuevo" , hay dos carpetas "datos" y "programa", la carpeta datos aloja la base de datos y en la carpeta programa se encuentra el ejecutable y el archivo INI, las copia las dos a la carpeta destino "c:\Archivos de programa\Eduardo\Prueba", lo malo es que cuando ejecuto el programa desde la carpeta de destino, los cambios en la base de datos los guarda en la carpeta de origen.

El archivo INI lo he dejado asi:

[BD]
Path="..\Datos\Database Proyecto.mdb"
[Logon]
Auto="No"
Login=""
Pass=""

Siento estar dando tanto follón, pero cuando uno se ciega con algo....pufff.
Responder Con Cita
  #6  
Antiguo 06-06-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo el problema.
El archivo INI lo que hace es la conexion con la BD, independientemente de donde la tengas instalada.
Si cambias la direccion en el INI buscara ahi la BD, siempre y cuando arranque en tu programa el datamodule primero que el form principal.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 06-06-2010
Sacmaed Sacmaed is offline
Registrado
 
Registrado: may 2010
Posts: 8
Poder: 0
Sacmaed Va por buen camino
Estoy buscando el problema a ver donde está, de todas maneras muchas gracias por tu ayuda, me ha sido muy útil, voy a ver si descanso un rato y seguro k luego el fallo aparece enseguida.
Gracias de nuevo
Responder Con Cita
  #8  
Antiguo 06-06-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tan sólo añadir al código de Caral que ha olvidado liberar la memoria del ini.

Código Delphi [-]
var
  FileIni: TIniFile;
begin
  try   
    FileIni := TIniFile.Create('c:\config.ini');
    ...
    ...
  finally
    FileIni.Free;     <----   !!!
  end;
end;
Responder Con Cita
  #9  
Antiguo 06-06-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
jejeje, otra cosa mas que se aprende.
Gracias amigo.
Saludos
__________________
Siempre Novato
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
conexion de una base de datos airam Conexión con bases de datos 0 29-05-2008 22:56:59
Conexion a mas de una base de datos rruffino Conexión con bases de datos 3 27-02-2008 21:27:08
conexion a base de datos weke Conexión con bases de datos 7 22-08-2007 01:46:43
Conexion con base de datos mjjj Conexión con bases de datos 3 10-05-2007 21:51:01
Conexion con Base de Datos trex2000 Conexión con bases de datos 0 19-04-2004 23:59:54


La franja horaria es GMT +2. Ahora son las 11:34:18.


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