リアルタイム検索をするには?

解決


ひろみ  2006-04-12 16:57:17  No: 21002  IP: 192.*.*.*

質問があります。

KOKYAK.DB(code,kana,address)

TDataSource.DataSet=Table1
TDataSource.Name=DtsKokyak
TTable.Name=Kokyak
TDBGrid.DataSource=DtsKokyak

KOKYAK.DBの内容を全件TDBGridに表示しています。
画面上にTEditを配置して、そこに入力された文字列を含む
レコードのみをリアルタイムにTDBGridに表示することは出来るのでしょうか?
Edit1:CODE検索用
Edit2:kana検索用

TQueryを使用すると検索ボタンを押す動作がはいるので...
何かよい方法がありましたらよろしくお願いいたします。

編集 削除
igy  2006-04-12 17:05:41  No: 21003  IP: 192.*.*.*

>TQueryを使用すると検索ボタンを押す動作がはいるので...

TEditのOnChangeイベントを使えば
検索ボタンを押す動作が不要では?

編集 削除
ひろみ  2006-04-12 17:17:38  No: 21004  IP: 192.*.*.*

igyさんありがとうございます。

TQueryを使用してもリアルタイムの検索が出来るのでしょうか?
TEditのOnChangeでどのようにするとよろしいのでしょうか?

編集 削除
igy  2006-04-12 17:34:14  No: 21005  IP: 192.*.*.*

実際には、動かして試したわけではないのですが、
イメージ的には、以下のような感じです。

procedure TForm1.edtHogeChange(Sender: TObject);
begin
    DispUpdate;    // SQLによる表示データ格納
end;

procedure TForm1.DispUpdate;
var
    str_hoge: String;
begin
    // 部分絞込み文字列
    str_hoge := Trim(edtHoge.Text);

    with Query1 do
    begin
        Active := False;
        SQL.Clear;
        SQL.Add('Select * from SomeTable');
        if str_hoge <> '' then
            SQL.Add(' WHERE (KanaName LIKE ''%' + str_hoge + '%'')');
        Active := True;
    end;
end;

編集 削除
ん?  2006-04-12 18:24:11  No: 21006  IP: 192.*.*.*

「検索ボタン」があるんだから

procedure TForm1.Edi1Change(Sender: TObject);
begin
  検索ボタンClick(nil);
end;

編集 削除
ひろみ  2006-04-12 23:59:54  No: 21007  IP: 192.*.*.*

TQueryを使用してもリアルタイムの検索が出来るのであれば
検索ボタンは、必要ないです。
明日、テストしてみます。

編集 削除
は?  2006-04-13 08:27:33  No: 21008  IP: 192.*.*.*

検索ボタン.Visible := False;
何か問題でも?

編集 削除
igy  2006-04-13 09:06:43  No: 21009  IP: 192.*.*.*

ちなみに、
OnChangeイベントの場合、頻繁に検索を実行してしまうので、
OnKeyDownイベントで、Enterキーの時だけ検索を実行する手もあります。

procedure TForm1.edtHogeKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
    if Key = VK_RETURN then    // Enterキーなら
        DispUpdate;    // SQLによる表示データ格納
end;

編集 削除
ひろみ  2006-04-13 17:13:39  No: 21010  IP: 192.*.*.*

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

解決しました。

編集 削除
ひろみ  2006-04-13 17:15:01  No: 21011  IP: 192.*.*.*

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

解決しました。

編集 削除