Título: Ejecución asincrona de consultas mediante ADO C++ Publicado por: SubAtomicParticula en 3 Agosto 2017, 07:35 am Saludos, tengo problemas para ejecutar consultas con ADO C++. Uso ADO en C++ importando la libreria:
#import "C:\\Program Files (x86)\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF", "EndOfFile") El problema parece ser que las consultas se ejecutan de manera asincrona. Al eliminar un registro de la base de datos y volver a cargar la tabla no se refleja el cambio hasta pasado algún tiempo. Esto ocurre al usar el método Command->Execute(NULL, NULL, adCmdText | adExecuteNoRecords); La conexión a la Base de datos la configuro de la siguiente manera: // CadenaDeConexion = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet // OLEDB:Database Locking Mode=1;Data Source=Base de datos.mdb;Mode=Share Deny None;Jet // OLEDB:Engine Type=3;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet // OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without // Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System // Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet // OLEDB:Global Bulk Transactions=1" CoInitialize(NULL); Conexion.CreateInstance(__uuidof(ADO::Connection)); Conexion->Open(CadenaDeConexion, L"", L"", adConnectUnspecified); Comando.CreateInstance(__uuidof(Command)); Comando->ActiveConnection = Conexion; Para consultas de ejecucion uso el método: void DB::EjecutaSQL(wchar_t SQL){ Comando->CommandText = SQL; Comando->Execute(NULL, NULL, adCmdText | adExecuteNoRecords); } Y para obtener el recordset uso el método: void DB::CreaTabla(wchar_t SQL) { Tabla.CreateInstance(__uuidof(ADO::Recordset)); Tabla->Open((wchar_t*)SQL, (IDispatch *)Conexion, adOpenKeyset, adLockOptimistic, adCmdText); } Estoy bastante perdido, si alguién domina ADO se agradecería alguna indicación. Gracias, un saludo. Título: Re: Ejecución asincrona de consultas mediante ADO C++ Publicado por: SubAtomicParticula en 3 Agosto 2017, 13:41 pm Me auto respondo:
El problema está en que hay que borrar los punteros a Conexion y Tabla (_ConnectionPtr, _RecordsetPtr) y volver a crearlos e inicializarlos en cada consulta o ejecucion. Un saludo. |