データベースにあるデータの一覧表をTabControlとStringGridでつくるには


123  2009-06-12 12:44:10  No: 34709  IP: 192.*.*.*

Delphi2007で、アドレス帳データの一覧を作りたいのですが、一覧の表示の仕方がわかりません。
タブで読み仮名ごと分けたいのですが、知恵を貸してください。

DBはSQLServerです。
テーブルの内容はコード、カナ、名前、アドレスです。

編集 削除
HOta  2009-06-12 21:51:13  No: 34710  IP: 192.*.*.*

読み仮名ごとに分けるとは、どのようなことでしょうか?
現在は、どのようにしているのでしょうか?

編集 削除
123  2009-06-15 09:13:22  No: 34711  IP: 192.*.*.*

procedure TForm1.TabControl1Change(Sender: TObject);
var
  C : Integer;
  S,SQLA,SQLB : String;
begin

SQLA := 'SELECT COUNT(コード) + 1 AS 行数 FROM TBL_アドレス帳 WHERE';
SQLB := 'SELECT コード,カナ名,名前,グループ名,住所1,住所2,電話番号,メールアドレス FROM TBL_アドレス帳 LEFT JOIN TBL_グループ ON グループ = グループコード WHERE ';

  case TabControl1.TabIndex of
  0:begin//あ行
      ADOQuery1.SQL.Text := SQLA + 'LEFT(カナ名,1) BETWEEN ''ア'' AND ''オ'' OR LEFT(カナ名,1) BETWEEN ''ァ'' AND ''ォ''';
      ADOQuery1.Open;
      if ADOQuery1.FieldByName('行数').AsInteger > 1 then begin
      StringGrid1.RowCount := ADOQuery1.FieldByName('行数').AsInteger;
      end else begin
        StringGrid1.RowCount := 2;
      end;
      ADOQuery1.SQL.Text := SQLB + 'LEFT(カナ名,1) BETWEEN''ア'' AND ''オ'' OR LEFT(カナ名,1) BETWEEN ''ァ'' AND ''ォ''';
  end;
  1:begin//か行
      ADOQuery1.SQL.Text := SQLA + 'LEFT(カナ名,1) BETWEEN''カ'' AND ''コ''';
      ADOQuery1.Open;
      if ADOQuery1.FieldByName('行数').AsInteger > 1 then begin
      StringGrid1.RowCount := ADOQuery1.FieldByName('行数').AsInteger;
      end else begin
        StringGrid1.RowCount := 2;
      end;
      ADOQuery1.SQL.Text := SQLB + 'LEFT(カナ名,1) BETWEEN''カ'' AND ''コ''';
  end;
  2:begin//さ行
      ADOQuery1.SQL.Text := SQLA + 'LEFT(カナ名,1) BETWEEN''サ'' AND ''ソ''';
      ADOQuery1.Open;
      if ADOQuery1.FieldByName('行数').AsInteger > 1 then begin
      StringGrid1.RowCount := ADOQuery1.FieldByName('行数').AsInteger;
      end else begin
        StringGrid1.RowCount := 2;
      end;
      ADOQuery1.SQL.Text := SQLB + 'LEFT(カナ名,1) BETWEEN''サ'' AND ''ソ''';
  end;
   ・
   ・
   ・
  省略
   ・
   ・
   ・
 11:begin//検索結果
     end;
  end;

  C := 1;

  ADOQuery1.Open;

  ADOQuery1.FindLast;
  S := ADOquery1.FieldByName('コード').AsString;
  ADOQuery1.FindFirst;

  StringGrid1.Cells[ 1, C ] := ADOQuery1.FieldByName('コード').AsString;
  StringGrid1.Cells[ 2, C ] := ADOQuery1.FieldByName('カナ名').AsString;
  StringGrid1.Cells[ 3, C ] := ADOQuery1.FieldByName('名前').AsString;
  StringGrid1.Cells[ 4, C ] := ADOQuery1.FieldByName('グループ名').AsString;
  StringGrid1.Cells[ 5, C ] := ADOQuery1.FieldByName('住所1').AsString;
  StringGrid1.Cells[ 6, C ] := ADOQuery1.FieldByName('住所2').AsString;
  StringGrid1.Cells[ 7, C ] := ADOQuery1.FieldByName('電話番号').AsString;
  StringGrid1.Cells[ 8, C ] := ADOQuery1.FieldByName('メールアドレス').AsString;

  repeat
  if S = ADOQuery1.FieldByName('コード').AsString then begin
    Exit;
  end;

    ADOQuery1.FindNext;
    C := C + 1;
    StringGrid1.Cells[ 1, C ] := ADOQuery1.FieldByName('コード').AsString;
    StringGrid1.Cells[ 2, C ] := ADOQuery1.FieldByName('カナ名').AsString;
    StringGrid1.Cells[ 3, C ] := ADOQuery1.FieldByName('名前').AsString;
    StringGrid1.Cells[ 4, C ] := ADOQuery1.FieldByName('グループ名').AsString;
    StringGrid1.Cells[ 5, C ] := ADOQuery1.FieldByName('住所1').AsString;
    StringGrid1.Cells[ 6, C ] := ADOQuery1.FieldByName('住所2').AsString;
    StringGrid1.Cells[ 7, C ] := ADOQuery1.FieldByName('電話番号').AsString;
    StringGrid1.Cells[ 8, C ] := ADOQuery1.FieldByName('メールアドレス').AsString;

  until S = ADOQuery1.FieldByName('コード').AsString;


こんな感じです。
これだと結果が1行しか表示されません。
検索のキーワードをEditに入力してボタンをクリックすると検索のタブを表示させたいです。

編集 削除
123  2009-06-15 09:52:51  No: 34712  IP: 192.*.*.*

上野は参考にしたコードなのですがうまくできません。

編集 削除
KHE00221  2009-06-15 11:47:59  No: 34713  IP: 192.*.*.*

後半は StringGrid1.RowCount に行数を設定してあるので

    ADOQuery1.FindFirst;
    for I:=1 to StringGrid1.RowCount -1 do
    begin
      StringGrid1.Cells[ 1, I ] := ADOQuery1.FieldByName('コード').AsString;
      StringGrid1.Cells[ 2, I ] := ADOQuery1.FieldByName('カナ名').AsString;
      StringGrid1.Cells[ 3, I ] := ADOQuery1.FieldByName('名前').AsString;
      StringGrid1.Cells[ 4, I ] := ADOQuery1.FieldByName('グループ名').AsString;
      StringGrid1.Cells[ 5, I ] := ADOQuery1.FieldByName('住所1').AsString;
      StringGrid1.Cells[ 6, I ] := ADOQuery1.FieldByName('住所2').AsString;
      StringGrid1.Cells[ 7, I ] := ADOQuery1.FieldByName('電話番号').AsString;
      StringGrid1.Cells[ 8, I ] := ADOQuery1.FieldByName('メールアドレス').AsString;
      ADOQuery1.FindNext;
    end;

でいいと思うけど

編集 削除