• Martes 21 de Mayo de 2024, 04:50

Autor Tema:  Conexión A Bd Con Nombre Desde Diálogo  (Leído 1646 veces)

shackletta

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Conexión A Bd Con Nombre Desde Diálogo
« en: Lunes 15 de Noviembre de 2004, 18:46 »
0
Hola de nuevo, intento realizar una conexión ADO a una BD en access cuyo nombre escoge el usuario desde un diálogo, utilizo el siguiente código:

void __fastcall TFormMainMenu::ButtonConectarClick(TObject *Sender)
{
    OpenDialogBD->DefaultExt="MDB";
    OpenDialogBD->FileName="*.mdb";
    if(OpenDialogBD->Execute())
    {
        // guardo en nombreBDLocal el nombre de la BD elegida por el usuario
        nombreBDlocal = OpenDialogBD->FileName;
        Inicializar(nombreBDlocal);
     }
     else
    {
        ShowMessage("Debe elegir una BD.");
     }
}
//---------------------------------------------------------------------------
// FUNCION Inicializar
// Realiza la conexión a la BD que el usuario ha elegido del diálogo. Se le
// asignan los parámetros correspondientes a la conexión
//---------------------------------------------------------------------------
void Inicializar(AnsiString nombre) //llama a esta función pasandole el nombre que se ha cogido desde el dialogo
{
    //Para la conexión con la BD de destino
    if(DataModule1->ConexionBDlocal->Connected==false)
    {
        AnsiString conexion="Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=";
        conexion+=nombre;
        conexion+=";Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";";
        conexion+="Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;";
        conexion+="Jet OLEDB:Database Locking Mode=2;Jet OLEDB:Global Partial Bulk Ops=2;";
        //Por defecto el locking Mode es 1!!!!!!! con 2 no se bloquea.....
        conexion+="Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";";
        conexion+="Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;";
        conexion+="Jet OLEDB:Don't Copy Locale on Compact=False;";
        conexion+="Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
        DataModule1->ConexionBDlocal->ConnectionString = conexion;
        DataModule1->ConexionBDlocal->Connected = true;
    }
}

Pero me da una EOleException con el mensaje "No se estableció el valor de una propiedad de sólo lectura ",  alguien sabe a que se refiere esto??, la función inicializar debería pertenecer a una clase ¿no?, cómo podría ponerla??, y dónde??

Ambas funciones están en el .cpp del mainform, y nombreBDlocal la he definifo como un AnsiString de manera global también en el mismo .cpp ¿Qué más debería hacer?¿O que no debería hacer?

De todas maneras, si alguien puede indicarme otra forma de hacer lo mismo, que me lo diga POR FAVOOOOOR!!!
 :comp:

Muchas gracias.
[size=109]Sólo sé que esto no va a terminar conmigo, sin embargo yo sí que lo terminaré a él.[/size]

iscjesus

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Conexión A Bd Con Nombre Desde Diálogo
« Respuesta #1 en: Martes 16 de Noviembre de 2004, 01:45 »
0
realmente no se cual sea el motivo de tu error, lo que si veo es que esta algo engorroso tu codigo, (no quiero decir que este mal)

un tip rapido, genera una conexion por asistente es decir en vista de diseño en un objeto ADOConnection y copia y pega esa cadenota de parametros en tu codigo asignandosela a la propiedad ConnectionString del objeto ADOConnection, bueno esta el la primera parte.

haz la rutina en donde te abre el cuadro de dialogo para elegir la base de datos, bueno, cerciorate que la propiedad que almacena el nonbre de archivo que devuelve el cuadro de dialogo este correcto, es decir ruta completa y extension mdb, bueno pues esta ruta asignasela a una variable tipo string y esta variable concatenala con la cadena que pegaste en tu codigo asi como lo haces con la variable "nombre" en tu codigo. realmente es lo mismo que estas haciendo tu pero es menos engorroso, de hecho puedes dejar toda la cadena en una sola linea

puede que tengas algun error de concatenacion y por eso te este marcando el error y pues suerte,

puedes mandarme un mail si lo deseas


jsmr070380@hotmail.com
ISC JESUS SANTIAGO MAGAÑA ROSADO

shackletta

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Re: Conexión A Bd Con Nombre Desde Diálogo
« Respuesta #2 en: Martes 16 de Noviembre de 2004, 10:29 »
0
Muchas gracias, ya he conseguido solucionarlo, he entendido lo que tenía que hacer y ahora funciona perfectamente.... y mi código ha quedado mucho más claro. Lo he hecho todo en la misma funcion, y he quitado la función inicializar();

Un saludo y hasta pronto.
 :D
[size=109]Sólo sé que esto no va a terminar conmigo, sin embargo yo sí que lo terminaré a él.[/size]