Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ADO: Error al ejecutar una consulta repetidamente (https://www.clubdelphi.com/foros/showthread.php?t=13778)

sostro 31-08-2004 00:38:25

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

oscorm 31-08-2004 01:58:20

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.

Cabanyaler 31-08-2004 08:13:35

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. ;)

tcp_ip_es 31-08-2004 09:47:58

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

sostro 31-08-2004 10:11:10

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.

oscorm 31-08-2004 14:33:06

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.

sostro 31-08-2004 17:43:50

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 02:26:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi