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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-03-2008
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 19
odrack Va por buen camino
error while..do

Que tal a todos!!

Tengo un problemita con el ciclo while, lo que esta pasando es que no termina el ciclo while con este codigo:

Código Delphi [-]
 
Begin
             query2.close;
             query2.sql.clear;
             query2.sql.add('SELECT usuario as nomart FROM usuarios');
             query2.Open;
              while not query2.eof do
                begin
                 if edit1.Text=query2.Fieldvalues['nomart'] then
                   begin
                    showmessage('El usuario ya existe');
                    query2.Last;
                   end
                 else
                    begin
                     query1.Close;
                     query1.SQL.Clear;
                     query1.SQL.Add('insert into usuarios (usuario, password)');
                     query1.SQL.Add('values('+quotedstr(edit1.Text)+','+quotedstr(edit2.Text)+')');
                     query1.ExecSQL;
                     query3.close;
                     query3.Open;
                     edit1.Text:='';
                     edit2.Text:='';
                     showmessage('Se ha agregado con exito');
                    end;
                end;
              query2.Next;
          end;

alguien sabe por que no lo termina?? Esto pasa cuando no encontro ninguno registro igual y comienza a agregar registros vacios (esto es por que borro el contenido de los edit) pero no logro que termine el while

Última edición por odrack fecha: 01-03-2008 a las 01:39:17.
Responder Con Cita
  #2  
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
Cita:
Empezado por odrack Ver Mensaje
Que tal a todos!!

Tengo un problemita con el ciclo while, lo que esta pasando es que no termina el ciclo while con este codigo:

Código Delphi [-]
Begin query2.close; query2.sql.clear; query2.sql.add('SELECT usuario as nomart FROM usuarios');
query2.Open;
while not query2.eof do begin if edit1.Text=query2.Fieldvalues['nomart'] then begin showmessage('El usuario ya existe');
query2.Last;
end else begin query1.Close; query1.SQL.Clear; query1.SQL.Add('insert into usuarios (usuario, password)');
query1.SQL.Add('values('+quotedstr(edit1.Text)+','+quotedstr(edit2.Text)+')');
query1.ExecSQL;
query3.close;
query3.Open;
edit1.Text:='';
edit2.Text:='';
showmessage('Se ha agregado con exito');
end;
end;
query2.Next;
end;


alguien sabe por que no lo termina??
Hola odrack,
Por empezar veo un Query1.Next que está fuera del ciclo. Muevele una línea antes y dime:

Código Delphi [-]
Begin
             query2.close;
             query2.sql.clear;
             query2.sql.add('SELECT usuario as nomart FROM usuarios');
             query2.Open;
              while not query2.eof do
                begin
                 if edit1.Text=query2.Fieldvalues['nomart'] then
                   begin
                    showmessage('El usuario ya existe');
                    query2.Last;
                   end
                 else
                    begin
                     query1.Close;
                     query1.SQL.Clear;
                     query1.SQL.Add('insert into usuarios (usuario, password)');
                     query1.SQL.Add('values('+quotedstr(edit1.Text)+','+quotedstr(edit2.Text)+')');
                     query1.ExecSQL;
                     query3.close;
                     query3.Open;
                     edit1.Text:='';
                     edit2.Text:='';
                     showmessage('Se ha agregado con exito');
                    end;
                query2.Next; // aqui ebería ir....
                end; // fin while...
              
end;

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 01-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
Para que hacer un while, no hace falta.
Código Delphi [-]
 
Begin
             query2.close;
             query2.sql.clear;
             query2.sql.add('SELECT usuario as nomart FROM usuarios');
             query2.Open;
              if edit1.Text=query2.Fieldvalues['nomart'] then
                   begin
                    showmessage('El usuario ya existe');
                    query2.Last;
                   end
                 else
                    begin
                     query1.Close;
                     query1.SQL.Clear;
                     query1.SQL.Add('insert into usuarios (usuario, password)');
                     query1.SQL.Add('values('+quotedstr(edit1.Text)+','+quotedstr(edit2.Text)+')');
                     query1.ExecSQL;
                     query3.close;
                     query3.Open;
                     edit1.Text:='';
                     edit2.Text:='';
                     showmessage('Se ha agregado con exito');
                    end;
                end;
              query2.Next;
          end;
Saludos
Responder Con Cita
  #4  
Antiguo 01-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
Rectifico, viendo en codigo de delphius, tambien sobra el next.
Código Delphi [-]
Begin
             query2.close;
             query2.sql.clear;
             query2.sql.add('SELECT usuario as nomart FROM usuarios');
             query2.Open;
              if edit1.Text=query2.Fieldvalues['nomart'] then
                   begin
                    showmessage('El usuario ya existe');
                    query2.Last;
                   end
                 else
                    begin
                     query1.Close;
                     query1.SQL.Clear;
                     query1.SQL.Add('insert into usuarios (usuario, password)');
                     query1.SQL.Add('values('+quotedstr(edit1.Text)+','+quotedstr(edit2.Text)+')');
                     query1.ExecSQL;
                     query3.close;
                     query3.Open;
                     edit1.Text:='';
                     edit2.Text:='';
                     showmessage('Se ha agregado con exito');
                    end;
                end;
              query2.Next; // esto sobra
          end;
Saludos
Responder Con Cita
  #5  
Antiguo 01-03-2008
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 19
odrack Va por buen camino
he modificado moviendo el next y agregue un last al final de insert, con eso detengo el while, pero ahora solo me funciona para el primer registro ya que no se mueve al siguiente
Código Delphi [-]
   Begin
             query2.close;
             query2.sql.clear;
             query2.sql.add('SELECT usuario as nomart FROM usuarios');
             query2.Open;
              while not query2.eof do
                begin
                 if edit1.Text=query2.Fieldvalues['nomart'] then
                   begin
                    showmessage('El usuario ya existe');
                    query2.Last;
                   end
                 else
                    begin
                     query1.Close;
                     query1.SQL.Clear;
                     query1.SQL.Add('insert into usuarios (usuario, password)');
                     query1.SQL.Add('values('+quotedstr(edit1.Text)+','+quotedstr(edit2.Text)+')');
                     query1.ExecSQL;
                     query3.close;
                     query3.Open;
                     edit1.Text:='';
                     edit2.Text:='';
                     showmessage('Se ha agregado con exito');
                     query2.Last;
                    end;
                    query2.Next;
                end;
Responder Con Cita
  #6  
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
¿Caral estás seguro? Porque pareciera que odrack desea insertar los usuarios desde una tabla a otra....

odrack, Para que el Last al final de la parte else? A me parece que está demás....

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 01-03-2008
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 19
odrack Va por buen camino
lo que estoy haciendo es insertar a usuarios nuevo en una tabla con un query, eso si lo hace, y tengo el last al final por que sin no termina el ciclo ya que agrega uno tras otro.
Responder Con Cita
  #8  
Antiguo 01-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
Mas que seguro, hacer un recorrido a la tabla es innecesario.
1- revisar si el usuario existe.
2- crear el if, else
3- terminar.
que se inserte en otra tabla es lo de menos.
Saludos
Responder Con Cita
  #9  
Antiguo 01-03-2008
odrack odrack is offline
Miembro
 
Registrado: feb 2008
Posts: 167
Poder: 19
odrack Va por buen camino
Perdon caral, pero hasta donde tengo entendido para recorrer los registros de una tabla tiene que ser con un while.. do, si no como los recorre?? o estoy equivocado??
Responder Con Cita
Respuesta



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 19:18:07.


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