Fórum Atualizar dados do DBGrid #587061

23/10/2017

0

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

Responder

Posts

23/10/2017

Roberto Wutke

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.
Responder

Gostei + 0

23/10/2017

Watson Rocha

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
Responder

Gostei + 0

23/10/2017

Francisco Ribeiro

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..
Responder

Gostei + 0

23/10/2017

Watson Rocha

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.
Responder

Gostei + 0

23/10/2017

Roberto Wutke

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
Responder

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;

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar