Скачиваний:
21
Добавлен:
01.05.2014
Размер:
454.66 Кб
Скачать

Свойства компонентов на форме DataModule1:

В клиентской части окна расположим компонент DBGrid1 со вкладки DataControls для отображения результатов запроса IBQuery1. В качестве источника данных укажем компонент DataSource1.

Свойства основных компонентов на форме Form1 (lr_3 - Таблица "операции"):

Свойства основных компонентов на форме Form2 (Запросы к бд:):

Обработчики событий для формы - Form1 (lr_3 - Таблица "операции"):

//----------ОТКРЫТЬ ФАЙЛ БД----------

procedure TForm1.Button2Click(Sender: TObject);

begin

if OpenDialog1.Execute then //Вводим имя файла базы данных

begin

//Выводим его в строку редактирования

Edit1.Text:=OpenDialog1.FileName;

//Устанавливаем имя для компонента IBDataBase

DataModule1.IBDataBase1.DatabaseName:=OpenDialog1.FileName;

//Устанваливаем связь с базой данных

DataModule1.IBDataBase1.Connected:=true;

//Активизируем запрос

DataModule1.IBQuery1.Active:=true;

end;

end;

//----------ОБНОВИТЬ----------

procedure TForm1.Button1Click(Sender: TObject);

begin

//Завершаем транзакцию. Запрос закрывается.

DataModule1.IBQuery1.Transaction.Commit;

//Вновь активизируем запрос

DataModule1.IBQuery1.Active:=true;

end;

//----------ДОБАВИТЬ----------

procedure TForm1.Button3Click(Sender: TObject);

begin

with DataModule1 do

begin

//Очистка редактора SQL компонента IBQuery1

workquery.SQL.Clear;

//Ввод текста запроса добавления записи

workquery.SQL.Add('INSERT into OPERACII (NOMER, DATA, NOMER_PACIENTA, NOMER_PATENTA, NAZVANIE, RECOMENDACII, KOLICHESTVO_OPERACIY)');

workquery.SQL.Add('VALUES (:newNOMER, :newDATA, :newNOMER_PACIENTA, :newNOMER_PATENTA, :newNAZVANIE, :newRECOMENDACII, :newKOLICHESTVO_OPERACIY)');

//Здесь NOMER,DATA,NOMER_PACIENTA,NOMER_PATENTA,NAZVANIE,RECOMENDACII,KOLICHESTVO_OPERACIY

//парметры запроса, которые будут заполнены позже из компонентов редактирования

//Символ ':' является признаком парметра

//Заполняем значение параметра из компонентов редактирвоания

workquery.ParamByName('newNOMER').AsInteger:=StrToInt(Edit2.Text);

workquery.ParamByName('newDATA').AsDate:=DateTimePicker1.Date;

workquery.ParamByName('newNOMER_PACIENTA').AsInteger:=StrToInt(Edit3.Text);

workquery.ParamByName('newNOMER_PATENTA').AsInteger:=StrToInt(Edit4.Text);

workquery.ParamByName('newNAZVANIE').AsString:=Edit5.Text;

workquery.ParamByName('newRECOMENDACII').AsString:=Edit6.Text;

workquery.ParamByName('newKOLICHESTVO_OPERACIY').AsString:=ComboBox1.Text;

//Пытаемся выполнить запрос INSERT. При его выполнении возможны

//ошибки. Для корректной работы приложения помещаем операторы

//в защитный блок try…except…end

try

workquery.ExecSQL; //Выполняем запрос

//Так как предложение INSERT не возвращает конкретного результата

//для его выполнения используем метод ExecSQL

workquery.Transaction.Commit;

//Завершаем транзакцию. В противном случае изменения будут не видны

IBQuery1.Open;

//Открываем запрос - состояние базы данных обновлено.

Except //Сбойная ситуация

showmessage('Ошибка операции добавления');

end;

end;

end;

//----------ИЗМЕНИТЬ----------

procedure TForm1.Button4Click(Sender: TObject);

begin

with DataModule1 do

begin

workquery.SQL.Clear;

//Вводим текст запроса обновления

