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)
-   -   Problemas con Consultas!!! (https://www.clubdelphi.com/foros/showthread.php?t=4955)

jeni 03-11-2003 19:34:30

Problemas con Consultas!!!
 
Hola, tengo un problemilla, lo que pasa esque estoy haciendo un pequeño sistema en el cual estoy registrando proyectos que se realizan dentro de una escuela, pero para registrar un proyecto necesito verificar si no existe alguno parecido que ya este registrado, para esto hago una consulta, el problema aqui esque debajo del codigo de la consulta quiero poner una condicion la cual me diga que si el resultado de la consulta es mayor o igual que uno(osea que si encontro algun proyecto similar)no me permita registrar el nuevo proyecto y si es igual a cero que si lo registre.

Bueno el chiste es que no se como saber si la consulta arrojo resultados o no, si alguien me puede ayudar se lo agradezco de antemano...

A mi consulta es la siguiente:

query1.close;
query1.open;
query1.SQL.clear;
query1.sql.add('Select tbl_proyectos.Num_Control,tbl_proyectos.Titulo');
query1.sql.add('from tbl_proyectos');
query1.sql.add('where tbl_proyectos.cve_empresa=:empresa and tbl_proyectos.cve_tipo=:tipo and tbl_proyectos.num_control<>:control');
query1.ParamByName('empresa').datatype:=ftstring;
query1.ParamByName('tipo').datatype:=ftstring;
query1.ParamByName('empresa').value:=e_empresa.text;
query1.ParamByName('tipo').value:=e_tipop.text;
query1.ParamByName('control').datatype:=ftstring;
query1.ParamByName('control').value:=e_numcontrol.text;
query1.open;


Espero me haya sabido explicar...
jeni

Viet 03-11-2003 19:59:06

creo que con

Código:

Query1.RecordCount > 0
Estaria bien

Lepe 04-11-2003 11:49:57

Tengo entendido que en Tablas paradox el RecordCount funciona bien, pero en otros sistemas puede dar un valor erróneo.

Una alternativa que nunca falla es:

Código:


query.Open;
if not query.IsEmpty then
while not query.eof do
begin
  if query.fields[0].isNull then // jarrrr valor nulo del primer campo.
  if query.fieldByName('NombreCampo').asinteger = 0 then // blah
// blah, blah
  query.Next
end;


robertgs 04-11-2003 15:26:02

Otra opción que tienes si no te funciona el recordCount, que funciona en casi todas las BBDD es poner un contador y recorrer la consulta hasta que el contador sea mayor que 1, y utilizar una variable para salir del bucle cuando sea:

acabado:boolean;

acabado:=false;
while (not query.eof) and (not acabado) then
begin
i:=i+1;
if i>1 then
acabado:=true;
end;


Espero que sirva de ayuda.

__cadetill 04-11-2003 15:39:32

Lo mejor es lo que comenta el amigo Lepe, es decir, comprobar el estado de IsEmpty

Código:

try
  Query.Open;
except
  Exit;
end;

if Query.IsEmpty then
  // no hay registros
else
  // hay registros



La franja horaria es GMT +2. Ahora son las 04:13:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi