Atualizar dados do DBGrid

Delphi

23/10/2017

Amigos, Bom dia.

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

Watson Rocha

Curtidas 0

Respostas

Roberto Wutke

Roberto Wutke

23/10/2017

Fala jovem, até o momento está correto o processo de querer abrir o código, mas se nao me engano, o params vc só vai usar quando tiver a cláusula WHERE, pois assim ele vai funcionar corretamente, então seu sql teria que ser...

'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
Watson Rocha

Watson Rocha

23/10/2017

Roberto, obrigado pelo retorno.
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
Francisco Ribeiro

Francisco Ribeiro

23/10/2017

Olá, boa tarde Watson Rocha... amigo gostaria que vc colocasse todo o seu codigo da query apos a modificação sugerida pelo amigo roberto wutke....mas de inicio, essa mensagem pode ser por que vc esqueceu de dar o open na query..
GOSTEI 0
Watson Rocha

Watson Rocha

23/10/2017

Olá Francisco, sim claro !

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
Roberto Wutke

Roberto Wutke

23/10/2017

manu, não existe qry.FieldByName(''DATA'').AsString quando se fala de passar parâmetros... esse tipo de comando vc vai usar quando você quiser que aquele campo em questao receba um outro valor, como exemplo: você pode ter aberto uma query e nela tem um registro data... ai voce pode usar esse comando, assim: qry.Edit; qry.FieldByName(''DATA'').AsString := XXXX entende?

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
Rafael Bosco

Rafael Bosco

23/10/2017

  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
POSTAR