まとまりのないブログ

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

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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

関連記事

no image

delphiで組み込みデータベースを使うときの候補

調べた範囲では3つ sqlite firebird Microsoft Access それぞれのコネクションに使うコンポーネント sqlite delphi用のフリーのsqlite wrapper h …

no image

Delphi 文字列の置換

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

no image

IBQueryとIBTransaction

————————— デバッガ例外通知 ———&#8212 …

Delphi – Listboxの使い方

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

no image

Delphi DBGridのSelectedRows

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