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)
-   -   Como averiguar si un registro existe sin usar recordcount (https://www.clubdelphi.com/foros/showthread.php?t=33961)

afarenas 21-07-2006 17:43:07

Como averiguar si un registro existe sin usar recordcount
 
Hola compañeros
Tengo la siguiente inquietud
Resulta que tengo un sql dentro de un tquery
y para verificar si existe el registro lo hago con la propiedad
recordcount si =0 es que no existe y si recordcount>0 es porque existe,
pero resulta que esta propiedad es muy costosa cuando la tabla que consulto tiene muchos datos, de que otra manera lo puedo hacer. y que no sea con algo como
select count(*) from tabla
Gracias

Durbed 21-07-2006 17:48:45

Quizas puedas cargar el campo de la tabla sobre el que buscas en memoria en un stringList y luego buscar sobre esa lista con un while, deberia ir rapido.

PD: Solo cargas la lista una vez o cuando sea necesario, en caso de que se actualice.

nemesio 21-07-2006 18:08:26

Me imagino que lo que quieres saber ese si la consulta resultó con registros. Bueno para ello solo tienes que preguntar
Código Delphi [-]
if not QueryConsulta.IsEmpty then //Si IsEmpty, No se encontró el registro

Suerte.

Neftali [Germán.Estévez] 21-07-2006 18:35:36

Cita:

Empezado por afarenas
select count(*) from tabla

Efectivamente esto es costoso porque le obligas a contar cuantos elementos hay, y eso significa que tiene que recorrer toda la tabla;

Es mejor hacer esto:
Código SQL [-]
SELECT * FROM TABLE WHERE ...

Mejor si limitas a 1
Código SQL [-]
SELECT TOP 1 * FROM TABLE WHERE ...

Y mejor si sólo obtienes un campo
Código SQL [-]
SELECT TOP 1 CampoClave FROM TABLE WHERE ...

PatrickM 24-07-2006 11:52:15

Lo mas facil es mirar si el DataSet associado ha llegado a final de fichero. Si al abrir la consulta con el OPEN ha llegado a EOF es que el DataSet (Consulta) no tiene ningun registro:

Código Delphi [-]
 
With C.SQL Do Begin
  ...
End;
C.Open;
 
If  (C.EOF) Then ShowMessage('RecordCount=0');
 
...

Espero que te sirva.


La franja horaria es GMT +2. Ahora son las 21:03:22.

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