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!!!
Muchas gracias.