Delphi2007で、アドレス帳データの一覧を作りたいのですが、一覧の表示の仕方がわかりません。
タブで読み仮名ごと分けたいのですが、知恵を貸してください。
DBはSQLServerです。
テーブルの内容はコード、カナ、名前、アドレスです。
読み仮名ごとに分けるとは、どのようなことでしょうか?
現在は、どのようにしているのでしょうか?
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に入力してボタンをクリックすると検索のタブを表示させたいです。
上野は参考にしたコードなのですがうまくできません。
編集 削除後半は 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;
でいいと思うけど