Club Delphi  
    Paypal   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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-12-2005
Avatar de epuigdef
epuigdef epuigdef is offline
Miembro
 
Registrado: jul 2005
Posts: 196
Poder: 22
epuigdef Va por buen camino
Buenas!


La idea es la siguiente:

Creas un DataModule y le colocas un TADOConnection (que llamaremos conexion) y un TOpenDialog.

El código de esta unidad es el siguiente:

Código Delphi [-]
unit UDataModule;
interface
uses
  SysUtils, Classes, DB, ADODB, Dialogs, Registry, Windows, Forms;
const
  bbdd1 = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
  bbdd2 = ';Persist Security Info=False;Jet OLEDBatabase Password=pepito';
type
  TDataMod = class(TDataModule)
    Conexion: TADOConnection;
    OpenDialog1: TOpenDialog;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
    fBBDD : String;
  public
    { Public declarations }
    property BBDD : String read fBBDD write fBBDD;
  end;
var
  DataMod: TDataMod;
implementation
{$R *.dfm}
procedure TDataMod.DataModuleCreate(Sender: TObject);
var Reg : TRegistry;
begin
    Reg := TRegistry.Create;
    try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if Reg.OpenKey('SOFTWARE\EduP\pedidos', false) then
        Begin
            fBBDD := Reg.ReadString('BBDD');
        End
        else
        Begin
            if (Reg.OpenKey('\SOFTWARE\EduP\pedidos', true)) and
               (OpenDialog1.Execute) then
            Begin
                fBBDD := OpenDialog1.FileName;
                Reg.WriteString('BBDD', fBBDD);
            End
            else
            Begin
                Showmessage('Error en la instalación de la aplicación');
                Application.Terminate;
            End;
        End;
        if Conexion.Connected then
          Conexion.close;
        try
            Conexion.ConnectionString := bbdd1 + fbbdd + bbdd2;
            Conexion.Open;
        except
          if (Reg.OpenKey('\SOFTWARE\EduP\pedidos', true)) and
               (OpenDialog1.Execute) then
            Begin
                fBBDD := OpenDialog1.FileName;
                Reg.WriteString('BBDD', fBBDD);
                Conexion.ConnectionString := bbdd1 + fbbdd + bbdd2;
                conexion.Open;
            End
            else
            Begin
                Showmessage('Error en la instalación de la aplicación');
                Application.Terminate;
            End;
        end;
    finally
      reg.Free;
    end;
end;
end.
En la creación del DataModule el programa va a buscar en el registro de Windows la rama HKEY_LOCAL_MACHINE\software\EduP\Pedidos y recoge un valor de cadena que se llama BBDD. En este valor se almacena la ruta y el nombre de la base de datos.

Si la clave no existe se lanza el opendialog para que se seleccione la base de datos y guarda el valor.

Una vez tiene el valor concatena los textos para la connectionString y abre la conexión a la base de datos.

A partir de ahí cualquier TADOTable o TADOQuery necesita acceder al TADOConnection del DataModule y listo.

Espero que te sirva

Edu
Responder Con Cita
  #2  
Antiguo 13-12-2005
Moises22 Moises22 is offline
Miembro
 
Registrado: sep 2005
Posts: 53
Poder: 21
Moises22 Va por buen camino
Me da un error de lectura.

Yo lo que hago es incluir UDataModule en el formulario principal y desde alli hago:

DataMod.DataModuleCreate(self);

La linea donde me da el error es esta:

Begin
if (Reg.OpenKey('\SOFTWARE\Gestorvvs\datos', true)) and
(OpenDialog1.Execute) then

...

Te pediria un ultimo favor y es que al no saber utilizar los DataModule me gustaria que me pusieses un ejemplo sobre como harias tu una sentencia SQL una vez obtenida la UDataModule.pas.

Supongo que una vez hecha esta unidad la puedo utilizar todas las veces que quiera.Muchas gracias por todo y un saludo

Última edición por Moises22 fecha: 13-12-2005 a las 15:03:50.
Responder Con Cita
  #3  
Antiguo 13-12-2005
Avatar de epuigdef
epuigdef epuigdef is offline
Miembro
 
Registrado: jul 2005
Posts: 196
Poder: 22
epuigdef Va por buen camino
Esta unidad va a ser común para todo el proyecto. En cualquier formulario que necesites acceder a la base de datos deberás incluirla en el uses. Después pinchas un TADOQuery en el formulario y miras la ventana de propiedades: Encontrarás una que se llama Connection. Si deslpiegas te va a aparecer la conexión del DataModule. Una vez seleccionada la conexión debes utilizar la propiedad SQL para escribir la sentencia, y desde código asignar los parámetros y abrir este TADOQuery. Mut fácil.


Edu
Responder Con Cita
  #4  
Antiguo 14-12-2005
Moises22 Moises22 is offline
Miembro
 
Registrado: sep 2005
Posts: 53
Poder: 21
Moises22 Va por buen camino
Unhappy

Sip correcto, pero mi problema es el siguiente.

He hecho lo que me has dicho y añado en el form que yo quiero lo siguiente:

ADOQuery1.SQL.Add('Select * from usadas');
ADOQuery1.Open;
ADOQuery1.Free;

Pues bien, me da un error que me dice "Missin connection or ConnectionString", parece que no pilla bien la conexion. El DataModule lo tengo exactamente = que el que me propusiste. Gracias por la ayuda de todas formas
Responder Con Cita
  #5  
Antiguo 14-12-2005
Avatar de epuigdef
epuigdef epuigdef is offline
Miembro
 
Registrado: jul 2005
Posts: 196
Poder: 22
epuigdef Va por buen camino
Te falta el ADOQuery1.connection := DataModule.Conexion

Si lo tienes pinchado en el formulario puedes ir a la página de propiedades y seleccionalo.

Un saludo

Edu
Responder Con Cita
  #6  
Antiguo 14-12-2005
Moises22 Moises22 is offline
Miembro
 
Registrado: sep 2005
Posts: 53
Poder: 21
Moises22 Va por buen camino
Eso lo puse como me dijiste, es decir, en las propiedades del objeto TADOQuery mire Connection, desplegue y me salio automaticamente DataMod.Conexion , supongo que si hago estoy no le tengo que hacer en el codigo.

Aunque tb e de decirte que e probado a poner lo que me dijiste desde el codigo, es decir, ADOQuery1.Connection:=DataMod.Conexion; y me sigue dando exactamente el mismo error.

La UDataModule esta copiada de la que me propusiste, tengo la impresion de que algo anda mal alli, pero tb podria ser que me pasara por alto algo al enlazar con ADOQuery.

¿ Que puede ser ? ¿ Que se me ha podido pasar por alto ?

Última edición por Moises22 fecha: 14-12-2005 a las 10:04:49.
Responder Con Cita
  #7  
Antiguo 14-12-2005
Moises22 Moises22 is offline
Miembro
 
Registrado: sep 2005
Posts: 53
Poder: 21
Moises22 Va por buen camino
He resuelto uno de los problemas leyendo en el foro, y es que habia que poner en la ejecucion de la Aplicacion que se creara el UDataModule antes que el Unit1.

Ahora me da un problema que considero mas logico aunque no consigo saber por qué.Me dice:

No se encontro el origen de datos o no especifico un o no se especifico ningun controlador predeterminado

¿¿¿¿ Que estoy haciendo mal ?????
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 20:57:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi