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 19-03-2013
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Enlazar base datos con distintos directorios en red

Hola de nuevo, hace un tiempo tuve problemas al poder conectar en red mi programa, gracias a vosotros lo hice con la siguiente sintaxis:

dentro del programa delphi:

Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
Var
     BaseDeDatos: String;
     ElIniFile: TIniFile;
begin
   // Obtiene la ruta y el nombre de la base de datos
   ElIniFile := TIniFile.Create(ExtractFilePath(Application.exename)+'BDatos.ini');
   BasedeDatos := ElIniFile.ReadString('BD','Path','');
   If BasedeDatos = '' then
    ShowMessage('Error al cargar Base de Datos') else
    ibdatabase1.Connected:=false;
    ibdatabase1.DatabaseName:=BasedeDatos;   // BaseGeneral es el TIbDatabase y le asigno la ruta de la base de datos segun .ini
    ibdatabase1.Connected:=true;
end;

en el Archivo ini:
Código Delphi [-]
[BD]
path="192.168.1.88:C:\ProyectoMaestro\MAESTRO.IB"

Bien, ahora quería complicarlo un poco más, y es poder manejar varias ejercicios o campañas, los datos de cada campaña están en un directorio distinto así por ejemplo la campaña 2012 están en el Directorio "DATOS12", la campaña 2.013 en el directorio "DATOS13". si yo modifico en el archivo ini manualmente y lo modifico escribiendo:

Código Delphi [-]
path="192.168.1.88:C:\ProyectoMaestro\DATOS13\MAESTRO.IB"]

Accedo bien a los datos de la campaña 2013, pero cómo puedo hacerlo con el programa ejecutándose. Yo al iniciar el programa creo el formulario creo el componente como por ejemplo un combobox para elegir las distintas campañas, pero no sé cómo implementarlo, he intentando buscar información pero no la encuentro.

Gracias.

Última edición por Casimiro Notevi fecha: 19-03-2013 a las 19:13:26.
Responder Con Cita
  #2  
Antiguo 19-03-2013
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Yo hago esto:
Código Delphi [-]
procedure TfrMenu.Ejercicio1Click(Sender: TObject);
var
cServidor:String;
begin
cServidor:='\\servidor\d:\_servidor_ficheros\datosfb\';

Application.CreateForm(TfrCambejer, frCambEjer);
frCambEjer.ShowModal;

  if nOpcion = 1 then
  begin
  DmConex.IBDatabase.Connected:=False;
  cServidor:=cServidor+cDBfb;
  DmConex.IBDatabase.DatabaseName:=cServidor;
  DmConex.IBDatabase.Connected:=True;
  DmConex.IBDtsUsuarios.Open;
  DmConex.IBDtsConf.Open;
  end
  else
  ShowMessage('Atención:Cambio de Ejercicio cancelado por el usuario.');

  Pon_Rotulo_Pantalla();
end;


procedure TfrCambejer.FormCreate(Sender: TObject);
begin
aEjer[00]:='bdatos2006.fdb';
aEjer[01]:='bdatos2007.fdb';
aEjer[02]:='bdatos2008.fdb';
aEjer[03]:='bdatos2009.fdb';
aEjer[04]:='bdatos2010.fdb';
aEjer[05]:='bdatos2011.fdb';
end;


procedure TfrCambejer.BtAceptarClick(Sender: TObject);
begin
cDBfb:=aEjer[rdgEjer.ItemIndex];
nOpcion:=1;
Close;
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 20-03-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Constantes del formulario

Código Delphi [-]
const
   kCarpeta = 'DATOS';

Función para mostrar el formulario y devolver ruta completa de conexión

Código Delphi [-]
function TForm1.Mostrar(const Ruta: String): String;
var
   i, j: Integer;
   Nom: String;
begin
   ComboBox1.Clear;
   for i := 1 to 100 do
   begin
      Nom := kCarpera + IntTostr(i);
      if FileExists(Ruta + Nom) then
         j := ComboBox1.Items.Add(Nom);
   end;
   //Por defecto se marca la última campaña
   ComboBox1.ItemIndex := j;
   
   ShowModal;
   
   Result := Ruta + kCarpeta + IntToStr(ComboBox1.ItemIndex);

En el archivo ini separaría la ruta del nombre de la base de datos
Código Delphi [-]
path="192.168.1.88:C:\ProyectoMaestro\"
nom= "MAESTRO.IB"

Create del DataModule

Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
Var
     Ruta, Nombre, BaseDeDatos: String;
     ElIniFile: TIniFile;
     f: TForm1;
begin
   // Obtiene la ruta y el nombre de la base de datos
   ElIniFile := TIniFile.Create(ExtractFilePath(Application.exename)+'BDatos.ini');
   Ruta := ElIniFile.ReadString('BD','Path','');
   Nombre := ElIniFile.ReadString('BD','Nom','');

   f := TForm1.Create(Self);
   try
      BaseDeDatos := f.Mostrar(Ruta) + '\' + Nombre;
   finally
      f.Free;
   end;
   If BasedeDatos = '' then
      ShowMessage('Error al cargar Base de Datos') 
   else begin
      ibdatabase1.Connected:=false;
      ibdatabase1.DatabaseName:=BasedeDatos;   // BaseGeneral es el TIbDatabase y le asigno la ruta de la base de datos segun .ini
      ibdatabase1.Connected:=true;
   end;
__________________
La Madurez se llama...
~~~Gaia~~~

Última edición por ozsWizzard fecha: 20-03-2013 a las 12:02:10.
Responder Con Cita
  #4  
