Ayuda con problemas de conexión a base de datos Access desde un programa en Visual Basic

Ya hacia un tiempo que no entraba aquí, por que los problemas con el VB ya no surgen, bueno no tanto, si no no estaría aquí.
Al grano. He hecho un programa para un empresa, en la cual se manejan muchos datos, se utiliza una Base de Datos (Access) y por lo tanto hay que guardar, buscar y de demás, el problema no es este ni ninguno que tenga relación a la Base, si que a mi entender el VB da algunos dramas y te explico por que.
Por ejemplo cuando indexo la base para hacer una busqueda (nombase.recordset.index = "nomcampo") el VB lo hace de maravilla muchisimas veces, pero de vez en cuando me da un error que dice que el objeto cancelo la accion o accion cancelada por el objeto, no me acuerdo muy bien, ya te digo que me lo da 1 vez cada 100 digamos, por que vuelvo a probar, incluso con los mismos datos ingresados y nada, lo hago una y otra vez y nada, reinicio el programa y nada, ingreso 10, 15, 20 registros y nada, pero parece que el muchacho este me quiere cabrear por que cuando menos lo espero, SAS!!! De nuevo y yo me cabreo por que parece que me toma el pelo.
Una de las cosas que note es que el error este siempre me lo da cuando busco por primera vez o utilizo por primera vez el programa. Me explico más.
Cuando inicio el programa agrego un registro, el cual le quedan pendientes cosas hasta que la operadora da el visto bueno para los otros datos, pero el programa sigue y la operadora puede agregar más datos, así que cuando ella obtenga el OK da por sentado por ejemplo datos que hace un rato ya ingreso, entonces se hace necesaria el index y la búsqueda, la búsqueda no la hago con SEEK por que puede haber más de un registro con el mismo numero en este caso, así que hay que encontrar el numero y verificar si los datos de acentamiento no han sido realizados, si es así saltamos al siguiente y así hasta encontrarlo.
El problema solo me lo da cuando hago esto, bueno es lo primero que hace así que no se si lo haría con otro mandato.
El problema es que si me da en tiempo de ejecución, la operadora puede perder datos que aun no ha guardado, y tiempo que no posee, por que el trabajo de ella es intenso, así que es fundamental no atrasar nada, creo que no este el único caso, si no que siempre es así.

1 respuesta

Respuesta
1
Primero disculpas, he tenido que cortar las preguntas porque muchísima gente me preguntaba y no podía estar por todos.
Haber entiendo más o menos lo que hace, ¿si me pudieras decir que utilizas, ADO, DAO, versiones? Y demás información com Ms Jet Emgine 3.51 o 4.0... me colocaré la idea en mucho más profundidad.
Hola me gustaría si me podes ayudar, tengo la pregunta hace un tiempo realizada, te agradezco el tiempo prestado desde ya.
Eduardo
Hola.
Mirá utilizo un data control de VB 6.0, no estoy muy seguro pero creo que el MS JET es el 4.0.
El error maldito aun me lo da, hasta que no ejecuto de nuevo el programa me da el mismo error.
Un saludo
Eduardo
Bien. Yo soy partidario de que los controles de ADO o DAO de VB son una porquería y todo lo hago por código. En tu caso al ser el data control el que contola el tema de cursores y tipos de bloqueo lo que haría es capturar el error y con que la segunda vez no lo hace, repetirlo, y así no saldrá el mensaje y además y lo hará. Es decir actúas, cuando te da el error no enseñes el mensaje y como que sabes que el error es ese, vuelte a actuar sobre el data control, la segunda vez no suele pasar.
Esta solución es fea... seguro que lo estas pensando. A veces no, siempre los programadores ponemos código feo. Me refiero que lo más sensato es averiguar el error por propiedades y demás o a veces es montárselo y poner un parche como el que te he dicho. Si quieres saber más te puedo informar de que el error, viene producido por el proveedores de datos. Suele dar cuando haces p.e. una operación de seek en un cursor dinámico, que es imposible debido a la localidad de cursor.
Así tienes dos opciones, minar las propiedades del datacontrol y averiguar tema de bloqueos y cursores y compatibilidades con la acción a realizar o bien poner código feo, pero transparente para el usuario, y funciona... que tampoco, repito, es una opción muy descabellada.
Saludos. Si tienes más dudas te podré ayudar. Encantado Eduardo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas