Database 如果不检查数据库的每一行,如何使搜索框从一个关键字跳转到另一个关键字?

Database 如果不检查数据库的每一行,如何使搜索框从一个关键字跳转到另一个关键字?,database,delphi,firebird,zeos,Database,Delphi,Firebird,Zeos,我在我的应用程序的搜索框中找到了这段代码,不幸的是,当它搜索或筛选时,它会检查数据库中的每一行,然后当找到搜索的单词时,它会显示在标签上 procedure Tspcb.dccolbtnClick(Sender: TObject); begin zdctable.First; while not zdctable.EOF do begin if (zdctable.FieldByName('Collector').AsString = dcedit.Text) t

我在我的应用程序的搜索框中找到了这段代码,不幸的是,当它搜索或筛选时,它会检查数据库中的每一行,然后当找到搜索的单词时,它会显示在标签上

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;
我想做的是让它检查包含搜索词的行,而不是搜索数据库中的每一行

我需要帮助分析这段代码,我只是一个初学者谁是学习如何使用Delphi7和编程


谢谢

问题主要在于线路

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组件中

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

zdctable.locate ('collector', dcedit.text, [])
为了定位部分匹配,您需要编写

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

你不是在问一个特定的问题,而是要求某人做你应该做的事情,也就是分析这段代码是如何工作的,并将其更改为你想要的工作方式。这类问题对于StackOverflow的广大受众来说过于本地化。首先,请取出
zdctable.First
。每次单击按钮时,您都会返回到数据集的开头,这自然会阻止您看到除第一个匹配之外的任何其他行。单击按钮->转到第一行->查找第一个匹配->单击按钮->转到第一行->查找第一个匹配->单击按钮。。。然后查看有关
TDataSet.FindFirst
TDataSet.FindNext
的帮助,以完全删除循环。如果我的问题似乎是本地化的,我要求被调羹,请道歉。我只是一个初学者,不熟悉寻求帮助时使用的术语,但我不想被哄骗,仅仅是指导就足够了,因为这个代码是我在朋友的帮助下能做的最好的代码。谢谢@KenWhite谢谢你好心的先生我会调查此事的。抱歉,如果我的问题总是像是我在这里问汤匙喂你在使用Delphi 7。它附带了一个名为
MastApp
的演示应用程序(不幸的是,它仍然基于BDE,但可以工作)。您应该在Demos文件夹中找到它(不记得它在D7上的位置,但您应该在开始菜单中找到它)。看看它是做什么的,它是如何做的,应该会给你一些好的起点。此外,您还可以通过谷歌搜索Delphi教程。:-)我已经阅读了about.com上的delphi教程,那里有人帮助我构建了这段代码(感谢他的指导),但问题是我不知道在哪里编辑代码,使其搜索tedit中与文本最接近的下一个条目。遗憾的是,我甚至在“开始”菜单中也找不到教程。但是无论如何,非常感谢,先生,我会阅读你给我的很多提示。
'%'+dcedit.text+'%'
这就像微软Access的SQL语法一样。在SQL中,它应该类似于
'%'| | | |'%'
我同意这两个专栏,我早上写答案有点太早了。我已经修改了我的答案。@No'amNewman谢谢你的帖子,我会查出来。@No'amNewman-我已经撤销了我的否决票