![]() |
ADO: Error al ejecutar una consulta repetidamente
Hola a todos. Antes de nada agradeceros vuestro tiempo por leer este mensaje.
Entrando en materia, tengo una BD en acces, conecto en delphi 5 a traves de los componentes ADO y el error al que soy incapaz de dar con la solución consiste en lo siguiente; de un bucle for llamo en cada iteración a la siguiete consulta: Procedure TMDatos.LeerRegistroPreguntaEspecialidad(Id_Pregunta:Integer); begin {Cerrar Query} MDatos.ADOQuery2.Close; With MDatos.ADOQuery2 do begin SQL.Clear; SQL.Add('Select * from Pregunta_Especialidad Where Id_Pregunta=: MiId_Pregunta'); Parameters.ParamValues['MiId_Pregunta']:=Id_Pregunta; Open; end; end; Esta consulta funciona perfectamente la primera vez que es llamada desde el bucle for; el problema reside en que en la segunda vez que es llamada, salta el error, que aparte de informar que ha levantado una excepción dice lo siguiente : "El valor de EOF o BOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual". En concreto el error salta en la linea donde cierro el ADOQuery2 (MDatos.ADOQuery2.Close;). La lectura de los datos de la consulta la hago desde la unit que llama a esta función (donde se está ajecutando el bucle for, comentado anteriormente) Agradezco vuestro tiempo y saber.... Un saludo y gracias.:p |
y donde está el bucle for ............ ? que no se ve por donde puede petar ese codigo y menos al cerrar la consulta tron! verás tu, me parece que lo que tienes no es un problema de datos sino más bién en el algoritmo que lo resuelve.
un saludo. |
Efectivamente como indica el anterior compañero si puedes tener algún tipo de error en algún algoritmo que no nos presentas. Aunque ese error sale tambien cuando debes de actualizar la versión de los componnetes ADO y MSDAC de Microsoft, que si no recuerdo mal, con el D6 venían con un bug de fabricación y te detectavan en ocasiones ese error equivalente a que la consulta la tuvieses vacia.
En definitiva, vigila tu código, no sea que vacies todo el contenido de la consulta y después intentes hacer algún tipo de movimiento a alguna tupla (inexistente) y si no es eso, yo te aconsejaría que revisases el bajarte la actualización de las componentes ADO y MSDAC respectivamente. Suerte. ;) |
Suponiendo que el código desde el que llamas a tu función sea correcto el problema viene dado, como bien dice Cabanyaler, por la actualización del MDAC y componentes ADO. Mirate este post, a mi tambien me pasó en su día, alli esta la dirección para bajarte las actualizaciones:
http://www.clubdelphi.com/foros/showthread.php?t=3171 Saludos, Tony |
Algoritmo no
Comprobare el tema del MDAC y el parche de delphi, aunque tengo instalada la 2.8 de microsoft. No es problema de algoritmo seguro; no creo que sea necesario incluir el bucle for por dos razones: es demasiado largo para introducirlo en el foro y además el error comentado no sólo me pasa con esa consulta, sino con todas, asi que el problema no es de algoritmo.
Aun suponiendo que fuera problema de algoritmo, ¿por qué no dejarme cerrar una ADOquery aunque eliminará todos sus registros?. ¿ No podría implementar una función que eliminara registros uno por uno por la razón que sea?. Gracias a todos por vuestra ayuda. Un saludo. |
si es como tu dices, vigila que haya una primary key en las tablas referenciadas o que los parametros que le pasas no sean nulos, el ado de delphi 6 tiene problemas graves de implementacion, aun no estan corregidos para la version de D7 y menos aun en la D8 donde ni tan siquiera existe; te soy honesto, me cuesta creer que pete porque si y lo repito. espero haber ayudado.
un saludo. |
Resuelto.... gracies a todos
Problema resuelto. Cabanyaler y Tcp Ip Es dieron en el clavo... ahora va como la seda.
No obstante, agradecer sinceramente a todos su tiempo y esfuerzo en ayudarme, ya que todos han ayudado (esto va sobre todo por oscorm :) ). Terminando este hilo, saber que aqui estoy para lo poco que se... Un saludo. |
La franja horaria es GMT +2. Ahora son las 10:32:39. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi