Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-08-2004
sostro sostro is offline
Miembro
 
Registrado: ago 2004
Posts: 24
Poder: 0
sostro Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 31-08-2004
oscorm oscorm is offline
Miembro
 
Registrado: ago 2004
Ubicación: Alcorcón
Posts: 59
Poder: 20
oscorm Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 31-08-2004
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
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.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #4  
Antiguo 31-08-2004
Avatar de tcp_ip_es
tcp_ip_es tcp_ip_es is offline
No confirmado
 
Registrado: ago 2003
Ubicación: Madrid
Posts: 635
Poder: 0
tcp_ip_es Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 31-08-2004
sostro sostro is offline
Miembro
 
Registrado: ago 2004
Posts: 24
Poder: 0
sostro Va por buen camino
Wink 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.
Responder Con Cita
  #6  
Antiguo 31-08-2004
oscorm oscorm is offline
Miembro
 
Registrado: ago 2004
Ubicación: Alcorcón
Posts: 59
Poder: 20
oscorm Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 31-08-2004
sostro sostro is offline
Miembro
 
Registrado: ago 2004
Posts: 24
Poder: 0
sostro Va por buen camino
Smile 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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:34:39.


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
Copyright 1996-2007 Club Delphi