StringGridのデータ取得に関して

解決


中野  2009-06-18 19:12:36  No: 34840

Delphi2007でプログラムを作っています。
TabContolとStringGridを使って、タブごとに種類分けしたデータをStringGridに表示させたいのですが、データがないタブを選択すると、前に選択していたデータのあるタブのデータ1件だけが表示されます。
if文で、ADOQuery1.RecordCount = 0  のときにStringGridのCellを空にしたいのですが、どう書けばいいのか見当がつかないのですが、どなたかご指導お願いします。


ん?  2009-06-18 19:39:00  No: 34841

ところでそのデータはどこに?
それと現在のコードを提示してください


HOta  2009-06-18 23:10:16  No: 34842

>https://www.petitmonte.com/bbs/answers?question_id=6351
と同じではないの?


中野  2009-06-18 23:12:32  No: 34843

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;

といった感じなのですが・・・


中野  2009-06-18 23:16:34  No: 34844

>>HOtaさん
書き込みする前に拝見しましたが、私ではありません。

>>    3://さ
>>    EN ''マ'' AND ''モ''';
>>      ADOQuery1.SQL.Text := SQLA + SQLB;
>>    end;
上記のこの部分は省略で消し切れてなかった部分です。
すいません。


KHE00221  2009-06-18 23:34:11  No: 34845

>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;


中野  2009-06-19 00:12:52  No: 34846

助かりました!
ありがとうございました。


中野  2009-06-19 00:14:07  No: 34847

解決にチェックを忘れてました。


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

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






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