Delphi 7:如何在BDE数据库字段中搜索特定关键字

Delphi 7:如何在BDE数据库字段中搜索特定关键字,delphi,delphi-7,bde,Delphi,Delphi 7,Bde,我是Delphi的新手,创建了一个简单的BDE数据库,包含以下字段:条目号、系统、错误、解决方案。我希望能够在“错误”字段中搜索任何关键字,并且包含该关键字的所有条目都应显示在另一个窗口中 任何有关编码的帮助都将不胜感激。您应该将TDataSet的Filter属性设置为类似于Error='*keyword*'。假设关键字是在名为Edit1的TEdit控件中键入的,则可以使用Edit1Change事件触发如下筛选: procedure TForm1.Edit1Change(Sender: TObj

我是Delphi的新手,创建了一个简单的BDE数据库,包含以下字段:条目号、系统、错误、解决方案。我希望能够在“错误”字段中搜索任何关键字,并且包含该关键字的所有条目都应显示在另一个窗口中


任何有关编码的帮助都将不胜感激。

您应该将TDataSet的Filter属性设置为类似于
Error='*keyword*'
。假设关键字是在名为Edit1的TEdit控件中键入的,则可以使用Edit1Change事件触发如下筛选:

procedure TForm1.Edit1Change(Sender: TObject);
  Table1.Filter := 'Error = ''' + Edit1.Text + '*''';
  Table1.Filtered := Edit1.Text <> '';
end;
程序TForm1.Edit1Change(发送方:TObject);
表1.过滤器:='Error='''+Edit1.Text+'*'';
表1.筛选:=Edit1.文本“”;
结束;
结果可以在数据感知网格(如DBGrid)中显示。对于Table1和网格之间的连接,您需要一个TDataSource组件:网格链接到源,源在其DataSet属性中保存Table1

将示例扩展到多个关键字的一种简单方法是使用逗号分隔:

procedure TForm1.Edit1Change(Sender: TObject);
var
  stlSep                                : TStringList;
  sFilter                               : string;
  i                                     : Integer;
begin
  stlSep := TStringList.Create;
  stlSep.CommaText := Edit1.Text;
  for i := 0 to stlSep.Count - 1 do
    sFilter := sFilter + ' or Error=''' + stlSep[i] + '*''';
  stlSep.Free;

  Table1.Filter := Copy(sFilter, 4, MaxInt);
  Table1.Filtered := Edit1.Text <> '';
  Table1.Open;
end;
程序TForm1.Edit1Change(发送方:TObject);
变量
stlSep:TStringList;
sFilter:string;
i:整数;
开始
stlSep:=TStringList.Create;
stlSep.CommaText:=Edit1.Text;
对于i:=0到stlSep.Count-1 do
sFilter:=sFilter+'或Error='''+stlSep[i]+'*'';
免费;
表1.Filter:=复制(sFilter,4,MaxInt);
表1.筛选:=Edit1.文本“”;
表1.开放式;
结束;

根据您的需要,您可能需要将
替换为

可能的重复项听起来更像是“过滤器”而不是“搜索”。您是否考虑过使用TDataSet的“Filter”和“Filtered”属性?或者您必须在TQuery中使用适当的SQL。无论如何,你必须提供更多的信息。你使用什么样的数据库?“关键字”是“错误”-fiels的一部分还是整个字段值是关键字?像BDE数据库这样的东西是不存在的,也许你正在通过BDE创建一个悖论数据库。我必须警告您,自Delphi6或Delphi7(大约15年前)以来,BDE就被弃用了,因此如果您正在学习Delphi,请从受支持的当前数据访问层开始,如dbExpress。