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 End end;
end;
Espero haya sido clara la explicacion.
De antemano Gracias