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 10-09-2015
Meridano Meridano is offline
Miembro
NULL
 
Registrado: ago 2015
Posts: 10
Poder: 0
Meridano Va por buen camino
Gracias por vuestra rapidez e interes.
Realmente lo que estoy buscando es poder cambiar la base de datos que utiliza el programa sin tener que recompilar y hacer cambios en el ejecutable.

Es decir que si hoy quiero utilizar los datos de la base c:\ruta\base1.gdb pueda usarla, y si mañana quiero utilizar la base d:\xxx\base5.gdb pueda modificar el ini (o cualquier otro sitio de donde la tome) y si dentro de un mes 'me apetece' tomarla de otro sitio que pueda definirlo y tomarla de ese sitio que a priori no conozco.

Dicho de otra manera, lo que quiero es poder indicar la base de datos a mi antojo sin tener que recompilar el ejecutable (obviamente las bases tendrán la misma estructura, solo cambiarán los datos (información) almacenada).

Siento marearos tanto, los ejemplos anteriores eran para tratar de facilitar las cosas, pero veo que no cumplieron su cometido.

A riesgo de ser pesado voy a repetirlo otra vez:


Tengo una aplicación que accede a una base de datos firebird, mediante un alias, que está en la ruta c:\ruta\base1.gdb. Mi objetivo es poder utilizar otra base de datos con la misma estructura, pero con diferentes datos, situada en otra ubicación, sin tener que modificar el código y tener que recompilar nuevamente. La nueva ruta se puede obtener de un archivo ini, que si fuese necesario por seguridad podría estar con la información encriptada para que no sea legible a gente con malas intenciones.


El por qué de esta paranoia, pues realmente no lo sé, puede ser por si la base se hace muy grande reemplazarla por otra y poder volver a utilizar la vieja cambiando el ini, o tener una para cada año, indicando el año el nombre o cosas así.


Espero que me podáis ayudar y se me quite esta 'cosa' de la cabeza.

Reitero mi gratitud.
Responder Con Cita
  #2  
Antiguo 10-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Entonces, según he entendido, no tienes que cambiar nada en tu programa, lo que tienes que hacer es cambiar el alias.
Mejor dicho, el valor del alias. Ejemplo, el alias tiene el valor: c:\datos\labasedatos.fdb y mañana montas un nuevo servidor, solamente debes cambiar el alias a: 192.168.1.100:/datos/labasedatos.fdb
Pero tu programa no cambia nada.
Responder Con Cita
  #3  
Antiguo 10-09-2015
Meridano Meridano is offline
Miembro
NULL
 
Registrado: ago 2015
Posts: 10
Poder: 0
Meridano Va por buen camino
Gracias Casimiro
Y como hago ese cambio mediante código.
Responder Con Cita
  #4  
Antiguo 10-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Meridano Ver Mensaje
Y como hago ese cambio mediante código.
¿Cómo haces el cambio a mano?
Responder Con Cita
  #5  
Antiguo 10-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Crea una utilidad externa que modifique el ini con el alias indicado. Luego lo encripta

Tu programa decodifica el ini, y luego lee el alias

Es decir tu programa siempre le hace caso al ini


// no tengo delphi a mano y no recuerdo si la sintaxis es exactamente asi

Código Delphi [-]
Database.Filename := IniFile.ReadString('Alias', EmptyStr);


Si el contenido del ini es

Cita:
Alias = ASDASDSADSAD
Tu programa intentara (e imagino que fracasara) conectarse a eso
Responder Con Cita
  #6  
Antiguo 10-09-2015
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 Meridiano.
Cita:
Empezado por Meridano Ver Mensaje
...
Es decir que si hoy quiero utilizar los datos de la base c:\ruta\base1.gdb pueda usarla, y si mañana quiero utilizar la base d:\xxx\base5.gdb pueda modificar el ini (o cualquier otro sitio de donde la tome) y si dentro de un mes 'me apetece' tomarla de otro sitio que pueda definirlo y tomarla de ese sitio que a priori no conozco.
...
De tu comentario anterior interpreto:
Código Delphi [-]
...
implementation

const
  // ruta a Firebird
  ALIASESPATH = 'C:\Program Files\Firebird\Firebird_2_5\aliases.conf';
  // alias que varia
  MUTANTALIAS = 'MUTANT=';
  MSGASK      = '¿ Desea reemplazar la base de datos ?';
  MSGERR      = 'Error al intentar conectar con la base de datos.';

procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenDialog1.FileName := '';
  OpenDialog1.Filter   := 'Firebird database | *.FDB';
end;

// cambiar base de datos
procedure TForm1.btChangeDBClick(Sender: TObject);
var
  TS : TStrings;
  i  : Integer;
begin
  if OpenDialog1.Execute then
  begin
    TS := TStringList.Create;
    try
      TS.LoadFromFile(ALIASESPATH);
      for i:= 0 to TS.Count-1 do
        if Copy(TS[i],1,Length(MUTANTALIAS)) = MUTANTALIAS then
        begin
          if MessageBox(0,PChar(MSGASK),'', MB_ICONQUESTION+MB_YESNO) = IDYES then
          begin
            TS[i] := MUTANTALIAS + OpenDialog1.FileName;
            TS.SaveToFile(ALIASESPATH);
          end;
          Exit;
        end;
    finally
      TS.Free;
    end;
  end;
end;

// abrir base de datos
procedure TForm1.btConectarClick(Sender: TObject);
var
  db: TIBDatabase;
begin
  db := IBDataBase1;
  if db.Connected then db.Close;
  db.DatabaseName := '\\SERVER_NAME\MUTANT'; // (SERVER_NAME = nombre del servidor)
  db.LoginPrompt  := False;
  db.Params.Clear;
  db.Params.Add('user_name=sysdba');
  db.Params.Add('password=a9g238fu'); // contraseña
  try
    db.Open;
  except
    raise Exception.Create(MSGERR);
  end;
  ShowMessage('¡ Conectado !');
end;
Está probado con IBX, pero con pequeñas adaptaciones a otros componentes, la funcionalidad es la misma.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 11-09-2015 a las 14:19:21. Razón: corregir nombre de constantes
Responder Con Cita
  #7  
Antiguo 12-09-2015
Meridano Meridano is offline
Miembro
NULL
 
Registrado: ago 2015
Posts: 10
Poder: 0
Meridano Va por buen camino
Gracias Ecfisa.
Con tu código solucioné el problema.

Un saludo y gracias a todos por vuestra colaboración.
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
funcion en dll usada en vb6 se comporta diferente en delphi erickperez6 Varios 2 29-05-2013 18:37:53
Conectar base de datos Firebird con base de datos Oscommerce 2.3.3 Adriadob Firebird e Interbase 11 31-10-2012 11:28:46
¿Qué versión de Delphi me recomiendan? ¿Cuál es la más usada? Chiefesito Varios 18 13-09-2006 00:10:24
problema al modificar 1 base de datos paradox7 adaypr C++ Builder 4 18-08-2006 02:49:26
Ultima celda usada en excell davezf Varios 4 03-02-2005 23:22:59


La franja horaria es GMT +2. Ahora son las 04:13:20.


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