[英]Adding a search that searches data in a DBGrid and temporarily changes what that DBGrid displays- Delphi
好的,我正在使用顯示數據庫中數據的DBGrid。
該數據庫包含一個表,該表包含11列。 第4列稱為客戶名稱,其中包含客戶名稱。
我想要一個搜索框(類似於google搜索欄),在其中輸入我想要的客戶名稱。一旦這樣做,DBGrid應該更改並僅在第四列中顯示包含該客戶名稱的行(客戶名稱列) )
例:
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上看到那兩行
一旦清除了我寫的內容的搜索字段,DBGrid應該恢復到其初始狀態並顯示所有內容,就像在搜索之前一樣。
任何想法如何做到這一點? 由於我不熟悉Delphi,並且在這里和Google上進行搜索,因此我一無所知。我沒有提出任何有用的信息/我可以使用的任何信息。
我將不勝感激,非常感謝!
如果要處理SQL SELECT返回的少量行,則可以使用TDataSet.Filter和TDataSet.Filtered 。 您可以從任何地方獲取輸入,例如普通的TEdit
。
由於您沒有發布任何詳細信息(例如您正在使用的數據庫控件,Delphi的版本,提供變量名稱的任何代碼或其他任何內容),因此,這是一個非常有用的示例。 我稱該查詢附加在DBGrid Qry
,因為不知道根據您發布的內容還要調用什么。 FilterRecordsButton
和ClearFilterButton
是SearchEdit
,而SearchEdit
是TEdit
。 隨意使用您想要切換過濾器或從用戶那里獲取輸入的任何控件。
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
的性能可能是不可接受的。 在這種情況下,最好將適當的WHERE
子句添加到SELECT
然后重新打開查詢以僅顯示相關行。 當然,在沒有WHERE
情況下,您絕不應該執行SELECT
,因此您不需要這樣做。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.