[delphi-users:4763] FireDAC + DBGrid に SQL(Select文) を反映させるには?

278 views
Skip to first unread message

OE

unread,
Oct 18, 2017, 2:11:47 AM10/18/17
to delphi...@freeml.com
[環境] Delphi10、VCLフォームアプリ

こんにちは、OE です。

FireDAC + DBGrid にて、
SQL(Select文)の結果を DBGrid に反映させるには、
どうすれば良いのでしょうか?

フォームに [ DBGrid, FDConnection, FDTable, FDPhysFBDriverLink,
DataSource] をぽとりペタし、下記のコードを実行することで,
DBGrid にテーブル内容が表示されました。
しかしこれでは同テーブルの内容全てが表示されてしまうので、
表示内容を絞るためにSQL文(Select)で指定したいです。

なお下記のようにすると
FDConnection1.ExecSQL('select * from ITEM_LIST where code<10;');
「SELECT のようなコマンドには Open メソッドを使用して」とヒントが
出ててくれますが、Openをどう使えば良いのか答えが見つかりません。

よろしくお願いいたします。

----------------------------------------
DBGrid1.DataSource := DataSource1;
with FDConnection1.Params do begin
Clear;
Values['DriverID'] := 'FB';
Values['Database'] := '/Program
Files/Firebird/Firebird_1_5/data/TEST.FDB';
Values['Server'] := 'Server1';
Values['User_Name'] := 'user1';
Values['Password'] := 'user1';
Values['CharacterSet']:= 'SJIS_0208';
end;
FDPhysFBDriverLink1.VendorLib :='fbclient.dll';
FDTable1.Connection:= FDConnection1;
FDTable1.TableName:='ITEM_LIST';
DataSource1.DataSet:=FDTable1;

FDConnection1.Connected := True;
FDTable1.Active := True;
----------------------------------------


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
Powered by freeml -- http://www.freeml.com/ --
------------------------------------------------------[freeml byGMO]--

あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
http://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------

じゃぺ

unread,
Oct 18, 2017, 2:50:11 AM10/18/17
to delphi...@freeml.com
こんにちは
川上です

私はTFDQueryを使っています。

例えば
  FDQuery1.SQL.Clear;
  FDQuery1.SQL.Add('select * from ITEM_LIST where code<10;');
  FDQuery1.Open;
  while not FDQuery1.Eof do begin
    memo1.lines.Add(FDQuery1.Fields[1].AsString);
    FDQuery1.Next;
  End;
  FDQuery1.Close;

という感じです。

TFDConnectionにはSQL.Addのようなメソッドがないっぽいのですが、
FDConnection1.Open('select * from ITEM_LIST where code<10;');
ではダメでしょうか?
(今手元で検証できず、すみません。)

OE

unread,
Oct 18, 2017, 3:13:35 AM10/18/17
to delphi...@freeml.com
川上さん

> 私はTFDQueryを使っています。

ありがとうございます、これで解決しました。

TFDQuery は、memo1.lines.Add(FDQuery1.Fields[1].AsString);
のように1個1個処理するしかないから、Gridに入れるにも
コーディングが必要だな…と思っていました。
しかし、下記のように、DataSource1.DataSet の接続先を
TFDQuery に変更することができました。

ありがとうございました。


----------------------------------------
DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := FDQuery1;
FDQuery1.Connection := FDConnection1;
FDPhysFBDriverLink1.VendorLib :='fbclient.dll';

with FDConnection1.Params do begin
Clear;
Values['DriverID'] := 'FB';
Values['Database'] := '/Program
Files/Firebird/Firebird_1_5/data/TEST.FDB';
Values['Server'] := 'Server1';
Values['User_Name'] := 'user1';
Values['Password'] := 'user1';
Values['CharacterSet']:= 'SJIS_0208';
end;
FDTable1.TableName:='ITEM_LIST';
DataSource1.DataSet:=FDTable1;

FDQuery1.SQL.Clear;
FDQuery1.SQL.Add('select * from ITEM_LIST where code<10;');
FDQuery1.Open;
FDQuery1.Close;
----------------------------------------
Reply all
Reply to author
Forward
0 new messages