まとまりのないブログ

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 …

Delphi – 配列の宣言と使い方

Delphiで配列を使うにはvar節で配列要素数を設定する静的宣言と実行時に配列要素数を決定する動的宣言をする。要素数を動的に扱う配列が一般的だと思うのでそれについて記述する。 宣言 var ar: …

Delphi – 実行中のディレクトリを取得

アプリケーションが実行中のディレクトリを取得。exeファイルのある場所。 val := ExtractFilePath(Application.ExeName);

no image

DelphiのDBgridのmultiselect

DBGrigのmultiselectプロパティをtrueに設定してみてもマウスドラッグでマルチセレクトされないから何か他の設定方法があるのかとおもいきや、操作方法が難しいだけだった。 – …

no image

Delphi 文字列の置換

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