1

私は adodb/dbgo でプログラミングし、このコードを使用しようとしています:

procedure TfrMain.dbeNoMejaKeyPress(Sender: TObject; var Key: Char);
begin
  dmWarbam.TblTrans_temp.Filtered := False;
  dmWarbam.TblTrans_temp.Filter := 'ID_ITEM = ' + QuotedStr(dbeNoMeja.Text);
  dmWarbam.TblTrans_temp.Filtered := True;
end;

procedure TfrMain.dbeNoMejaChange(Sender: TObject);
begin
  dmWarbam.TblTrans_temp.Filtered := False;
  dmWarbam.TblTrans_temp.Filter := 'ID_ITEM = ' + QuotedStr(dbeNoMeja.Text);
  dmWarbam.TblTrans_temp.Filtered := True;
end;

しかし、上記のどれも機能しません.dbeNoMejaでキーを押すと、フィルタリングされず、代わりにデータセットが壊れた/不完全なデータをデータベースに挿入します.

誰かが動作する例を教えてもらえますか(完全なコード)

4

3 に答える 3

3

dbedit がフィルタリングしたいテーブルと同じテーブルに接続されている場合、テキストの入力を開始するとテーブルが dsEdit 状態になるため、問題が発生します。

通常の TEdit を使用し、フィルタ内の文字列にワイルドカード (*) を追加します

dmWarbam.TblTrans_temp.Filter := 'ID_ITEM = ' + QuotedStr(edtNoMeja.Text+'*');
于 2009-08-11T10:52:33.963 に答える
1

Delphi-Neftalíから改作されたコード例。シンプルでいい!

procedure TForm1.Edit1Change(Sender: TObject);
begin

  // incremental search
  ClientDataSet1.Locate('FirstName', Edit1.Text, [loCaseInsensitive, loPartialKey]);
  Exit;

  // actual data filtering
  if (Edit1.Text = '') then begin
    ClientDataSet1.Filtered := False;
    ClientDataSet1.Filter := '';
  end
  else begin
    ClientDataSet1.Filter := 'FirstName >= ' + QuotedStr(Edit1.Text);
    ClientDataSet1.Filtered := True;
  end;

end;

ClientDataSet のプロバイダーを ADO DB に設定します (あなたの場合) :

  Path := ExtractFilePath(Application.ExeName) + 'Data.MDB';
  // Exist the MDB?
  if FileExists(path) then begin
    ClientDataSet1.ProviderName := 'DSProvider';
    ADOQ.Open;
    ClientDataSet1.Active := True;
    ADOQ.Close;
    ClientDataSet1.ProviderName := '';
    lbldata.Caption := ExtractFileName(path);
    Exit;
  end;
于 2009-08-11T06:28:02.537 に答える