0

我让这段代码适用于我的应用程序的搜索框,不幸的是,当它搜索或过滤时,它会检查数据库中的每一行,然后当找到搜索的单词时,它将显示在 tlabels 上,

procedure Tspcb.dccolbtnClick(Sender: TObject);
begin
  zdctable.First;
  while not zdctable.EOF do
  begin
     if (zdctable.FieldByName('Collector').AsString = dcedit.Text)
     then begin
        cn.Caption := zdctable.FieldByName('Client_Name').AsString;
        col.Caption := zdctable.FieldByName('Collector').AsString;
        pay.Caption := zdctable.FieldByName('Daily_Payment').AsString;
        date.Caption := zdctable.FieldByName('Date').AsString;
        ddate.Caption := zdctable.FieldByName('Due_Date').AsString;
        id.Caption := zdctable.FieldByName('ID').AsString;
        la.Caption := zdctable.FieldByName('Loan').AsString;
        tc.Caption := zdctable.FieldByName('Total_Collectibles').AsString;
     end;

     ShowMessage('click ok for next profile');
     zdctable.Next;
  end;
end;

我想要做的是检查包含搜索词的行,而不是搜索数据库中的每一行。

我需要帮助分析这段代码,我只是一个正在学习如何使用 delphi 7 和编程的初学者。

谢谢你

4

1 回答 1

1

问题基本上出在线路上

if (zdctable.FieldByName('Collector').AsString = dcedit.Text)

在这里,您正在寻找相等性,因此您永远无法匹配部分字符串。我建议您更改查询(即 zdctable),使其看起来像这样

select * from zdctable
where collector like :p1

您的程序将是

zdctable.params[0].asstring:= '%' + dcedit.text + '%';
zdctable.open;

如果您的表通过数据源链接到网格,则将显示所有匹配的记录;无需提取每个字段并将其显示在不同的标签中。如果您想使用导航器一次显示一条记录,则将您的标签转换为链接到数据集的 dbtext 组件;如果这些组件设置正确,那么数据集中的每个字段都将显示在不同的 dbText 组件中。

另一种可能性是使用“定位”方法。如果我将您的语句转换为使用“定位”,那么您已经编写了相当于

zdctable.locate ('collector', dcedit.text, [])

为了找到部分匹配,您需要编写

zdctable.locate ('collector', dcedit.text, [loPartialKey])
于 2013-04-12T04:05:59.083 回答