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 20-11-2012
angel.sosa angel.sosa is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 22
Poder: 0
angel.sosa Va por buen camino
Post configurar IBDataBase mediante un archivo ini o txt

hola a todos, soy nuevo en el foro, estoy programando una pequeña aplicacion en Delphi 7 para correrla con una base de datos en red, por cierto estoy usando un tutorial para novatos de caral muy bueno, la cuestion es que pretendo configurar los parametros de conexion del IBDataBase con un archivo ya sea de texto o un ini, en el cual tendria la ip del servidor, el tipo de conexion y el usuario y contraseña, pues la idea es instalar la aplicacion con ese archivo de configuracion para conectarse.
Responder Con Cita
  #2  
Antiguo 20-11-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola angel:

El siguiente codigo lo pones en el evento OnCreate de un DataModule o bien donde tenes los componentes de conexion:

Código Delphi [-]
Uses IniFiles;

procedure TDM.DataModuleCreate(Sender: TObject);
Var BaseDeDatos: String;
    IniFile: TIniFile;
begin
   // Obtiene la ruta y el nombre de la base de datos
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'BDatos.ini');
   BasedeDatos := IniFile.ReadString('BD','Path','');
   If BasedeDatos = '' then
    ShowMessage('Error al cargar Base de Datos') else
   Begin
    Try
      BaseGeneral.DatabaseName := BaseDeDatos;
      BaseGeneral.Connected := True;
      Transaccion.Active := True;
    Except
      ShowMessage('No se puede conectar el servidor...');
    End;
   End;
end;

y esto es lo que iria dentro del archivo BDatos.Ini de las maquinas clientes y lo ubicarias en el mismo lugar del ejecutable. La IP que aparece corresponde a la maquina donde se encuentra la base de datos

Código:
[DB]
PATH="192.168.1.3:c:\Sistema\Datos\LaBase.FDB"
en tanto para el .ini donde esta la base, el ini no lleva la Ip

Código:
[DB]
PATH=":c:\Sistema\Datos\LaBase.FDB"

Fijate que la variable BaseDeDatos se carga con el valor de PATH del ini
Código Delphi [-]
BasedeDatos := IniFile.ReadString('BD','Path','');
es decir que puedes agregar mas parametros a otras variables y leerlo de la misma forma, por ejemplo
Código:
[DB]
PATH=":c:\Sistema\Datos\LaBase.FDB"
PASS="masterkey"
USER="SYSDBA"
UBICACION="Algo que se te ocurra"

Saludos.-

Pd: Supongo que la base de datos es firebird o Intebase.-
Responder Con Cita
  #3  
Antiguo 20-11-2012
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Me ganaron n responder

Pero así es la cuestión como dice el amigo Martín... checa este enlace para mayor referencia... http://primero.latinowebs.com/delphi1/Ficheini.htm... y piensa si es conveniente poner la pass de la base de datos en un archivo ini que es un simple archivo de texto.

Saludos
__________________
Herr Heins Faust
Responder Con Cita
  #4  
Antiguo 20-11-2012
angel.sosa angel.sosa is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 22
Poder: 0
angel.sosa Va por buen camino
gracias MartinS, por el momento solo quiero pasar la ip y la ruta de la base, solo me queda unas cuantas dudas, como le digo al componente IBDataBase que utilice esos parametros que acabo de extraer del ini. es decir como le asigno los parametros. antes los parametros de la conexion estaban dentro del IBdatabase mediante su editor, es decir en esta parte no utilice codigo.

entiendo q es la parte donde me dices q use algo asi como: BaseGeneral.DatabaseName := BaseDeDatos;

pero no entiendo q hacer en esta parte o como ingresarle esos parametros al componente.
Responder Con Cita
  #5  
