初歩的な質問ですいません。
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;
すいません、
ど忘れしてただけでした;;。
レコードの移動は解決しました^^;!
table1.next;
で解決しました;
もう一つの質問なのですが、
上記のコードだと、データベースのレコードの数よりも
多い数のセルが作られてしまいます。
データベースのレコード7個に対して、
空のセルが100以上作られてしまいます。
レコードの数と同じ数のセルしか作らせない方法はありますでしょうか?
セルの数は、変数の初期化で解決しました。
変数の初期化し忘れが原因でした^^;
またコードを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。
>特定の列のセルの長さ(例えばAREAフィールドの列の長さ)を変更する方法はありますでしょうか?
ColWidths プロパティはどうですか?
igyさんありがとうございます、まさにそれです!
無事一発で解決しました^^。
まさか一日で解決するとは思いませんでした^^;
大感謝です^^。
前回に引き続きありがとうございました^^。
これで一覧表ソフト作成がが大きく前進しました^^!
ツイート | ![]() |