Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Retomar control en Edit

Que tal, buen día a todos. Saludándoles y aprovechando de su conocimiento les pido ayuda para un detalle que tengo con un ciclo While que debería de recorrer una consulta SQL, hace el recorrido a medias y se queda ciclado.
Lo que pretendo hacer es posterior a una consulta SQL. En un Edit de un Form se captura con lector de código EAN13 y al termino se ingresa un ENTER en el evento Edit1KeyPress en esta consulta SQL selecciono Factura,articulo,cantidad,código EAN13,usuario,área y nivel. Los datos principales son los 3 primeros. Se ingresa un numero de factura y esto por consecuencia tiene "X" cantidad de productos que a su vez tienen "Y" cantidad de piezas o unidades. Pretendo que se posicione en numero "Factura" luego haga la búsqueda del código EAN13 y tome como variable la cantidad de piezas para que valide atraves del EDIT y el lector de codigo con el mismo producto y la misma factura. Con la programacion que tengo hace solo una parte, encuentra la factura, el código y piezas y hace el loop según la cantidad. pero después ya no retoma el control en el Edit de la Form. para nuevamente hacer el ciclo y así sucesivamente.
Código Delphi [-]
procedure TForm5_suite_factura.Edit1KeyPress(Sender: TObject;
  var Key: Char);