Antiguo 21-11-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola: Los parametros se los definis como estas acostumbrado o como estas aprendiendo, o sea, desde el editor. El código que te expuse solo cambia o define en su caso la ruta de la base de datos cuando se ejecuta. Como bien expuso Faust el usuario y la contraseña (SYSDBA y masterkey) la colocas al componente en tiempo de diseño.
En el ejemplo BaseGeneral seria tu componenete IbDatabase.
En cuanto a la ruta de la base de datos y tomando el ejemplo: c:\Sistema\Datos\LaBase.FDB es la ubicación física de la base dentro de la PC servidora. Cuando definís el acceso a la misma por los parametros del IBDatabase en tiempo de diseño (Database component editor - es decir boton derecho sobre el componente) le indicas que use el protocolo TPC y conexion tipo remota y la ubicacion fisica de la base de datos, entonces el mismo componente le agregara los : delante de la ruta quedando :c:\Sistema\Datos\LaBase.FDB. Despues viene todo el tema del .ini. Otra vez; cada cliente sumara al .ini a la ruta la ip del servidor salvo el .ini del que realmente tiene la base de datos.

Saludos y espero que no te halla confundido mas.-
Responder Con Cita
  #6  
Antiguo 21-11-2012
angel.sosa angel.sosa is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 22
Poder: 0
angel.sosa Va por buen camino
Cita:
Empezado por MartinS Ver Mensaje
Hola: Los parametros se los definis como estas acostumbrado o como estas aprendiendo, o sea, desde el editor. El código que te expuse solo cambia o define en su caso la ruta de la base de datos cuando se ejecuta. Como bien expuso Faust el usuario y la contraseña (SYSDBA y masterkey) la colocas al componente en tiempo de diseño.
En el ejemplo BaseGeneral seria tu componenete IbDatabase.
En cuanto a la ruta de la base de datos y tomando el ejemplo: c:\Sistema\Datos\LaBase.FDB es la ubicación física de la base dentro de la PC servidora. Cuando definís el acceso a la misma por los parametros del IBDatabase en tiempo de diseño (Database component editor - es decir boton derecho sobre el componente) le indicas que use el protocolo TPC y conexion tipo remota y la ubicacion fisica de la base de datos, entonces el mismo componente le agregara los : delante de la ruta quedando :c:\Sistema\Datos\LaBase.FDB. Despues viene todo el tema del .ini. Otra vez; cada cliente sumara al .ini a la ruta la ip del servidor salvo el .ini del que realmente tiene la base de datos.

Saludos y espero que no te halla confundido mas.-

mas o menos claro, ahora estoy corriendo la aplicacion local pero no me arroja nunca la conexion
me marca esto como que no reconoce el PATH ("Error al cargar Base de Datos"), y el ini lo tengo en la misma carpeta de el proyecto.
Código Delphi [-]
begin
  // Obtiene la ruta y el nombre de la base de datos
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'BDatos.ini');
   BasedeDatos := IniFile.ReadString('BD','Path','');
   If BasedeDatos = '' then
    ShowMessage('Error al cargar Base de Datos') else
   Begin
    Try
      IBDatabase1.DatabaseName := BaseDeDatos;
      IBDatabase1.Connected := True;
     // Transaccion.Active := True;
    Except
      ShowMessage('No se puede conectar el servidor...');
    End;
   End;

error al cargar la base de datos. siempre

el codigo del BDatos.ini donde esta mi base local.
Código:
[DB]
PATH=":C:\bdnueva\TSTD_LOCAL.FDB"
Responder Con Cita
  #7  
Antiguo 21-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
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
PATH=":C:\bdnueva\TSTD_LOCAL.FDB"

Ese : delante sobra
Responder Con Cita
  #8  
Antiguo 21-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Y una vez que quites lo que acertadamente te señala Casimiro, tenes que realizar otra corrección.

