Saludos, tengo un programa que muestra datos de una DB Access a través de ADO. Uso un proveedor "Provider=Microsoft.Jet.OLEDB.4.0;". El problema es que utilizo un:
command->CommandText = "DROP VIEW Niveles";
commando->Execute(NULL, NULL, ADO::adCmdText | ADO::adExecuteNoRecords);
Para eliminar una Consulta y volver a Crearla con otro argumento:
command->CommandText = "CREATE VIEW Niveles AS SELECT ...";
commando->Execute(NULL, NULL, ADO::adCmdText | ADO::adExecuteNoRecords);
Todo se ejecuta bien, pero cuando intento abrir un RecordSet que incluye dicha Consulta me da error en Open:
Recordset->Open("SELECT ... FROM Niveles ...", (IDispatch *)Connection, ADO::adOpenKeyset, ADO::adLockOptimistic, ADO::adCmdText);
Al iniciar el programa la primera iteracción se ejecuta bien, pero a la segunda o tercera vez que ejecuto el código salta error en Recordset->Open, y marca error tabla no existe, debido a que uso una consulta que justo antes he borrado y creado de nuevo.
Si en el código salto la parte de borrar y crear la consulta me funciona bien, por lo que supongo que tiene que ver con borrar la consulta e intentar usarla antes de que se vuelva a crear. Esta afirmación se ve reforzada cuando al utilizar un Sleep(10000); o si creo puntos de interrupción, el programa funciona y obtiene los datos tantas veces como sea necesario.
Si alguien puede darme alguna pista de por donde puedo solucionar el problema.
Gracias, un saludo.