PDA

Ver la Versión Completa : Consulta sin resultados!!!!


Giniromero
02-10-2003, 17:19:34
Hola a todos,

Trabajo con una aplicación hecha en delphi 6 con IB 7, y dialecto 3.

¿Cómo puedo expresar, esto



IF (el resultado de la consulta es nulo, esto es, no se han encontrado registros que coincidan con los parametros insertados ) THEN BEGIN
(haz A);
END
ELSE BEGIN
(haz B);
END;




en delphi?

Muchas gracias

Virginia

guillotmarc
02-10-2003, 18:23:02
Hola

¿ Te sirve RecordCount ?


qryConsulta.Params.ParamValues['PARAM1'] = 'XXXX';
qryConsulta.Open;
if qryConsulta.RecordCount = 0 then begin
// No hay Resultados
end
else begin
// Hay Resultados
end;


Saludos.

marcoszorrilla
02-10-2003, 18:30:13
También puedes usar:

IsEmpty;

Un Saludo.

__cadetill
02-10-2003, 18:30:45
yo, personalmente, antes del RecordCount utilizaria


if Query.Fields[0].IsNull then
// no hay resultados
else
// sí hay resultados

Ruben_Cu
03-10-2003, 01:13:43
Hola a todos, tambien pudiera utilizar las propiedades BOF y EOF de la siguiente manera:
IF bof and eof THEN BEGIN
(haz A);
END
ELSE BEGIN
(haz B);
END;
Yo no estoy seguro que la propuesta de cadetill responda en todos los casos creo que pueden existir registros devueltos en el resultado de una consulta y que el valor del fields[0] en el registro corriente sea null y eso no significa que no exista un resultado del query incluso con muchos registros.
O sea, entiendo que IsNull se aplica al valor de un registro para determinado campo y no al conjunto de registros de un dataset. ¿Es así?
Saludos

__cadetill
03-10-2003, 01:57:45
Posteado originalmente por Ruben_Cu
O sea, entiendo que IsNull se aplica al valor de un registro para determinado campo y no al conjunto de registros de un dataset. ¿Es así?

Sacado de la ayuda de Delphi

If IsNull is True, the field is blank. If IsNull is False, the field has a value.

Se seguimos al pie de la letra la definición, en el caso de que el primer campo del registro en curso sea NULL, como NULL es un valor en si, devolvería false.

No obstante, creo que no me he encontrado nunca con esa coincidencia (por el tipo de selects que lanzo cuando lo utilizo), por lo que tampoco lo aseguraría al 100%

roman
03-10-2003, 07:03:06
Esta vez difiero del amigo cadetill.

Tengo una tabla cuyo primer campo de su primer registro es null y Query.Fields[0].IsNull devuelve cierto con la consulta

select * from tabla

de manera que no es una opción para determinar si la consulta devuelve o no resultados.

Yo creo que IsEmpty es lo más adecuado, este precisamente es el objetivo de dicho método y así está implementado desde TDataSet, la madre de todos los datasets, mientras que RecordCount está implemntado para devolver -1 en TDataSet y ya dependerá de los descendientes si lo implementan o no.

// Saludos

guillotmarc
03-10-2003, 10:56:53
Hola, creo que técnicamente Null es más un estado que un Valor, es decir es un estado que anuncia la ausencia de valor. Por eso el IsNull devuelve True sobre un campo nulo de un registro existente.

Aunque para mi esa condición también serviria, puesto que practicamente todas (por no decir todas) mis consultas tienen como primer campo (además es el primer campo definido en las tablas) la clave primaria del registro devuelto. Asi pués, si el campo es nulo es que no hay registro. Imagino que Cadetill también hace las consultas de esta forma, de manera que esa condición siempre es valida para él.

Pero ciertamente, estoy de acuerdo en que la mejor manera de ver si hay registros es utilizar el IsEmpty (está justamente para esto).

Saludos.

Giniromero
03-10-2003, 13:17:41
Muchas gracias por vuestra ayuda,

Finalmente puse algo parecido a lo que me aconsejó guillotmarc, con su RecordCount = 0, y parece que funciona.

Lo dicho, que gracias.

Virginia