Fórum Comparar banco de dados do inicio ao fim delphi #511492
22/02/2015
0
Seguinte oque eu preciso é o seguinte:
Eu tenho um grid de boletos com varios campos e um que que tem o campos que fica a vencer.
Tendo isso eu preciso clicar em um botão este botão deve ir do primeiro ao ultimo registro dakele bando de dados, fazer a comparação um por um ... " se o campo VENCIMENTO estiver como " A vencer " e o campo DATA VENCIMENTO for menor que a data atual entao no campo vencimento escreva " VENCIDO ".
E eu uso DataSource e ibquery.
Nelson Filho
Curtir tópico
+ 0Post mais votado
23/02/2015
Se for, aconselho usar um STORED PROCEDURE que percorra a tabela com um CURSOR e faça a verificação e alteração em cada linha.
Se você desejar fazer isso apenas nos registros que estão no DataSet, você pode fazer um loop simples sobre ele e fazer a verificação e alteração, algo no seguinte formato:
ds.First();
while not ds.Eof do
begin
if (ds.FieldByName('VENCIMENTO').Value = 'A vencer') and (ds.FieldByName('DATA_VENCIMENTO').Value < Date) then
begin
ds.Edit();
ds.FieldByName('VENCIMENTO').Value := 'VENCIDO';
ds.Post();
end;
ds.Next();
end;
Escrevi o código diretamente aqui, então cuidado se for copiar pois pode conter algum erro.
Joel Rodrigues
Gostei + 1
Mais Posts
23/02/2015
Nelson Filho
Como que ponho o loop ai?
eu uso ibquery / inupdate / datasource
procedure TForm1.Button27Click(Sender: TObject); VAR DATA_ATUAL : TDateTime; VENCIMENTO : STRING; STATUS : STRING; begin DATA_ATUAL := Date(); VENCIMENTO := dbgrid5.Fields[6].asstring; STATUS := dbgrid5.Fields[9].asstring; IF (DateTimeToStr(DATA_ATUAL) > VENCIMENTO) and (STATUS = 'A VENCER')THEN BEGIN end; IF (DateTimeToStr(DATA_ATUAL) = VENCIMENTO) and (STATUS = 'A VENCER')THEN BEGIN M.IBQuery13.Open; M.IBQuery13.Edit; FORM1.dbgrid5.Fields[9].asstring := 'A AVISAR' ; M.IBQuery13.Post; m.IBTransaction13.commit; M.IBQuery13.open; end; IF ( VENCIMENTO < DateTimeToStr(DATA_ATUAL)) and (STATUS = 'A VENCER')THEN BEGIN M.IBQuery13.Open; M.IBQuery13.Edit; FORM1.dbgrid5.Fields[9].asstring := 'VENCIDO' ; M.IBQuery13.Post; m.IBTransaction13.commit; M.IBQuery13.open; END; end;
Gostei + 0
23/02/2015
Joel Rodrigues
Tente novamente e veja se consegue.
Gostei + 0
25/02/2015
Nelson Filho
Mas na hora que eu aciono ele trava tudo.....
procedure TForm1.Button27Click(Sender: TObject); VAR DATA_ATUAL : TDateTime; VENCIMENTO : STRING; STATUS : STRING; begin DATA_ATUAL := Date(); VENCIMENTO := m.IBQuery13.fields[5].asstring; STATUS := m.IBQuery13.fields[7].asstring; m.IBQuery13.First(); while not m.IBQuery13.Eof do begin IF (DateTimeToStr(DATA_ATUAL) > VENCIMENTO) and (STATUS = 'A VENCER')THEN BEGIN end; IF (DateTimeToStr(DATA_ATUAL) = VENCIMENTO) and (STATUS = 'A VENCER')THEN BEGIN M.IBQuery13.Open; M.IBQuery13.Edit; m.IBQuery13.fields[7].asstring := 'A AVISAR' ; M.IBQuery13.Post; m.IBTransaction13.commit; M.IBQuery13.open; end; IF ( VENCIMENTO < DateTimeToStr(DATA_ATUAL)) and (STATUS = 'A VENCER')THEN BEGIN M.IBQuery13.Open; M.IBQuery13.Edit; m.IBQuery13.fields[7].asstring := 'VENCIDO' ; M.IBQuery13.Post; m.IBTransaction13.commit; M.IBQuery13.open; END; end; end;
Gostei + 0
25/02/2015
Joel Rodrigues
Reveja o código em que dei o exemplo, repare que dentro do While tem o ds.Next();.
Gostei + 0
03/03/2015
Nelson Filho
procedure TForm1.Button27Click(Sender: TObject); VAR DATA_ATUAL : TDateTime; VENCIMENTO : TDateTime;//STRING; STATUS : STRING; begin DATA_ATUAL := Date(); VENCIMENTO := m.IBQuery13.fields[5].AsDateTime; STATUS := m.IBQuery13.fields[7].AsString; m.IBQuery13.First(); while not m.IBQuery13.Eof do begin IF (DATA_ATUAL > VENCIMENTO) and (STATUS = 'A VENCER') THEN BEGIN end; IF (DATA_ATUAL = VENCIMENTO) and (STATUS = 'A VENCER')THEN BEGIN M.IBQuery13.Open; M.IBQuery13.Edit; m.IBQuery13.fields[7].asstring := 'A AVISAR' ; M.IBQuery13.Post; m.IBTransaction13.commit; M.IBQuery13.open; end; IF (VENCIMENTO < DATA_ATUAL) and (STATUS = 'A VENCER')THEN BEGIN M.IBQuery13.Open; M.IBQuery13.Edit; m.IBQuery13.fields[7].asstring := 'VENCIDO' ; M.IBQuery13.Post; m.IBTransaction13.commit; M.IBQuery13.open; END; end; m.IBQuery13.next(); end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)