Модификация TQuery, используя обычные VCL
Структура таблицы:
|CODE|NAME|LOCATION|GENDER|
Необходимо:
- Форма
- TQuery по имени MyQuery
- TDBGrid или другое управление, TDataSource, DataModule и т.д.
- TEditBox по имени edtSelect
- TComboBox по имени cbSelect
- TBitButton по имени bbtnSelect (чтобы выполнить запрос)
- Некоторые глобальные переменные
SString --> string
RecordRetrieved --> integer
StatusBar (необязательно)
Свойства:
SQL = Select CODE, NAME, LOCATION, TYPE from MYTABLE MYTABLE where CODE like :SearchString Active = false Parameters --> SearchString --> ftString
Как было сказано выше, cbSelect укажет на искомый столбец.
В инструкции SQL столбец расположени после WHERE.
Пункты в cbSelect:
- CODE
- NAME
- LOCATION
- GENDER
События
В создании формы:
procedure TForm1.FormCreate(Sender: TObject); begin inherited; SString :='%%'; cbSelect.ItemIndex := 0; end;
Напечатайте в критериях поиска в TEditBox:
procedure TForm1.edtSelectChange(Sender: TObject); begin inherited; SString := '%' + edtSelect.Text + '%'; end;
Выполнение запроса:
procedure TForm1.bbtnSelectClick(Sender: TObject); begin inherited; with Myquery do begin close; SQL.Clear; SQL.Add('SELECT CODE, NAME, LOCATION, TYPE'); SQL.Add('FROM MYTABLE MYTABLE'); case cbSelect.ItemIndex of 0: begin SQL.Add('WHERE CODE LIKE :SearchString'); ParamByName('SearchString').AsString := SString; end; 1: begin SQL.Add('WHERE NAME LIKE :SearchString'); ParamByName('SearchString').AsString := SString; end; 2: begin SQL.Add('WHERE LOCATION LIKE :SearchString'); ParamByName('SearchString').AsString := SString; end; 3: begin SString := 'M'; edtSelect.Text:= 'M'; SQL.Add('WHERE GENDER = "M"'); end; 4: begin SString := 'F'; edtSelect.Text:= 'F'; SQL.Add('WHERE GENDER = "F"'); end; End; {case} SQL.Add('ORDER BY CODE, GENDER'); open; end; { with } RecordsRetrieved := MyQuery.RecordCount; sbStatusBar.Panels[2].text:= IntToStr(RecordsRetrieved) + ' Records'; //Обновить строку состояния end;
Комментарии