Карта сайтаСсылкиКонтакты

Модификация TQuery, используя обычные VCL компоненты

PDF Печать
Статьи

Представьте, что Вы имеете большую таблицу и Вы должны дать возможность поиска конечному пользователю, а трафик сети - проблема.

В этом случае мы можем использовать TComboBox, чтобы определить в каком столбце искать и TEdit, чтобы определить критерии поиска.

Структура таблицы:

|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;

 

Добавить комментарий


Защитный код
Обновить