gpt4 book ai didi

mysql - 添加搜索,在 DBGrid 中搜索数据并临时更改 DBGrid 显示的内容 - Delphi

转载 作者:行者123 更新时间:2023-11-29 11:15:19 28 4
gpt4 key购买 nike

好的,我正在使用 DBGrid 来显示数据库中的数据。

数据库包含一个包含 11 列的表。第 4 列称为客户名称,包含客户的姓名。

我想要一个搜索框(类似于谷歌搜索栏),我可以在其中写下我想要的客户名称一旦我这样做,DBGrid 应该更改并仅显示第 4 列(列客户名称)中包含该客户名称的行

示例:

Column names: 

column1 - column2 - column3 - customer name - column5 - column6 - column7 - column8 - column9 - column10 - column11
blabla blabla blabla John Edwards blabla blabla blabla blabla blabla blabla blabla
blabla1 blabla1 blabla1 Michael Skunk blabla blabla blabla blabla blabla blabla blabla
blabla2 blabla2 blabla2 John Edwards blabla2 blabla2 blabla2 blabla2 blabla2 blabla2 blabla2

等等......很多行,每列都有不同的信息。在某些时候,我的数据库中的其余列中将包含不同的信息,但第 4 列(客户名称列)中的客户名称相同

在我的示例中,我已经这样做了,如您所见,我有 2 个 John Edwards 条目

随后,当我在搜索字段中写入该客户名称时,我希望所有这些行都显示在 DBGrid 上,而第 4 列中不包含该名称的任何其他行都会消失

如果使用上面的示例,一旦我在搜索字段中输入 John Edwards,我应该只会在 DBGrid 上看到这 2 行

一旦我清除了搜索字段中所写内容,DBGrid 就会恢复到其初始状态并显示所有内容,就像搜索之前一样。

知道如何做到这一点吗?我不知道,因为我对 Delphi 相当陌生,并且在此处和 Google 上进行搜索都没有找到任何有用的/任何我可以使用的内容。

非常感谢您的帮助,非常感谢!

最佳答案

如果您要处理 SQL SELECT 返回的少量行,则可以使用 TDataSet.FilterTDataSet.Filtered 。您可以从任何您想要的地方获取输入,例如普通的旧 TEdit

由于您没有发布任何详细信息(例如您正在使用的数据库控件、Delphi 的版本、任何提供变量名称的代码或其他任何内容),因此这里有一个非常通用的示例,可能会有所帮助。我正在调用附加到 DBGrid Qry 的查询,因为根据您发布的内容不知道还可以调用它什么。 FilterRecordsButtonClearFilterButton 是 TButton,SearchEditTEdit。随意使用您想要切换过滤器或获取用户输入的任何控件。

procedure TForm1.FilterRecordsButtonClick(Sender: TObject);
begin
if SearchEdit.Text <> '' then
begin
{
The brackets around the column name are required because you've got
spaces in the name; they're also needed if your column name is a
reserved word. QuotedStr puts the necessary quote characters around
the value.
}
Qry.Filter := '[Customer Name] = ' + QuotedStr(SearchEdit.Text);
Qry.Filtered := True;
Qry.First;
FilterRecordsButton.Enabled := False;
ClearFilterButton.Enabled := True;
end;
end;

procedure TForm1.ClearFilterButtonClick(Sender: TObject);
begin
Qry.Filtered := False;
Qry.Filter := '';
Qry.First;
ClearFilterButton.Enabled := False;
FilterRecordsButton.Enabled := True;
end;

如果您正在处理大量行(例如,SELECT * FROM MyTable 没有返回几十万行的 WHERE),那么如果Filtered性能可能 Not Acceptable 。在这种情况下,您最好将适当的 WHERE 子句添加到 SELECT 中,然后重新打开查询以仅显示相关行。当然,您永远不应该在没有 WHERE 的情况下执行 SELECT,因此您不需要这样做。 :-)

关于mysql - 添加搜索,在 DBGrid 中搜索数据并临时更改 DBGrid 显示的内容 - Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39855033/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com