Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Conexión dinámica a base de datos .mdb (https://www.clubdelphi.com/foros/showthread.php?t=86423)

grandzon 06-08-2014 17:08:33

Conexión dinámica a base de datos .mdb
 
Hola tod@s.

Una vez más solicito ayuda de los expertos del foro, estoy desarrollando una aplicación en Delphi XE3 en la que deseo que al iniciar por primera vez si no encuentra la ruta a la base de datos, que guardo en el Registro Windows, me pregunte por dicha ruta usando un TOpenDialog. La función que uso para grabar la ruta en el Registro lo hace perfectamente, la que uso para leerla... no estoy seguro lo haga tan bien. El principal problema que he notado es que me borra la ruta de acceso del Registro al cerrar la aplicación, lo he notado porque: 1-inicio la aplicación, me pregunta por la ruta de la Base de Datos y se la especifico luego ejecuto el RegEdit y la ruta está ahí, 2-cierro la aplicación luego entro a RegEdit nuevamente y la ruta ya no está.

Este es el código que estoy usando en el módulo de datos (donde tengo alojado un TADOConnection) en el evento OnCreate:

Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);
var
  rutaBD:string;
  conexion:widestring;
begin
  rutaBD:=regread('Softwate\Proyecto6527', 'Base de Datos', ''); //tratar de leer la ruta a base de datos

  if not (fileexists(rutaBD)) then //si no existe la ruta crearla usando como base el cuadro de diálogo
  begin
    application.MessageBox('Por favor localice la base de datos','No tengo base de datos');
    if OpenDialog1.Execute() then rutaBD:=OpenDialog1.FileName; //asignar la ruta del cuadro de diálogo a la rutaBD
    conexion:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
    +rutaBD+';Persist Security Info=False';
    ADOConnection1.ConnectionString:=conexion;
    try
      ADOConnection1.Open();
      regwrite('Base de Datos', rutaBD);
    except on e:exception do
      showmessage('Hubo un error al conectarse a la base de datos');
    end;
  end;
end;

Estas son las funciones RegRead y RegWrite

Código Delphi [-]
function regwrite(nombre, valor: string): boolean;
var
  registro: tregistry;
begin
  registro:= tregistry.Create;
  result:= true;
  with (registro) do begin
    try
      if (openkey('\software\Proyecto6527', true)) then
        writestring(nombre, valor)
      else
        result:= false;
    finally
      free;
    end;
  end;
end;

function regread(ruta, nombre, valor: string): string;
var
  registro: tregistry;
begin
  registro:= tregistry.Create;
  result:= '';
  with (registro) do begin
    try
      if (openkey(ruta, true)) then begin
        result:= readstring(nombre);
        if (result = '') then begin
          regwrite(nombre, valor);
          result:= valor;
        end;
      end;
    finally
      free;
    end;
  end;
end;

...y este es el orden de creación de los componentes en el Código Fuente del Proyecto

Código Delphi [-]
Application.CreateForm(TDataModule1, DataModule1);
  Application.Initialize;
  Application.MainFormOnTaskbar := True;

Si alguien pudiera decirme qué estoy haciendo mal (le he dado mil vueltas a esto y no encuentro qué sea), o sugerirme una manera más sencilla y efectiva de hacerlo se lo agradecería bastante.

Neftali [Germán.Estévez] 06-08-2014 17:52:03

Es posible que si usas la misma clave para leer y para escribir funcione...

Cita:

Empezado por grandzon (Mensaje 479807)
Código Delphi [-]
...
begin
  rutaBD:=regread('Softwate\Proyecto6527', 'Base de Datos', ''); //tratar de leer la ruta a base de datos
  ...


Cita:

Empezado por grandzon (Mensaje 479807)
Código Delphi [-]
  ...
      if (openkey('\software\Proyecto6527', true)) then
        writestring(nombre, valor)
...

...Softwate <> Software...

:D:D

grandzon 06-08-2014 18:20:21

Gracias por hacerme notar esa falta hermano, pero luego de corregirla ahora me da 'Authentication failed'

Neftali [Germán.Estévez] 07-08-2014 09:52:59

¿Tu Base de Datos tiene contraseña?
La mía sin contraseña (la que viene de pruebas con Delphi) ha conectado sin problemas.
Si la Base de Datos tiene contraseña, debes cambiar la cadena de conexión.

grandzon 10-08-2014 23:46:17

Gracias por sus aclaraciones Neftali, el problema era justamente ese "la contraseña" jajaja... la solución es que en lugar de especificarla en la propiedad "password" debí hacerla en la propiedad "Jet OLEDB:Database password"... hasta un poco de vergüenza me dio, pero como dicen "no hay preguntas tontas solo tontos que no preguntan" :p, gracias de nuevo


La franja horaria es GMT +2. Ahora son las 23:00:43.

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