Рассмотрим первую часть руководства
1. Для реализации поиска по наборам данных будем использовать отдельную форму. Поэтому создаем отдельную форму, выбрав в меню File -> New -> Form или нажав кнопку на панели инструментов

2. Для вызова (отображения) формы поиска и ряда других возможностей используем падающее меню на главной форме, т.е. компонент MainMenu (класс TMainMenu). Размещаем его на форме, в контекстном меню выбираем команду «Menu Designer» и в редакторе создаем расположение пунктов и подпунктов главного меню на свое усмотрение

3. Создаем для пункта меню N3 «Поиск» процедуру-обработчик события OnClick, в которую записываем программный код по отображению созданной формы Form4, предварительно подключив модуль Unit4 к модулю Unit1

4. Размещаем на новой форме необходимые компоненты

Чем больше возможностей поиска будет реализовано (поиск по полям из разных таблиц; по полям, принадлежащим разным типам данных; поиск по подстроке или всей строке; поиск в наборе данных и т.д.), тем более весомой будет смотреться реализация КП!
5. На модуле данных размещаем невизуальные компоненты:
§ набор данных FIND (класс TADOQuery);
§ источник данных DSFIND (класс TDataSource).

6. Далее, выполняем:
§ связываем набор данных с БД через свойство Connection;
§ в свойство SQL заносим примерный многотабличный запрос;
§ временно активируем набор данных. Эти два пункта необходимы для запроса полей в визуальную таблицу;
§ связываем источник данных DSFIND с соответствующим набором данных FIND;
§ связываем визуальную таблицу на форме с источником данных, не забыв при этом предварительно прописать доступность соответствующего модуля данных;
§ запрашиваем поля в таблицу cxGrid1DBTableView1, нажав на кнопку Retrieve Fields; переименовываем их, удаляем или скрываем ненужные и т.д.;
§ деактивируем примерный набор данных, т.к. точный набор данных все равно будет формироваться динамически.

7. Для организации поиска записей создаем процедуру-обработчик события OnClick у кнопки Button1 «Начать поиск», которая сработает после нажатия на кнопку, и в нее записываем следующий программный код для создания и отправки динамического запроса к БД с целью формирования набора данных FIND.
Текст данного динамического запроса на языке T-SQL строится с учетом данных, введенных на экранной форме.
Label1.Visible:=false;
with DM do begin
if CheckBox1.Checked or CheckBox2.Checked then begin
FIND.SQL.Clear;
FIND.SQL.Add('select * from T1, T2, T3');
FIND.SQL.Add('where (T1.i1=T2.i1) and (T2.i3=T3.i3)');
end
else FIND.Close;
if CheckBox1.Checked then
if CheckBox3.Checked then
FIND.SQL.Add('and p1 like '+#39+'%'+Edit1.Text+'%'+#39)
else
DM.FIND.SQL.Add('and p1='+#39+Edit1.Text+#39);
if CheckBox2.Checked then
if CheckBox3.Checked then
FIND.SQL.Add('and p3 like '+#39+'%'+Edit2.Text+'%'+#39)
else
FIND.SQL.Add('and p3='+#39+Edit2.Text+#39);
if CheckBox1.Checked or CheckBox2.Checked then begin
FIND.SQL.Add('order by t1.i1, t3.i3');
FIND.Open;
if FIND.IsEmpty then Label1.Visible:=true;
end;
end;
|
Необходимо понимать, что именно делает та или иная строка, тот или иной оператор процедуры-обработчика.
8. Результат работы приведенного запроса может выглядеть следующим образом:

9. С целью реализации поиска по дате в курсовом проекте:
§ размещаем один (или несколько) компонентов DataTimePicker с вкладки Win32 для того, чтобы не вводить дату (даты) вручную, а воспользоваться календарем;

§ в свойство Format вводим значение, например, dd/MM/yyyy, т.е. формат даты, привычный для России (этот шаг возможно пропустить);
§ в процедуру-обработчик добавляем аналогичный следующему программный код:
var fSTR:TFormatSettings;
begin
...
fSTR.DateSeparator:='-';
fSTR.ShortDateFormat:='yyyy-mm-dd';
DM.FIND.SQL.Add('and (data_posadki>=' + #39 + DateToStr(DateTimePicker1.date, fSTR) + #39 + ')');
DM.FIND.SQL.Add('and (data_posadki<=' + #39 + DateToStr(DateTimePicker2.date, fSTR) + #39 + ')');
...
end;
|
В результате выполнения данного динамического запроса будут отобраны те записи, в которых значение поля Data_posadki попадает в определенный временной интервал.
При получении запроса СУБД Microsoft SQL Server воспринимает дату в международном формате и с дефисами в качестве разделителей, поэтому при реализации поиска по дате необходимо использовать переменную типа TFormatSettings. С помощью переменной fSTR мы меняем формат даты на международный формат, меняем разделитель между месяцем и числом, месяцем и годом на дефис.
Кроме того, СУБД Microsoft SQL Server воспринимает дату как строковое значение, записанное в апострофах, поэтому при формировании текста динамического запроса мы записываем символы #39 слева и справа от даты, приведенной к международному формату.
Date: 2015-07-22; view: 583; Нарушение авторских прав Понравилась страница? Лайкни для друзей: |
|
|