Delphi2007でプログラムを作っています。
TabContolとStringGridを使って、タブごとに種類分けしたデータをStringGridに表示させたいのですが、データがないタブを選択すると、前に選択していたデータのあるタブのデータ1件だけが表示されます。
if文で、ADOQuery1.RecordCount = 0 のときにStringGridのCellを空にしたいのですが、どう書けばいいのか見当がつかないのですが、どなたかご指導お願いします。
ところでそのデータはどこに?
それと現在のコードを提示してください
>https://www.petitmonte.com/bbs/answers?question_id=6351
と同じではないの?
DBはSQLServerです。
procedure TForm1.TabControl1Change(Sender: TObject);
var
INT : Integer;
SQL1,SQL2 : String;
begin
SQLA := 'SELECT コード,' +
' 名称,' +
' 区分,' +
' FROM テーブル’
case TabControl1.TabIndex of
0://名称順
begin
ADOQuery1.SQL.Text := SQLA + 'ORDER BY カナ名'
end;
1:あ
begin
SQLB := 'WHERE LEFT(名称,1) BETWEEN ''ア'' AND ''オ''' +
' AND LEFT(名称,1) BETWEEN ''ァ'' AND ''ォ''';
ADOQuery1.SQL.Text := SQLA + SQLB;
end;
2://か
begin
SQLB := 'WHERE LEFT(名称,1) BETWEEN ''カ'' AND ''コ''';
ADOQuery1.SQL.Text := SQLA + SQLB;
end;
3://さ
EN ''マ'' AND ''モ''';
ADOQuery1.SQL.Text := SQLA + SQLB;
end;
{省略}
end;
INT := 0;
ADOQuery1.open;
if ADOQuery1.eof = False then begin
StringGrid1.RowCount := ADOQuery1.RecordCount + 1;
end;
while ADOQuery1.eof = False do begin
Inc(INT);
StringGrid1.Cells[ 1, INT ] := ADOQuery1.FieldByName('コード').AsString;
StringGrid1.Cells[ 2, INT ] := ADOQuery1.FieldByName('名称').AsString;
StringGrid1.Cells[ 3, INT ] := ADOQuery1.FieldByName('区分').AsString;
ADOQuery1.next;
end;
ADOQuery1.close;
end;
といった感じなのですが・・・
>>HOtaさん
書き込みする前に拝見しましたが、私ではありません。
>> 3://さ
>> EN ''マ'' AND ''モ''';
>> ADOQuery1.SQL.Text := SQLA + SQLB;
>> end;
上記のこの部分は省略で消し切れてなかった部分です。
すいません。
>TabContolとStringGridを使って、タブごとに種類分けしたデータをStringGridに表示させたいのですが、データがないタブを選択すると、前に選択していたデータのあるタブのデータ1件だけが表示されます。
ソース見た感じでは空データ選択したら前のデータ
全て表示しそうなんだけど
if ADOQuery1.eof = False then
begin
StringGrid1.RowCount := ADOQuery1.RecordCount + 1;
end
else
begin
StringGrid1.RowCount := 2;
for I:=0 to StringGrid1.ColCount -1 do
begin
StringGrid1.Cells[I,1] := '';
end;
end;
助かりました!
ありがとうございました。
解決にチェックを忘れてました。
ツイート | ![]() |