まとまりのないブログ

something which something is something

delphi

TDBGridとTStringGrid

投稿日:

IBQueryやIBDatasetで開いたテーブルをそのまま表示するなら、DBGridでやれば簡単だが、select文を実行した結果のテーブルセットにちょっと手を加えようと思ったらStringGridを使うようになる。面倒だけれども

サンプルコード

var
i,r : Integer;
sql : String;

begin
  sql := 'select count(*) as rcount from item'
  IBQuery1.SQL.SetText(Pwidechar(sql));
  IBQuery1.Open;
  r := IBQuery1.FieldByName('rcount').AsInteger;

  StringGrid1.ColCount := 3;
  StringGrid1.RowCount := r + 1;
  i := 1;

  sql := 'select id,name,item_num from item';
  IBQuery1.SQL.SetText(Pwidechar(sql));
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    StringGrid1.Cells[0,i] := IBquery1.FieldByName('inputDate').AsString;
    StringGrid1.Cells[1,i] := IBquery1.FieldByName('acId').AsString;
    StringGrid1.Cells[2,i] := IBquery1.FieldByName('catId').AsString;
    Inc(i);
    IBQuery1.Next;
  end;

end;

感想

心配なのは速度。行数が少ないなら無視できるが、千行とか何万行とかなるとどうなるのか未知数。DBGridで表示するのも内部的には同じ処理ならいいんだけれども、わからないので不安。

ところで、TStringGridとTDBGridの違いはデータソースコンポーネントかどうかという点に気づいた。TStringGridにはDataSourceやDetaSetなどを設定するプロパティは無いので、自分で好きなように加工した文字列などを表形式に表示する場合に使うのではないだろうか。TDBGridの場合はその逆で、あまり融通がきかないような印象。SQL文を工夫するか、プロシージャなどで結果セットを作成したりして、その結果を表示するだけというような気がする。(でもないか。OnGetTextイベントやOnDrawCellイベントを使ったりすると割りと自由に加工することができるかもしれない)

-delphi

執筆者:


comment

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

Delphi – TStringListの使い方

DelphiのTStringListについて。TStringListは文字列をリストとして扱うクラス。 宣言 var sl:TStringList; 初期化 sl := TStringList.Cre …

no image

Delphi DBGridのSelectedRows

DBGridのSelectedRowsで行数を取得するには、DBGridのプロパティのオプションでdbRowSelectとdbMultiSelectをTrueに設定しておかなければ行数を取得することが …

no image

Delphi 文字列の置換

StringReplace関数というものがあるのか。結構探してしまったが。usesにSystem.SysUtilsを追加で使える。日付の2012/04/01を2012-04-01に変換するのに使った。 …

Delphi – Listboxの使い方

DelphiのコンポーネントListboxの使い方について。 項目の取得 ListBox1.Items[0] 項目の追加 ListBox1.Items.Add(‘abc’); …

no image

InterBaseコンポーネントでSQLを実行する方法

IBQuery sql:= ‘select id,itemName from item’; IBQuery1.SQL.SetText(Pwidechar(sql)); IBQu …