Ver Mensaje Individual
  #1  
Antiguo 28-11-2014
Jose Carlos Rey Jose Carlos Rey is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 26
Reputación: 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