Hola, de seguro me está faltando algo que escapa a mis conocimientos. Quiero mostrar un contador, un mensaje o una barra de progreso mientras actualizo una tabla, el problema es que me actualiza la tabla y luego aparece el mensaje o lo que fuese que llame, es decir, no sirve. Primero probé con un formulario, como no dio resultado pensé en poner un label no visible en el form y hacerlo visible cuando se actualiza y de paso mostrar la cantidad de registros a procesar de modo que quede: Calculando Saldos, por favor espere: Registro: 1 de 200.
El label9 tiene el texto 'Calculando Saldos, por favor espere: Registro:'
procedure TfrmReg.btnCalcSaldosClick(Sender: TObject); var banco:Integer; sqltxt:String; saldo:Currency; actual, ultimo:Integer; begin Label9.Visible:=true; Label10.Visible:=true; saldo:=0; sqltxt:='SELECT * FROM reg WHERE banco='+IntToStr(cmbBanco.KeyValue)+ ' ORDER BY banco, fecha, id;'; actual:=0; DataM.ZQSaldos.Close; DataM.ZQSaldos.SQL.Text:=sqltxt; DataM.ZQSaldos.Open; DataM.ZQSaldos.First; ultimo:=DataM.ZQSaldos.RecordCount; WHILE NOT DataM.ZQSaldos.EOF DO begin actual:=actual+1; Label10.Caption:=IntToStr(actual)+'de '+IntToStr(ultimo); saldo:=saldo+DataM.ZQSaldos.FieldByName('debitos').AsCurrency-DataM.ZQSaldos.FieldByName('creditos').AsCurrency; DataM.ZQSaldos.Edit; DataM.ZQSaldos.FieldByName('saldo').AsCurrency:=saldo; DataM.ZQSaldos.Post; DataM.ZQSaldos.Next; end; ShowMessage('Finalizado'); Label9.Visible:=false; Label10.Visible:=false; DataM.ZQGridReg.Close; DataM.ZQGridReg.Open; DBGrid1.Refresh; end;
Con este código cuando se hace click en el botón Actualizar saldos el botón queda presionado, actualiza y luego hace visible los labels y un showmessage que puse ahí para probar.
Lo que pretendo es primero muestre el label9 y luego entre al while, pero no entiendo por qué no lo hace. Tema aparte es el tiempo que tarda, unos 4 segundos con apenas 50 registros, pero ese es otro tema.
Saludos.