workquery.SQL.Add('UPDATE OPERACII SET NOMER=:newNOMER, DATA=:newDATA, NOMER_PACIENTA=:newNOMER_PACIENTA, NOMER_PATENTA=:newNOMER_PATENTA, NAZVANIE=:newNAZVANIE, RECOMENDACII=:newRECOMENDACII, KOLICHESTVO_OPERACIY=:newKOLICHESTVO_OPERACIY');

//Идентифицируем запись по текущему состоянию всех полей

workquery.SQL.Add('WHERE (NOMER=:NOMER) and (DATA=:DATA) and (NOMER_PACIENTA=:NOMER_PACIENTA) and (NOMER_PATENTA=:NOMER_PATENTA) and (NAZVANIE=:NAZVANIE) and (RECOMENDACII=:RECOMENDACII) and (KOLICHESTVO_OPERACIY=:KOLICHESTVO_OPERACIY)');

//Заполняем новые значения из полей редактирвоания

workquery.ParamByName('newNOMER').AsInteger:=StrToInt(Edit2.Text);

workquery.ParamByName('newDATA').AsDate:=DateTimePicker1.Date;

workquery.ParamByName('newNOMER_PACIENTA').AsInteger:=StrToInt(Edit3.Text);

workquery.ParamByName('newNOMER_PATENTA').AsInteger:=StrToInt(Edit4.Text);

workquery.ParamByName('newNAZVANIE').AsString:=Edit5.Text;

workquery.ParamByName('newRECOMENDACII').AsString:=Edit6.Text;

workquery.ParamByName('newKOLICHESTVO_OPERACIY').AsString:=ComboBox1.Text;

//Идентифицируем запись для этого используем предыдущие значения полей из компонента IBQuery1

workquery.ParamByName('NOMER').AsInteger:=IBQuery1.FieldByName('NOMER').AsInteger;

workquery.ParamByName('DATA').AsDate:=IBQuery1.FieldByName('DATA').AsDateTime;

workquery.ParamByName('NOMER_PACIENTA').AsInteger:=IBQuery1.FieldByName('NOMER_PACIENTA').AsInteger;

workquery.ParamByName('NOMER_PATENTA').AsInteger:=IBQuery1.FieldByName('NOMER_PATENTA').AsInteger;

workquery.ParamByName('NAZVANIE').AsString:=IBQuery1.FieldByName('NAZVANIE').AsString;

workquery.ParamByName('RECOMENDACII').AsString:=IBQuery1.FieldByName('RECOMENDACII').AsString;

workquery.ParamByName('KOLICHESTVO_OPERACIY').AsString:=IBQuery1.FieldByName('KOLICHESTVO_OPERACIY').AsString;

//Создаем защищенный блок на случай ошибок БД

try

workquery.ExecSQL; //Выполняем запрос - обновляем запись

workquery.Transaction.Commit; //Завершаем транзакцию

IBQuery1.Open; //Обновляем состояние таблицы

except

showmessage('Ошибка операции обновления');

end;

end;

end;

//----------УДАЛИТЬ----------

procedure TForm1.Button5Click(Sender: TObject);

begin

with DataModule1 do

begin

//Динамическое формирование SQL-запроса удаления записи

workquery.SQL.Clear;

workquery.SQL.Add('DELETE from OPERACII');

workquery.SQL.Add('WHERE (NOMER=:NOMER) and (DATA=:DATA) and (NOMER_PACIENTA=:NOMER_PACIENTA) and (NOMER_PATENTA=:NOMER_PATENTA) and (NAZVANIE=:NAZVANIE) and (RECOMENDACII=:RECOMENDACII) and (KOLICHESTVO_OPERACIY=:KOLICHESTVO_OPERACIY)');

//Определяем параметры, идентифицирующие текущую запись из компонента IBQuery1

workquery.ParamByName('NOMER').AsInteger:=IBQuery1.FieldByName('NOMER').AsInteger;

workquery.ParamByName('DATA').AsDate:=IBQuery1.FieldByName('DATA').AsDateTime;

workquery.ParamByName('NOMER_PACIENTA').AsInteger:=IBQuery1.FieldByName('NOMER_PACIENTA').AsInteger;

workquery.ParamByName('NOMER_PATENTA').AsInteger:=IBQuery1.FieldByName('NOMER_PATENTA').AsInteger;

