PDA

Ver la Versión Completa : 'operation not supported' al hacer un recordcount


identsoft
24-07-2013, 12:46:50
Supongo que será una tontería, pero no doy con la solución.
Pongo el código.
sqldataset1.close;
sqldataset1.commandtext := ' select expediente_e, importe_e from hono_cli where cliente = :icodigo and modulo = :imodulo';
sqldataset1.ParamByName('icodigo').AsInteger := StrToint(dbeCliente.Text);
SqlDataset1.ParamByName('imodulo').Asstring := ucmodulo;
SqlDataset1.open;
if sqlDataset1.RecordCount > 0 then .....

El Sqldataset.Open lo hace correctamente, pero en la siguiente linea (recordcount) es cuando da el error 'Operation not Supported'.
DbeCliente es un DBEDIT y trae un valor correcto.
UcModulo es una variable String que también tiene un valor correcto, de tal manera que si hacemos :
SqlDataset1.commandtext := 'select expediente_e, importe_e from hono_cli where cliente = '+ dbecliente.text + ' and modulo = ' + quotedstr(ucmodulo);
sqldataset1.open; if sqldataset1.recordcount > 0 then ....
No da ningún tipo de problema.
los parámetros están (creo) bien definidos (icodigo DataType = ftInteger y imodulo DataType = ftUnknow) los dos Paramtype = ptInput
Deduzco que el error debe estar en los parámetros ...
¿Alguna ayuda?
Utilizo Delphi 2006 y Firebird 2.5
Un saludo

Casimiro Notevi
24-07-2013, 14:39:34
¿Qué es sqldataset1?

ecfisa
24-07-2013, 14:42:35
Hola identsoft.

No acostumbro a usar la propiedad RecordCount ya que no funciona con todos los componentes. Para saber si la consulta devolvió algún resultado podes hacer :

...
if not SqlDataset1.IsEmpty then
...


Saludos :)

identsoft
24-07-2013, 17:24:49
Ante todo gracias por vuestro tiempo.
casimiro: Sqldataset1 es uno de los componentes de DBExpress para enlace con la BD Firebird.

ecfisa: el problema creo que no está en el recordcount. Creo que el problema debe estar en los valores que recogen los parámetros, porque el segundo código (también con RecordCount pero sin parámetros) funciona perfectamente.

ecfisa
24-07-2013, 18:16:53
Hola identsof.

Te sugerí usar la propiedad IsEmpty ya que sqlDataset1.RecordCount > 0 es equivalente a not SqlDataset1.IsEmpty.

En la ayuda de Delphi sobre TSQLDataSet dice:

...
Reading RecordCount will generate an exception if the dataset can’t determine the number of records. Do not read RecordCount if:

The dataset represents stored procedure.
The dataset represents a query that contains parameters.
The dataset represents a multi-table join.




Saludos. :)

ozsWizzard
24-07-2013, 18:57:31
Ante todo gracias por vuestro tiempo.
casimiro: Sqldataset1 es uno de los componentes de DBExpress para enlace con la BD Firebird.

Sqldataset1 es el nombre que tú le has dado al componente, se intuye que es un TSqlDataSet pero no tendría porque serlo, algunos ponemos nombres a la variables :p

No es bueno dar cosas por hecho, ten en cuenta que Casimiro no tiene por qué usar ese componente y puede pensar que es un nombre que tú le has dado a un TSqlQuery, por ejemplo.

Un saludo

Casimiro Notevi
24-07-2013, 19:01:35
Claro, por eso lo preguntaba, para saber de qué componente se trataba.

Confirmo lo dicho también por ecfisa, no uses recordcount.

olbeup
25-07-2013, 09:54:13
Hola identsoft,

Revisa esto (http://www.clubdelphi.com/foros/showthread.php?t=79207&highlight=RecordCount) sobre RecordCount y sigo en mis trece, afirmo y confirmo que RecordCount no falla. ;)

Un saludo.

identsoft
25-07-2013, 10:20:04
Gracias a todos por vuestro tiempo.
No volveré a utilizar Recordcount (con parámetros). Desconocía que no funciona correctamente.
Con IsEmpty funciona correctamente.
olbeup no quiero volver a discutir lo ya discutido, pero sqldataset.recordcount NO funciona CON parámetros y SI funciona SIN parámetros (por lo menos a mí). Y además según eficsa el manual lo dice claramente (cosa que desconocía).


Un saludo