- •Федеральное агентство по образованию Российской Федерации
- •Свойства компонентов на форме DataModule1:
- •Свойства основных компонентов на форме Form1 (lr_3 - Таблица "операции"):
- •Свойства основных компонентов на форме Form2 (Запросы к бд:):
- •Обработчики событий для формы - Form1 (lr_3 - Таблица "операции"):
- •Обработчики событий для формы - Form2 (Запросы к бд:):
Свойства компонентов на форме 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;