workquery.ParamByName('NAZVANIE').AsString:=IBQuery1.FieldByName('NAZVANIE').AsString;

workquery.ParamByName('RECOMENDACII').AsString:=IBQuery1.FieldByName('RECOMENDACII').AsString;

workquery.ParamByName('KOLICHESTVO_OPERACIY').AsString:=IBQuery1.FieldByName('KOLICHESTVO_OPERACIY').AsString;

//Выполняем запрос

workquery.ExecSQL;

//Закрываем транзакцию

workquery.Transaction.Commit;

//Обновляем состояние таблицы

IBQuery1.Open;

end; end;

//----------ЗАПОЛНЕНИЕ ЗНАЧЕНИЯМИ----------

procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

try

with DataModule1 do

begin //Изменяем сосотяние полей редактирования

//В соответствии с выбранной строкой таблицы

Edit2.Text:=IBQuery1.FieldByName('NOMER').AsString;

DateTimePicker1.Date:=IBQuery1.FieldByName('DATA').AsDateTime;

Edit3.Text:=IBQuery1.FieldByName('NOMER_PACIENTA').AsString;

Edit4.Text:=IBQuery1.FieldByName('NOMER_PATENTA').AsString;

Edit5.Text:=IBQuery1.FieldByName('NAZVANIE').AsString;

Edit6.Text:=IBQuery1.FieldByName('RECOMENDACII').AsString;

ComboBox1.Text:=IBQuery1.FieldByName('KOLICHESTVO_OPERACIY').AsString;

end;

except

showmessage('Ошибка доступа к данным');

end;

end;

//----------СОРТИРОВКА ПО ПОЛЮ ТАБЛИЦЫ----------

procedure TForm1.DBGrid1TitleClick(Column: TColumn);

var cn : string;

begin

cn:=Column.FieldName;

DataModule1.IBQuery1.Transaction.Commit;

DataModule1.IBQuery1.SQL.Clear;

DataModule1.IBQuery1.SQL.Add('SELECT * FROM OPERACII ORDER BY '+cn);

DataModule1.IBQuery1.Active:=True;

end;

//----------ФИЛЬТР ПО ПОЛЮ "НАЗВАНИЕ"----------

procedure TForm1.CheckBox1Click(Sender: TObject);

var fn : string;

begin

//определение имени поля, по которому следует сортировать

fn:=DBGrid1.SelectedField.FieldName;

DataModule1.IBQuery1.Transaction.Commit;

DataModule1.IBQuery1.SQL.Clear;

//Выбираем данные из таблицы

DataModule1.IBQuery1.SQL.Add('SELECT * FROM OPERACII');

if (CheckBox1.Checked) and (Edit7.Text<>'') then

//Если свойство checked установлено и есть образец для поиска

DataModule1.IBQuery1.SQL.Add('WHERE NAZVANIE LIKE "'+Edit7.Text+'%"');

//задаем порядок сортировки значениий

DataModule1.IBQuery1.SQL.Add('ORDER BY '+fn);

DataModule1.IBQuery1.Active:=True;

end;

//----------ФИЛЬТР ПО ПОЛЮ "НАЗВАНИЕ"----------

procedure TForm1.Edit7Change(Sender: TObject);

var fn : string;

begin

//определение имени поля, по которому следует сортировать

fn:=DBGrid1.SelectedField.FieldName;

DataModule1.IBQuery1.Transaction.Commit;

DataModule1.IBQuery1.SQL.Clear;

//Выбираем данные из таблицы

DataModule1.IBQuery1.SQL.Add('SELECT * FROM OPERACII');

if (CheckBox1.Checked) and (Edit7.Text<>'') then

//Если свойство checked установлено и есть образец для поиска

DataModule1.IBQuery1.SQL.Add('WHERE NAZVANIE LIKE "'+Edit7.Text+'%"');

//задаем порядок сортировки значений

DataModule1.IBQuery1.SQL.Add('ORDER BY '+fn);

DataModule1.IBQuery1.Active:=True;

end;

//----------ПЕРЕХОД НА ФОРМУ "Запросы к БД:"----------

procedure TForm1.Button6Click(Sender: TObject);

begin

Form2.Show;

end;

Соседние файлы в папке теория