Дополним DBTreeView поиском при наборе текста,
Для этого на главной форме добавим edit и dbgrid,
а сам поиск организуем в отдельном датамодуле
Код модуля поиска
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
unit uSearch; interface uses System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client,uDBConnection,vcl.dialogs; type TDMSearch = class(TDataModule) qSearch: TFDQuery; DataSource: TDataSource; procedure DataModuleCreate(Sender: TObject); procedure DataModuleDestroy(Sender: TObject); private { Private declarations } public procedure Search(name:string); { Public declarations } end; var DMSearch: TDMSearch; DBConnection:TDBConnection; implementation {%CLASSGROUP 'Vcl.Controls.TControl'} {$R *.dfm} procedure TDMSearch.DataModuleCreate(Sender: TObject); begin DBConnection:=TDBConnection.create(nil); qSearch.Connection:=DBConnection.FDConnection; end; procedure TDMSearch.DataModuleDestroy(Sender: TObject); begin DBConnection.Free; end; procedure TDMSearch.Search(name:string); begin qSearch.SQL.Text:='SELECT name FROM treeview_db.tree where Name like '+'''%'+name+'%'''; if qSearch.OpenOrExecute then qSearch.Close; qSearch.Open(); end; end. |
Собственно главная конструкция построена на предикате like плюс символы %, которые означают, что справа и слева может быть всё, что угодно. На чистом MySQL это могло бы быть так
1 |
SELECT * FROM treeview_db.tree where name like '%somename%'; |
На главной форме можно вызвать поиск вот так…
В глобальных переменных
1 |
DMSearchMain:TDMsearch; |
В OnCreate
1 2 3 |
DMSearchMain:=TDMsearch.Create(nil); DBGrid1.DataSource:=DMSearchMain.DataSource; |
В обработчиках EditChange
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
procedure TMainForm.Edit1Change(Sender: TObject); begin if Edit1.Text='' then exit; if Assigned(DMSearchMain) then DMSearchMain.Search(edit1.Text); end; procedure TMainForm.Edit1Click(Sender: TObject); begin if Edit1.Text='Поиск...' then Edit1.Text:=''; end; |