Поддержка целостности в реляционной модели данных в ее классическом понимании включает в себя 3 аспекта.
Технология Microsoft ActiveX Objects (ADO) представляет собой универсальный механизм доступа к различным источникам данных из приложений баз данных. Основу технологии ADO составляет использование набора интерфейсов общей модели объектов COM, описанных в спецификации OLE DB.
В соответствии с терминологией ADO, любой источник данных (базу данных, файл, электронную таблицу) называют хранилищем данных. Приложение взаимодействует с хранилищем данных с помощью провайдера. Для каждого типа хранилища данных используется свой провайдер ADO. Провайдер обеспечивает обращение к данным хранилища с запросами, интерпретацию возвращаемой служебной информации и результатов выполнения запросов для передачи их приложению.
В системе программирования Delphi компоненты, используемые для создания приложений по технологии ADO, расположены на странице ADO Палитры компонентов:
- ADOConnection – ADO-соединение, используемое для установки соединения с ADO-источником данных и обеспечивает поддержку транзакций;
|
|
- ADOCommand – ADO-команды, используется для выполнения SQL-команд доступа к ADO-источнику данных без возвращения результирующего набора данных;
- ADODataSet – набор данных ADO, обеспечивает доступ к одной или более таблице ADO-источника данных и позволяет другим компонентам управлять этими данными, связываясьс компонентом ADOTable через компонент DataSource аналогично тому как используется компонент DataSet. Может использоваться в компонентах ADOTable, ADOQuery, ADOStoredProc;
- ADOTable – таблица ADO, обеспечивает доступ к одной таблице ADO-источника данных и позволяет другим компонентам управлять этими данными, связываясь с компонентом ADOTable через компонент DataSource:
- ADOQuery – запрос ADO, позволяет выполнять SQL-команды для получения информации из ADO-источника данных и позволяет другим компонентам управлять этими данными, связываясь с компонентом ADOQuery через компонент DataSource:
Компонент ADOConnection может использоваться как посредник между данными и другими компонентами ADO, что позволяет более гибко управлять соединением.
Возможен вариант использования других компонентов ADO, соединяясь с источником данных напрямую, для чего компоненты ADO имеют свойство ConnectionString, с помощью которого могут создавать свой собственный канал доступа к данным.
Рисунок 1. Схема доступа к данным по технологии ADO
Ход работы
1 Поместите компонент TADOConnection на форму. Настройка параметров соединения осуществляется в диалоге, открываемом двойным щелчком в строке ConnectionString свойства соответствующего компонента доступа к данным в окне Инспектора объектов.
|
|
2 При установке переключателя Use Data Link File можно выбрать из списка или найти (после нажатия кнопки Browse) файл связи с данными.udl. По существу файлы связи с данными играют ту же роль, что и псевдонимы при использовании BDE. Они позволяют разработчику не связывать откомпилированные приложения с точным расположением хранилища данных.
Для создания файла связи с данными создайте текстовый файл и измените разрешение на.udl.
При установке переключателя Use Connection String Выполняются действия по созданию строки соединения. Для продолжения выбранного варианта диалога нужно нажать кнопку Build. В результате открывается окно Data Link Propertis, содержащее 4 вкладки. С помощью вкладки Provider осуществляется выбор провайдера с учетом характера решаемой задачи. Выберите вариант Microsoft OLE DB Provider for SQL Server.
3 При нажатии на кнопку Next происходит переход на вкладку Connection.
- В пункте 1 выберите из списка EHOSERVER\Lab305;
- В пункте 2 – учетные сведения Windows NT;
- Далее выберите базу данных – Northwind;
- Проверьте подключение.
4 Поместите на форму следующие компоненты:
- ADODataSet
- DataSource
- ADOTable
- DBGrid
- DBNavigator
Компонент | Свойство | Значение |
ADODataSet1 | Connection | ADOConnection1 |
ADOTable1 | Connection | ADOConnection1 |
DataSource11 | DataSet | ADOTable1 |
DBGrid1 | DataSource | DataSource1 |
DBNavigator1 | DataSource | DataSource1 |
5 Поместите на форму компоненты: два компонента ComboBox, Memo, 3 компонента Button, OpenDialog.
Напишите процедуры для компонентов:
Компонент | Обработчик события | Процедура |
ComboBox1 | OnChange | adoconnection1.GetFieldNames(combobox1.Text, combobox2.items); adodataset1.Close; adotable1.Close; datasource1.DataSet:=adotable1; adotable1.TableName:=combobox1.Text; try adotable1.Open; except on e: Exception do begin Messagedlg(' Проверьте подключение , mtError, [mbOK], 0); adotable1.Close; end; end; combobox1.Text:=''; combobox2.Text:=''; |
OnDropDown | adoconnection1.Open; adoconnection1.GetTableNames(combobox1.Items); | |
ComboBox2 (Выбор) | OnChange | adodataset1.Close; adotable1.Close; datasource1.DataSet:=adodataset1; adoDataSet1.CommandText:='Select '+combobox2.Text+' From '+combobox1.Text; try adodataset1.Active:=true; except on e: Exception do begin Messagedlg(’Проверьте подключение’, mtError, [mbOK], 0); adodataset1.Close; end; |
Button1 (Кнопка для выполнения SQL-команды) | OnClick | adodataset1.Close; adotable1.Close; datasource1.DataSet:=adodataset1; adoDataSet1.CommandText:=Memo1.Text; try adodataset1.Active:=true; except on e: Exception do begin Messagedlg(‘Неправильный синтаксис SQL-команды’, mtError, [mbOK], 0); adodataset1.Close; end; end; |
Button2 (В том случае если используется файл связи с данными) | OnClick | if opendialog1.Execute then begin adoconnection1.ConnectionString:='FILE NAME='+opendialog1.FileName; adoconnection1.Provider:=opendialog1.FileName; adoconnection1.Open; end; |
Button3 (В том случае если используется файл связи с данными) | OnClick | ShellExecute(Form1.Handle, nil,’Путь к файлу.udl', nil, nil, sw_shownormal); |
Для компонента DBNavigator процедуры обработки событий будут прописаны автоматически.
6 Листинг программы:
procedure TForm1.BOpenSQLClick(Sender: TObject);
begin
adodataset1.Close;
adotable1.Close;
datasource1.DataSet:=adodataset1;
adoDataSet1.CommandText:=Memo1.Text;
try
adodataset1.Active:=true;
except on e: Exception do
begin
Messagedlg('Неправильный синтаксис SQL-команды', mtError, [mbOK], 0);
adodataset1.Close;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then begin
adoconnection1.ConnectionString:='FILE NAME='+opendialog1.FileName;
adoconnection1.Provider:=opendialog1.FileName;
adoconnection1.Open;
end;
end;
procedure TForm1.BCloseClick(Sender: TObject);
begin
if (adodataset1.State=dsedit) or (adodataset1.State=dsinsert) then adodataset1.Post;
if (adotable1.State=dsedit) or (adotable1.State=dsinsert) then adotable1.Post;
adoconnection1.Connected:=false;
close;
end;
procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
adoconnection1.Open;
adoconnection1.GetTableNames(combobox1.Items);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
adoconnection1.GetFieldNames(combobox1.Text, combobox2.items);
adodataset1.Close;
adotable1.Close;
datasource1.DataSet:=adotable1;
adotable1.TableName:=combobox1.Text;
try
adotable1.Open;
except on e: Exception do
begin
Messagedlg('Проверьте соединение', mtError, [mbOK], 0);
adotable1.Close;
end;
end;
combobox1.Text:='';
combobox2.Text:='';
end;
procedure TForm1.N11Click(Sender: TObject);
begin
ShellExecute(Form1.Handle, nil, 'Путь к файлу связи.udl', nil, nil, sw_shownormal);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (adoDAtaSet1.State=dsedit) or (adoDAtaSet1.State=dsinsert) then adoDAtaSet1.Post;
if (adotable1.State=dsedit) or (adotable1.State=dsinsert) then adotable1.Post;
adoconnection1.Close;
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
|
|
begin
adodataset1.Close;
adotable1.Close;
datasource1.DataSet:=adodataset1;
adoDataSet1.CommandText:='Select '+combobox2.Text+' From '+combobox1.Text;
try
adodataset1.Active:=true;
except on e: Exception do
begin
Messagedlg('Проверьте соединение', mtError, [mbOK], 0);
adodataset1.Close;
end;
end;
combobox2.Text:='';
end;
end.
7 Оформить подробный отчет и сделать вывод по выполненной работе.