begin
  if (key = #13) then
    begin
      Nprod:=Edit1.Text;
      DataModule1.ADOQuery8.Close;
      DataModule1.ADOQuery8.Open;
      DataModule1.ADOQuery8.SQL.Clear;
      DataModule1.ADOQuery8.Close;
      DataModule1.ADOQuery8.SQL.Add('SELECT CVE_DOC,NUM_PAR,CVE_ART,CANT,CVE_ALTER,USUARIO,AREA,NIVEL');
      DataModule1.ADOQuery8.SQL.Add('FROM PAR_FACTF_CLASS');
      DataModule1.ADOQuery8.SQL.Add('WHERE CVE_DOC=:Fact');
      DataModule1.ADOQuery8.Parameters.ParamByName('Fact').Value:=Nfact;
      DataModule1.ADOQuery8.ExecSQL;
      DataModule1.ADOQuery8.Open;
      DataModule1.ADOQuery8.First;
      DBGrid1.Columns[0].Visible:= True;
      DBGrid1.Columns[1].Visible:= True;
      DBGrid1.Columns[2].Visible:= True;
      DBGrid1.Columns[3].Visible:= False;
      DBGrid1.Columns[4].Visible:= False;
      DBGrid1.Columns[5].Visible:= False;
      DBGrid1.Columns[6].Visible:= False;
      DBGrid1.Columns[7].Visible:= False;
      Cuser:='NOMBRE USUARIO';
      Carea:='SISTEMAS';
      Nnivel:=0;
      Ncuenta:=0;
      While Not DataModule1.ADOQuery8.Eof Do
        Begin
          DataModule1.ADOQuery8.DisableControls;
            If Not (DataModule1.ADOQuery8.Fields[0].Value<>Nfact) Then
              Begin
                Nprod:=DataModule1.ADOQuery8.Fields[4].AsString;
                  If Not (DataModule1.ADOQuery8.Fields[4].Value<>Nprod) Then
                    Begin
                      Ncant:=DataModule1.ADOQuery8.Fields[3].Asinteger;
                      If (DataModule1.ADOQuery8.Fields[3].Value<>Ncuenta) Then
                        Begin
                          Ncuenta:=Ncuenta+1;
                        End
                      Else
                        Begin
                          DataModule1.ADOQuery8.Next;
                          Edit1.Clear;
                          ShowMessage('Siguiente');
                          Edit1.SetFocus;
                        End
                    End;
              End // Fin de While Nfact=Nfact
        End // Fin de While EOf
    end;
end;

Espero haya sido clara la explicacion.
De antemano Gracias
Responder Con Cita
  #2  
Antiguo 28-11-2014
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

Veo que pones disablecontrols pero no enablecontrols no se si tenga que ver pero solo queria hacerlo notar.

Saludos

Última edición por Caminante fecha: 28-11-2014 a las 16:56:51.
Responder Con Cita
  #3  
Antiguo 28-11-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Hola Caminante, tienes razón en que tengo DisableControls, lo probé activo e inactivo. Pero sigue en lo mismo. Inclusive en el código actual ya lo elimine por si fuese algo que estuviera provocando falla; pero no, no retoma el control al edit de la form para continuar escaneando el siguiente articulo.

Gracias
Responder Con Cita
  #4  
Antiguo 28-11-2014
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola de nuevo

¿Y has probado sacando el ADOQuery8.Next fuera de las condicionales, es decir al final del while??


Saludos
Responder Con Cita
  #5  
Antiguo 29-11-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
No, no lo he sacado. Aunque no se exactamente a que refieres con sacarlo! puedo parecer neófito (realmente lo soy) en ese tema. Podrias si no es molestia con el código que deje dar un ejemplo de lo que refieres?

Gracias y saludos
Responder Con Cita
  #6  
Antiguo 29-11-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Caminante, disculpa no lei correctamente lo del ADOQuery8.next de sacarlo del while. mm deja lo intento y comento.
Responder Con Cita
  #7  
Antiguo 29-11-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Que tal, he sacado el ADOQuery8.next del ciclo while. Pero no esta funcionando como pretendo se queda ciclado y el edit no permite ingresar ningún valor. La intención es que regrese el control a manera de los lectores de las cajas registradoras en el supermercado que se queda en espera del siguiente producto. Solo que a diferencia si hay mas de un producto lo cheque cuantas veces sea la Ncant, para luego pasar al siguiente producto y repetir el ciclo con todos y cada uno de los productos hasta terminar el total de la nota de compra. No tengo idea de que otro código implementar para este efecto.

Gracias nuevamente
Responder Con Cita
  #8  
Antiguo 29-11-2014
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola
Me referia a ponerlo al final como ultima sentencia del bloque while no sacarlo del while. Es decir despues de hacer todas las comparaciones (los if's) hacer next. Sino quedarias atrapado en un bucle infinito.

Saludos
Responder Con Cita
  #9  
Antiguo 01-12-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Caminante, que tal haciendo lo que comentabas de sacar la sentencia next fuera de los condicionales If termina en la primer lectura del lector de codigo.
Código Delphi [-]
  if (key = #13) then
    begin
      Nprod:=Edit1.Text;
      DataModule1.ADOQuery8.Close;
      DataModule1.ADOQuery8.Open;
      DataModule1.ADOQuery8.SQL.Clear;
      DataModule1.ADOQuery8.Close;
      DataModule1.ADOQuery8.SQL.Add('SELECT CVE_DOC,NUM_PAR,CVE_ART,CANT,CVE_ALTER,USUARIO,AREA,NIVEL');
      DataModule1.ADOQuery8.SQL.Add('FROM PAR_FACTF_CLASS');
      DataModule1.ADOQuery8.SQL.Add('WHERE CVE_DOC=:Fact');
      DataModule1.ADOQuery8.Parameters.ParamByName('Fact').Value:=Nfact;
      DataModule1.ADOQuery8.ExecSQL;
      DataModule1.ADOQuery8.Open;
      DataModule1.ADOQuery8.First;
      DBGrid1.Columns[0].Visible:= True;
      DBGrid1.Columns[1].Visible:= True;
      DBGrid1.Columns[2].Visible:= True;
      DBGrid1.Columns[3].Visible:= False;
      DBGrid1.Columns[4].Visible:= False;
      DBGrid1.Columns[5].Visible:= False;
      DBGrid1.Columns[6].Visible:= False;
      DBGrid1.Columns[7].Visible:= False;
      Cuser:='NOMBRE USUARIO';
      Carea:='SISTEMAS';
      Nnivel:=0;
      Ncuenta:=0;
      While Not DataModule1.ADOQuery8.Eof Do
        Begin
            If Not (DataModule1.ADOQuery8.Fields[0].Value<>Nfact) Then
              Begin
                Nprod:=DataModule1.ADOQuery8.Fields[4].Value;
                  If (DataModule1.ADOQuery8.Fields[4].Value=Nprod) Then
                    Begin
                      Ncant:=DataModule1.ADOQuery8.Fields[3].Asinteger;
                      If (DataModule1.ADOQuery8.Fields[3].Value<>Ncuenta) Then
                        Begin
                          Ncuenta:=Ncuenta+1;
                        End
                    End;
              End; // Fin de While Nfact=Nfact
                DataModule1.ADOQuery8.Next;
                Ncuenta:=0;
                Nprod:=DataModule1.ADOQuery8.Fields[4].Value;
                Form5_suite_factura.Show;
                Form5_suite_factura.Edit1.Clear;
                Form5_suite_factura.Edit1.SetFocus;
        End; // Fin de While EOf
        Form5_suite_factura.Close;
        ShowMessage('Se termino la lectura de productos para su salida.');
    end;
end;

como podras observar ya esta fuera de los If solo dentro de While Eof pero se sale inmediatamente.
Gracias
Responder Con Cita
  #10  
Antiguo 01-12-2014
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Eso si que esta raro

¿Y el codigo que esta depues de DataModule1.ADOQuery8.Next? En el codigo anterior no estaba.
Responder Con Cita
  #11  
Antiguo 02-12-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Poder: 0
Jose Carlos Rey Va por buen camino
Caminante, no; no lo tenia en el código anterior. Este lo agregue con la intención de retomar el setfocus en el Edit de la Form5 en la cual es donde debe de estar el cursor solicitando el ingreso del código EAN13 a través del lector de código. Pero aun así no funciona. Simplemente muestra la forma y en el edit solo aparece el código EAN13 que se acaba de ingresar ( parece entrar en un bucle).
Alguien que me de una idea de donde puede estar mal o una ayudadita con el código. No se me ocurre en donde puede estar la falla o muy posiblemente estoy en todo mal. Cabe mencionar que este código lo estoy haciendo en el evento de OnKeyPress del Edit1.

Gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
retomar ventana de mensajes en windows 7 - lazarus anubis Lazarus, FreePascal, Kylix, etc. 0 27-10-2014 17:14:54
Armar Edit a partir de otros Edit giulichajari Varios 5 13-03-2014 22:15:11
Problemas al retomar proyecto en delphi5.0 desalonso Varios 9 18-01-2011 18:20:27
Control de Edit Abuelo7 Conexión con bases de datos 3 05-10-2008 14:52:55
Control de Cursor en Edit soloriv Varios 2 02-06-2006 21:46:52


La franja horaria es GMT +2. Ahora son las 11:27:11.


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
Copyright 1996-2007 Club Delphi