Antiguo 20-03-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
¡Ostras!, se me acaba de venir un error a la cabeza, lo primero es que faltaría sumarle 1 al itemIndex de la última línea de la función Mostrar y ni por esas está bien, eso sería asumiendo que existen todos los años desde el 2000, pero no es así.

Tal y como está ahora, lo mejor es sutituir por ComboBox1.Text.
Código Delphi [-]
function TForm1.Mostrar(const Ruta: String): String;
var
   i, j: Integer;
   Nom: String;
begin
   ComboBox1.Clear;
   for i := 1 to 100 do
    begin
      Nom := kCarpera + IntTostr(i);
      if FileExists(Ruta + Nom) then
         j := ComboBox1.Items.Add(Nom);
   end;
   //Por defecto se marca la última campaña
    ComboBox1.ItemIndex := j;
   
   ShowModal;
   
   Result := Ruta + ComboBox1.Text;
end;


El error es por empezar con una solución y acabar con otra... quería mostrar en el combobox "campaña 20XX" y me lié.

Para hacerlo de esta segunda forma, mejor sería hacer un array simultáneo al combobox y un procedimiento AddCampana:

Variables globales al formulario
Código Delphi [-]
var
   ArrOfString: Array of string;

Procedimiento AddCampana
Código Delphi [-]
procedure TForm1.AddCampana(const Eje: Integer);
var
   j: Integer;
  Dat, Cam: String;
begin
   Dat := kCarpeta + IntTostr(Eje);
   Cam := 'Campaña 20' + IntTostr(Eje);
   j := ComboBox1.Items.Add(Cam);
   SetLeng(ArrOfString, ComboBox1.Items.Count);
   ArrOfString[j] := Dat; 
end;



Nuevamente la función Mostrar
Código Delphi [-]
function TForm1.Mostrar(const Ruta: String): String;
var
   i: Integer;
begin
   ComboBox1.Clear;
   for i := 1 to 100 do
       if FileExists(Ruta + Nom) then
         AddCampana(i);
   //Por defecto se marca la última campaña
    ComboBox1.ItemIndex := j;
   
   ShowModal;
   
   Result := Ruta + ArrOfString[ComboBox1.ItemIndex];
end;



Saludos.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #5  
Antiguo 20-03-2013
ginesgomezlopez ginesgomezlopez is offline
No confirmado
NULL
 
Registrado: jun 2012
Posts: 45
Poder: 0
ginesgomezlopez Va por buen camino
Al final he hecho un híbrido a lo que me habéis dicho, he creado un Combobox en el Formulario Principial donde están los distintos ejercicios, 12,13,14...., al ejecutar el programa por primera vez coge el ejercicio que hay en el combobox


Código Delphi [-] procedure TDataModule1.DataModuleCreate(Sender: TObject);
Var
BaseDeDatos: String;
ElIniFile: TIniFile;
ejercicio:string;
begin
// Obtiene la ruta y el nombre de la base de datos
ElIniFile := TIniFile.Create(ExtractFilePath(Application.exename)+'BDatos.ini');
BasedeDatos := ElIniFile.ReadString('BD','Path','');
If BasedeDatos = '' then
// ShowMessage('Error al cargar Base de Datos') else
ibdatabase1.Connected:=false;
ejercicio:=FormPrincipal.Combobox1.text;
BaseDeDatos:=BaseDeDatos+'Datos'+ejercicio;
ibdatabase1.DatabaseName:=BasedeDatos+'\Maestro.ib'; // BaseGeneral es el TIbDatabase y le asigno la ruta de la base de datos segun .ini
ibdatabase1.Connected:=true;
end;




y luego al cambiar el Combobox de ejercicio he hecho lo siguiente:


Código Delphi [-]procedure TFormPrincipal.ComboBox1Change(Sender: TObject);
Var
BaseDeDatos: String;
ElIniFile: TIniFile;
ejercicio:string;
begin
// Obtiene la ruta y el nombre de la base de datos
dat.DataModule1.IBDatabase1.Connected:=false;
ElIniFile := TIniFile.Create(ExtractFilePath(Application.exename)+'BDatos.ini');
BasedeDatos := ElIniFile.ReadString('BD','Path','');
If BasedeDatos = '' then
// ShowMessage('Error al cargar Base de Datos') else
dat.DataModule1.IBDatabase1.Connected:=false;
ejercicio:=FormPrincipal.Combobox1.text;
BaseDeDatos:=BaseDeDatos+'Datos'+ejercicio;
dat.DataModule1.IBDatabase1.DatabaseName:=BasedeDatos+'\Maestro.ib'; // BaseGeneral es el TIbDatabase y le asigno la ruta de la base de datos segun .ini
dat.DataModule1.IBDatabase1.Connected:=true;
end;





Falta mejorar algunos detalles, pero funciona bien, espero que sea estable en el tiempo que esa es otra

Gracias por vuestra ayuda.
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
Enlazar delphi con una base de datos hecha en Visual Dataflex que esta en SCO-UNIX didier_chivas Conexión con bases de datos 2 26-10-2010 19:16:17
Enlazar tablas de base de datos lis983 Varios 1 29-05-2008 16:26:48
REplicación de Base de datos -TRABAJO ENTRE DISTINTOS MOTORES DE BD- voldemmor Oracle 1 27-05-2007 10:41:23
enlazar base de datos contdbgrid aitorqrv Conexión con bases de datos 1 03-04-2007 23:56:45
Enlazar con base de datos este donde este 4-0 C++ Builder 5 12-01-2007 20:33:00


La franja horaria es GMT +2. Ahora son las 23:29:08.


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