Fórum Atualizar dados do DBGrid #587061
23/10/2017
0
Estou desenvolvendo um sistema, quando eu clicar para abrir ele, preciso que ele carregue o dbgrid com as informações referente ao dia.
Exemplo, se eu abir esse sistema hoje , que na dbgrid apareça as informações somente de hoje;
Bem , eu coloquei no evento onshow do form este comando abaixo : mas infelizmente dá erro.
begin
qry.Close;
qry.SQL.Clear;
qry.SQL.Add('SELECT ID,ROTA,HORAINI,HORAFIM from planejado');
qry.ParamByName('DATA').AsString := FormatDateTime('dd/mm/yyyy', Now);
qry.Open;
end;
Desde já muito obrigado.
Watson Rocha
Curtir tópico
+ 0Posts
23/10/2017
Roberto Wutke
'SELECT ID,ROTA,HORAINI,HORAFIM from planejado where DATA = ' + quotedStr(datetime(now));
para vc usar o params, vc vai ter que ter o where e ainda tem que criar o parametro na sua query e clientDataSet (caso use). Então acho que vc só passar o Where direto sem parametro seria melhor, visto que vc pega a data do computador e não a data que alguem vai te fornecer no tempo de execução.
o que pode ser feito tbm é, vc colocar o sql completo dentro da query com o parametro e dar um .close e ai sim passar o parametro nele e fazer o open depois, sem precisar ficar colocando sql no seu código.
espero ter sido claro e poder te ajudar.
Bons códigos.
Gostei + 0
23/10/2017
Watson Rocha
Alterei o meu qry.ParamByName('DATA').AsString := FormatDateTime('dd/mm/yyyy', Now);
por : qry.FieldByName('DATA').AsString := FormatDateTime('dd/mm/yyyy', Now);
Mas agora está dando este erro :
qry: Cannon perform this operation on a close dataset
Gostei + 0
23/10/2017
Francisco Ribeiro
Gostei + 0
23/10/2017
Watson Rocha
Por favor segue o meu codigo.
unit frmandon;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.ExtCtrls, Vcl.Grids,
Vcl.DBGrids, Vcl.StdCtrls, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MySQL,
FireDAC.Phys.MySQLDef, FireDAC.VCLUI.Wait, FireDAC.Stan.Param, FireDAC.DatS,
FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client;
type
TForm5 = class(TForm)
DBGrid1: TDBGrid;
DBGrid3: TDBGrid;
Panel2: TPanel;
Panel3: TPanel;
FDConnection1: TFDConnection;
qry: TFDQuery;
DataSource1: TDataSource;
DataSource2: TDataSource;
FDQuery2: TFDQuery;
Timer1: TTimer;
qryID: TFDAutoIncField;
qryDATA: TDateField;
qryROTA: TStringField;
qryHORAINI: TStringField;
qryHORAFIM: TStringField;
qryDOCA: TStringField;
procedure Timer1Timer(Sender: TObject);
procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
procedure TForm5.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
{ with DBGrid3 do
begin
if DataSource.DataSet.FieldByName('HORAFIM').AsFloat > 1 then
begin
DBGrid3.Canvas.Font.Color := clwhite;
Canvas.Brush.Color := clRed;
end
else
begin
DBGrid3.Canvas.Font.Style := [fsBold];
DBGrid3.Canvas.Font.Color := clLime;
end
end;
DBGrid3.Canvas.FillRect(Rect);
DBGrid3.DefaultDrawColumnCell(Rect, DataCol, Column, State); }
end;
procedure TForm5.FormShow(Sender: TObject);
begin
qry.Close;
qry.SQL.Clear;
qry.SQL.Add('SELECT ID,ROTA,HORAINI,HORAFIM from planejado where DATA = ' + 'quotedStr(date(now))');
qry.FieldByName('DATA').AsString := FormatDateTime('dd/mm/yyyy', Now);
qry.Open;
end;
procedure TForm5.Timer1Timer(Sender: TObject);
begin
qry.Refresh;
FDQuery2.Refresh;
end;
end.
Muito Obrigado pela ajuda amigo.
Gostei + 0
23/10/2017
Roberto Wutke
a melhor forma pra funcionar vai ser igual te falei.... ou vc vai na query e coloca os parametros que vc vai usar e adiciona o codigo dentro da query ou vc pega e faz uma linha só de comando, como mencionei no primeiro comentário. Dessa forma vai funcionar sem problemas, depois vc pode pesquisar nos posts da DEvMedia sobre parametros em Querys para entender melhor o que vc quer fazer, pois dessa forma nao vai funcionar.... Adiciona o comando completo sem ficar querendo passar paramento como assim:
qry.Close;
qry.SQL.Clear;
qry.SQL.Add(''SELECT ID,ROTA,HORAINI,HORAFIM from planejado where DATA = '' + quotedStr(date(now)));
qry.Open;
esquece o fieldbyname, e o quotedStr não precisa colocar ele como string, pois é uma função do delphi que ja vai concatenar ao seu código uma string, beleza???
espero ajudar....
bons Códigos
Gostei + 0
23/10/2017
Rafael Bosco
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('SELECT ID, ROTA, HORAINI, HORAFIM FROM PLANEJADO WHERE DATA = :DATA');
Qry.ParamByName('DATA').AsDateTime := Now;
Qry.Open;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)