手動でStringGridにデータベースを取り込むには

解決


Delphi大好き  2009-05-21 02:35:34  No: 34479

初歩的な質問ですいません。
StringGridの学習をしています。
環境はWinXPSP3、TurboDelphi2006(無償版)です。

DBGridを使わずに、StringGridにデータベースを読み込む練習をしています。

練習の目的は、SQLでデータをソートして、
それをStringGridに読み込み、編集し、
Tableでそれを保存、
をしようと思っています。

以下は練習のソースです(練習なので、Tableを使ってデータベースをロードしてしまってますが^^;)。
テーブルはサンプルのDBDEMOSのAnimalsで試しています。

過去ログ等を参考にして、
StringGridに書き込むまでは成功したのですが、
CELLの幅の調整や、データベースのテーブルの現在のレコードを次の行に移す方法等が解らず、以下で停滞しています。

どなたかお教えいただけると助かりますm(__)m。
以下が問題のコードです。

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  StringGrid1.ColCount := table1.FieldCount +1;
  StringGrid1.RowCount := i +1;
  
  for i := 0 to table1.RecordCount - 1 do begin
    table1.RecNo := i;
    //↑ここが問題の部分です。現在のレコードの位置を返すだけで、レコードの現在位置を変えるものでは無いみたいです。
    StringGrid1.Cells[1,i+1] := table1.FieldByName('NAME').AsString;
    StringGrid1.Cells[2,i+1] := table1.FieldByName('SIZE').AsString;
    StringGrid1.Cells[3,i+1] := table1.FieldByName('WEIGHT').AsString;
    StringGrid1.Cells[4,i+1] := table1.FieldByName('NAME').AsString;
    StringGrid1.Cells[5,i+1] := table1.FieldByName('AREA').AsString;
    StringGrid1.Cells[6,i+1] := table1.FieldByName('BMP').AsString;
    StringGrid1.RowCount := StringGrid1.RowCount + 1;

  end;
  table1.Close;
  StringGrid1.RowCount := StringGrid1.RowCount - 1;
end;


Delphi大好き  2009-05-21 02:46:51  No: 34480

すいません、
ど忘れしてただけでした;;。
レコードの移動は解決しました^^;!
table1.next;
で解決しました;

もう一つの質問なのですが、
上記のコードだと、データベースのレコードの数よりも
多い数のセルが作られてしまいます。

データベースのレコード7個に対して、
空のセルが100以上作られてしまいます。

レコードの数と同じ数のセルしか作らせない方法はありますでしょうか?


Delphi大好き  2009-05-21 05:04:27  No: 34481

セルの数は、変数の初期化で解決しました。
変数の初期化し忘れが原因でした^^;

またコードをSQLに書き換えてみました。

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  i := 1;
  StringGrid1.ColCount := Query1.FieldCount +1;
  StringGrid1.RowCount := i +1;
  Query1.SQL.Text := 'SELECT * FROM animals;';
  Query1.Open;
  for i := 0 to Query1.RecordCount - 1 do begin
    StringGrid1.Cells[1,i+1] := Query1.FieldByName('NAME').AsString;
    StringGrid1.Cells[2,i+1] := Query1.FieldByName('SIZE').AsString;
    StringGrid1.Cells[3,i+1] := Query1.FieldByName('WEIGHT').AsString;
    StringGrid1.Cells[4,i+1] := Query1.FieldByName('AREA').AsString;
    StringGrid1.Cells[5,i+1] := Query1.FieldByName('BMP').AsString;
    StringGrid1.RowCount := StringGrid1.RowCount + 1;
    Query1.Next;
  end;
  StringGrid1.RowCount := StringGrid1.RowCount - 1;
end;

特定の列のセルの長さ(例えばAREAフィールドの列の長さ)を変更する方法はありますでしょうか?
もしありましたら、
どなたかご指南いただけると助かりますm(__)m。


igy  2009-05-21 05:25:52  No: 34482

>特定の列のセルの長さ(例えばAREAフィールドの列の長さ)を変更する方法はありますでしょうか?

ColWidths プロパティはどうですか?


Delphi大好き  2009-05-21 07:40:40  No: 34483

igyさんありがとうございます、まさにそれです!
無事一発で解決しました^^。
まさか一日で解決するとは思いませんでした^^;
大感謝です^^。

前回に引き続きありがとうございました^^。
これで一覧表ソフト作成がが大きく前進しました^^!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加