En el archivo BDatos.Ini la sección figura con el nombre:
Código:
[DB]
PATH=C:\bdnueva\TSTD_LOCAL.FDB ;Se puede prescindir de las comillas (" ")
Y desde tu código la estás referenciando como:
Código Delphi [-]
 BasedeDatos := IniFile.ReadString('BD',...  // Aquí también debe ser DB
O claro está, también podrías cambiar el nombre de la sección en BDatos.ini...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 21-11-2012
angel.sosa angel.sosa is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 22
Poder: 0
angel.sosa Va por buen camino
---------------------------
Debugger Exception Notification
---------------------------
Project descuentos.exe raised exception class EAccessViolation with message 'Access violation at address 004BAECA in module 'descuentos.exe'. Read of address 0000009C'.
---------------------------
Break Continue Help
---------------------------
lista las correciones, ahora me marca esto de arriba en esta parte del codigo.
Código Delphi [-]
    Try
      IBDatabase1.DatabaseName := BaseDeDatos;
      IBDatabase1.Connected := True;
      // Transaccion.Active := True;
    Except
      ShowMessage('No se puede conectar el servidor...');
    End;
y me manda el mensaje No se puede conectar el servidor. despues de darle break.
Responder Con Cita
  #10  
Antiguo 22-11-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola: con respecto a los : delante de la ruta a mi me funciona. En algún lugar vi que si la conexión es remota se ponen esos : (si lo encuentro lo coloco aquí) como tambien lo tengo con las " . Ahora esta bien la observación de ecfisa sobre el nombre del parámetro del ini ya que por código le dije que leyera DB y en el ini de ejemplo te puso BD. Tendrías que fijarte si la variable que le asignas la ruta es realmente eso y recorda que el ini va donde esta el .exe (debug-Win32...).

Saludos
Responder Con Cita
  #11  
Antiguo 22-11-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
No tomes lo de debug-Win32.. Porque pensé que trabajabas con Delphi 2007.

Saludos
Responder Con Cita
  #12  
Antiguo 22-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
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
Cita:
Empezado por MartinS Ver Mensaje
Hola: con respecto a los : delante de la ruta a mi me funciona. En algún lugar vi que si la conexión es remota se ponen esos : (si lo encuentro lo coloco aquí) como tambien lo tengo con las " .
Funcione o no funcione, está mal.

Una ruta de ejemplo mediante IP (es lo más adecuado):
192.168.1.100:/datos/labasedatos.fdb

También puede ser el nombre del servidor:
elservidor:/datos/labasedatos.fdb

En windows:
mediante IP (es lo más adecuado)
192.168.1.100:c:\datos\labasedatos.fdb

Mediante nombre servidor:
elservidor:c:\datos\labasedatos.fdb

Incluso en una conexión local se recomienda la IP o localhost:
linux
127.0.0.1:/datos/labasedatos.fdb
localhost:/datos/labasedatos.fdb

windows
127.0.0.1:c:\datos\labasedatos.fdb
localhost:c:\datos\labasedatos.fdb
Responder Con Cita
  #13  
Antiguo 22-11-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Funcione o no funcione, está mal.
Si, pero funciona

Creo que en definitiva tiene el problema o bien en la ubicacion del .ini o en la observacion que hizo ecfisa en cuanto a BD por DB

Saludos.-
Responder Con Cita
  #14  
Antiguo 22-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
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
Cita:
Empezado por MartinS Ver Mensaje
Si, pero funciona
Veamos, un coche anda con una rueda pinchada e incluso con un cilindro fallando.
Dirás que funciona, vale, pero no funciona bien, va "renqueando".
Incluso si le quitas las ruedas, también funciona.
Esos dos puntos delante están mal, quieras o no quieras.
Pero si te gusta dejarlos ahí, pues nada, déjalo y sigue con el coche sin ruedas , que funciona
Responder Con Cita
  #15  
Antiguo 22-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Por lo que comenta angel.sosa en el mensaje #9 parece que logró solucionar ese tema, ahora habla de un error de Access Violation.

Angel, no sé como tenes distribuido los componentes, pero si tenes un TDataModule y ejecutas el código que mencionas en el evento OnCreate te va a provocar problemas... Te conviene asegurarte que todos los objetos hayan sido creados.

Por ejemplo:
Código Delphi [-]
unit DataModule

interface

uses
  Windows, Messages, SysUtils, Classes, IBDatabase, DB;

const
  WM_AFTER_CREATE = WM_USER + 300;

type
  TDataModule2 = class(TDataModule)
    IBTransaction1: TIBTransaction;
    IBDatabase1: TIBDatabase;
    procedure DataModuleCreate(Sender: TObject);
  private
    procedure WmAfterCreate(var Msg: TMessage); message WM_AFTER_CREATE;
  public
  end;

var
  DataModule2: TDataModule2;

implementation {$R *.dfm}

uses IniFiles, Forms, Dialogs;

procedure TDataModule2.WmAfterCreate(var Msg: TMessage);
begin
  with TIniFile.Create(ExtractFilePath(Application.ExeName)+'BDatos.ini') do
  try
    IBDatabase1.DatabaseName:= ReadString('BD', 'Path','');
    IBDatabase1.Params.Clear;
    IBDatabase1.Params.Add('user_name='+ReadString('BD', 'User',''));
    IBDatabase1.Params.Add('password='+ReadString('BD', 'Pwd',''));
    try
      IBDatabase1.Open;
    except
      on E: Exception do
      begin
        MessageDlg(E.Message,mtError,[mbOk],0);
        Application.Terminate
      end
    end
  finally
    Free
  end
end;

procedure TDataModule2.DataModuleCreate(Sender: TObject);
begin
  PostMessage(WM_AFTER_CREATE, 0, 0, 0)
end;

...

end.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #16  
Antiguo 22-11-2012
angel.sosa angel.sosa is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 22
Poder: 0
angel.sosa Va por buen camino
Talking

gracias a todos ya funciono, incluso en red.
El error que tenia era en las variables, tenia mal la parte De, ya con eso pude compilar.

Código Delphi [-]
    IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'BDatos.ini');
 BasedeDatos := IniFile.ReadString('DB','PATH','');
   If BasedeDatos = '' then
    ShowMessage('Error al cargar Base de Datos') else
   Begin
    Try
     IBDatabase1.DatabaseName := BaseDeDatos;
      IBDatabase1.Connected := True;
      IBTransaction1.Active := True;
      ShowMessage('CONEXION CORRECTA');
    Except
      ShowMessage('No se puede conectar el servidor...');
    End;
   End;

