FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problema recordset vacio en Procedimiento almacenado con ADO
Hola a todos, tengo un problema...... estoy manejando procedimientos almacenados con postgres y ado-odbc para la conectividad, todo va bien.... el problema es cuando ejecuto un procedimiento de búsqueda y no me devuelve nada (no existe el registro) me bota un error que dice: "El valor de bof o eof es true, o el actual registro se eliminó; la operación solicitada requiere un registro actual".
Cuando hay registros que coinciden con búsqueda me devuelve datos, los muestro, todo normal, el problema es cuando no existe registro que satisfaga la búsqueda (select no devuelve nada), el programa me bota ese error y ya no puede realizar búsquedas, ni las que realizaba con éxito. Bueno....... según la documentación de Microsoft respecto a ado es porque estoy cerrando el recordset vacío (utilizo el metodo CLOSE para el ADOSTOREDPROC y desactivo-activo un DATASOURCE vinculado al proc para actualizar la info en un DBGRID). Alguna Sugerencia? Gracias por adelantado |
#2
|
||||
|
||||
Haces alguna operación con el AdoStoredProc??? algo como moverte por los registros asi como AdoStoredproc.first??? Es posible que al no tener datos e intentar moverte por los registros te tire ese error. Lo ideal antes de moverte es ver si ese dataset tiene datos. algo como:
Código:
if AdoStoredProc1.IsEmpty then Hago lo que tenga que hacer.... |
#3
|
||||
|
||||
aquí está el código
Gracias por la respuesta, la verdad no estoy recorriendo el dataset sino que solo ejecuto el procedimiento, este me devuelve registros y solo muestro el resultado, en realidad es una función en postgresql que me devuelve un set of record:
Código:
DataModule2.buscar_cliente.Close(); DataModule2.buscar_cliente.Parameters[0].Value=Edit21.Text; DataModule2.buscar_cliente.Prepared=True; DataModule2.buscar_cliente.ExecProc(); DataModule2.buscar_cliente.Open(); if (DataModule2.buscar_cliente.RecordCount=0) then begin ShowMessage('No hay coincidencias'); DataModule2.DataSource2.DataSet.Active=False; end; else DataModule2.DataSource2.DataSet.Active=True; El problema va cuando no ecuentra coincidencias, me muestra el mensaje de "el valor bof o eof es true..............." y la búsqueda ya no funciona más, solo me muestra el mensaje cada vez que ejecuto el procedimiento. Parece que tendría que "reiniciar" el procedimiento cada vez que lo ejecuto pero no sé como hacerlo. |
#4
|
||||
|
||||
Si el resultado del StoredProc es un conjunto de registros no deberías de llamar a ExecProc simplemente llama a Open, a parte de poner el prepared a false antes de asignar parametros....
Código:
DataModule2.buscar_cliente.Close; DataModule2.buscar_cliente.Prepared=False; DataModule2.buscar_cliente.Parameters[0].Value=Edit21.Text; DataModule2.buscar_cliente.Prepared=True; DataModule2.buscar_cliente.Open; if (DataModule2.buscar_cliente.isempty) then begin ShowMessage('No hay coincidencias'); DataModule2.DataSource2.DataSet.Active=False; end else DataModule2.DataSource2.DataSet.Active=True; |
#5
|
||||
|
||||
Ok.......... cambie el código como me indicaste pero igual da el error ese y la búsqueda ya no jala, bueno entonces cual es la diferencia entre ExecProc y Open?
|
#6
|
||||
|
||||
a ser posible indicanos el código del storeproc.
P.D. En principio el execproc no devuelve cursor y el open si, es decir el execproc es para consultas que no sean select y no devuelven conjunto de datos vease insert, updates... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
problema con procedimiento almacenado | aladelta | Firebird e Interbase | 7 | 14-02-2007 01:52:34 |
Problema con Procedimiento almacenado | Tauro78 | Firebird e Interbase | 6 | 12-02-2007 17:43:06 |
Problema con procedimiento almacenado | XBart | Firebird e Interbase | 3 | 27-10-2005 09:08:17 |
Problema con procedimiento almacenado | juziel | Firebird e Interbase | 4 | 20-09-2004 18:31:41 |
Problema con un procedimiento almacenado | Markoz | Firebird e Interbase | 1 | 08-07-2003 11:47:20 |
|