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 12-12-2005
Moises22 Moises22 is offline
Miembro
 
Registrado: sep 2005
Posts: 53
Poder: 19
Moises22 Va por buen camino
Question Conexion con Access

Hola a todos.

Me he llevado varios dias leyendo este foro y es una maravilla y una gran ayuda para poder programar en delphi, mis felicitaciones. Ahora bien, me gustaria hacer una consulta sobre una eleccion que debo de hacer:

Estoy haciendo un proyecto Delphi el cual en la mayoria de los casos se instalara en una red (porque normalmente sera una oficina) y en la cual se podran hacer distintas operaciones comunes en cualquier base de datos. Pues bien, e decidido utilizar access por su gran sencillez y versatilidad, pero aun es una desicion revocable si ustedes me lo aconsejarais.

La mayoria de las oficinas donde se instalará la aplicacion sera de la siguiente manera:

-Una maquina que hara de servidor, donde se instalara la aplicacion y la base de datos (como he dicho antes Access).

-Varios clientes que accederan a la base de datos que se instalo en el paso anterior, es decir, el servidor.

-Ademas cualquiera de estos clientes o el mismo servidor tendra una opcion en la cual podra elegir subir registros (los que se elijan) previamente almacenados en la base de datos local hacia una base de datos MySQL que hay en un servidor web. Tambien podran bajarse registros a la base de datos local...

Pues bien me gustaria que me aconsejaran sobre que conexiones utilizar en mi aplicacion sobre: ( 1 ) la conexion del cliente al servidor (Access) y ( 2 ) del servidor al servidor Remoto (MySQL).

En la conexion ( 1 ) explorando e visto por ahí la existencia de los archivos udl mas concretamente con el Proveedor "Microsoft Jet 4.0 OLE DB". Me gustaria saber si esta es una buena opcion combinandola con las herramientas ADOConnection para el caso que os he propuesto. Y me gustaria saber si se puede manipular este archivo desde Delphi 7 para variar la ruta de la base de datos y como hacerlo.

En la conexion ( 2 ) aun no he elegido nada, si me pudieran sugerir conexiones y herramientas se lo agradeceria enormemente.

Muchas gracias por su atencion y 1 saludo a todos

Última edición por Moises22 fecha: 12-12-2005 a las 13:45:05.
Responder Con Cita
  #2  
Antiguo 12-12-2005
Avatar de epuigdef
epuigdef epuigdef is offline
Miembro
 
Registrado: jul 2005
Posts: 196
Poder: 19
epuigdef Va por buen camino
Buenas!


Por lo que se refiere a la conexión con Access, fijate que en la propiedad connectionString tienes la ruta a la base de datos.

Lo que hago normalmente es guardarme en el registro de windows la ruta al servidor, cuando se ejecuta el programa voy a recogerla y concateno la connectionstring con el resto de parámetros. Entonces abro la conexión.

Te puedes montar una pequeña pantalla para configurar el valor que tienes guardado en el registro, por si alguna vez cambia de ubicación la base de datos.

Un saludo

Edu
Responder Con Cita
  #3  
Antiguo 13-12-2005
Moises22 Moises22 is offline
Miembro
 
Registrado: sep 2005
Posts: 53
Poder: 19
Moises22 Va por buen camino
ok, es decir, editarlo como un fichero de texto cambiando la ruta en el caso de que quisiera cambiarla cierto???

Se me plantean dos preguntas:

¿Como manejan los registros de windows?

¿En lo referente a la conexion a MySQL alguien me puede ayudar?

Gracias por todo
Responder Con Cita
  #4  
Antiguo 13-12-2005
Avatar de epuigdef
epuigdef epuigdef is offline
Miembro
 
Registrado: jul 2005
Posts: 196
Poder: 19
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
  #5  
Antiguo 13-12-2005
Moises22 Moises22 is offline
Miembro
 
Registrado: sep 2005
Posts: 53
Poder: 19
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
  #6  
Antiguo 13-12-2005
Avatar de epuigdef
epuigdef epuigdef is offline
Miembro
 
Registrado: jul 2005
Posts: 196
Poder: 19
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
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


La franja horaria es GMT +2. Ahora son las 20:40:15.


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