voy a continuar con mi pratica para mas a delante hacer un manualito de esto y compartilo. claro con el proyectito.

GRAX ANY WAY.
Responder Con Cita
  #17  
Antiguo 22-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
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
Cita:
Empezado por angel.sosa Ver Mensaje
gracias a todos ya funciono, incluso en red.
El error que tenia era en las variables, tenia mal la parte De, ya con eso pude compilar.
¿Y cuál es la parte De?
Responder Con Cita
  #18  
Antiguo 23-11-2012
angel.sosa angel.sosa is offline
Miembro
NULL
 
Registrado: oct 2012
Posts: 22
Poder: 0
angel.sosa Va por buen camino
a la hora de asigar el path del ini al componente tenia el nombre mal escrito.

Código Delphi [-]
IBDatabase1.DatabaseName := BaseDeDatos;
Responder Con Cita
  #19  
Antiguo 23-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
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
ah, ya veo
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
IBDatabase no conecta con archivo FDB de FIREBIRD 2.1.3 casacham Conexión con bases de datos 9 18-07-2010 00:18:18
como conectarse a un archivo dbf mediante ado kurono Conexión con bases de datos 2 03-03-2008 03:16:03
Configurar aplicacion con archivo externo voldemmor Varios 1 10-01-2008 21:28:38
Configurar zeos desde archivo.ini jgutti Firebird e Interbase 1 15-04-2005 16:32:48
ADO mediante archivo ini luchin001 Conexión con bases de datos 3 30-04-2004 19:22:07


La franja horaria es GMT +2. Ahora son las 18:24:28.


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