Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #18  
Antiguo 01-03-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Hola odrack,
Analicemos lo que tu pides:

1. Necesitas determinar si un usuario existe en la base de datos
2. En caso de existir no se debe hacer nada
3. Sino existe entonces hay que agregarlo

¿Qué se necesita para conseguir esto?
Para saber si existe el usuario necesitamos hacer una consulta a la base de datos. Esta consulta debe ser restrictiva. Tu error es muy conceptual: ¡No se necesita recorrer toda la tabla para saber si existe!

La verdadera consulta SQL que debes emplear debe ser así:

Código SQL [-]
select id_usuario 
from usuarios
where usuario.Nombre = :pNombre

pNombre es un parámetro y se los distingue por esos dos puntos que lo anteceden. Recomiendo el uso de éstos.
Ahora bien, en la consulta pedimos que nos busque al usuario por un nombre. Entonces antes de lanzar dicha consulta debemos hacer algo como esto:

Código Delphi [-]
ADOQuery1.Parameters.ParamByName('pNombre').Value := Edit1.Text;
ADOQuery1.Parameters.ParamByName('pNombre').DataType := ftString;

Suponiendo que son Componentes ADO. Hice el supuesto de que en Edit1 escribimos el nombre del usuario que deseamos buscar.

Una vez lanzada la consulta tenemos muchas posibilidades de saber si existe este usuario... no se requiere de ningún bucle. ¿Porqué? Porque supuestamente estamos recibiendo al menos un registo (Esto dependerá de tus circunstancias, pero en fin para ejemplo basta).

Podríamos decir que:

Código Delphi [-]
Existe := ADOQuery1.RecordCount >= 1;

¿Que significa esto? Que si la consulta ha devuelto al menos un registro es porque existe. ¿Recorrí los registros afectados para saber si existe? No... y no es necesario... basta con saber si la consulta regresa registros.

Y de aqui en más la actividad es muy simple... basta un simple condicional para saber que acción tomar:

Código Delphi [-]
if Existe
  then ShowMessage('Este usuario ya existe');
  else begin
           // Aqui viene todo el alta
        end;

Creo que con esto se explica mejor la situación y su solución.
Recomiendo una mejor lectura sobre consultas SQL. Tu problema es que haces un select sin restricciones, y asi te ves obligado a examinar los registros... si podemos averiguar a traves de SQL sobre algo en particular vale la pena hacerlo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 01-03-2008 a las 17:18:21.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
error:[Fatal Error] Unit1.pas(7): Unit ZDbcConnection was compiled with a different.. karaoke Conexión con bases de datos 2 19-12-2007 10:22:36
Error en este código. FF funciona/IE da error papulo HTML, Javascript y otros 7 14-11-2007 09:44:23
Error 10093 al ver un informe - Que error es este? URBANO Impresión 1 03-02-2006 18:44:39
¿Por qué me da este error?Error creating cursor manejador nuri SQL 2 01-08-2005 17:30:28
Error: RichEdit line insertation error DarkByte Varios 3 19-07-2004 12:28:09


La franja horaria es GMT +2. Ahora son las 06:42:14.


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