Реализация пользовательского интерфейса в Delphi с использованием библиотеки компонентов ODAC.
Компоненты для работы с Microsoft ActiveX Data Objects (ADO) впервые появились в среде Delphi версии 5. ADO — это технология стандартного обращения к реляционным структурам данных от Microsoft. Она аналогична BDE по назначению и сродни ему по возможностям. В основе архитектуры ADO лежит объектная модель компонентов COM (Component Object Model). Все объекты и интерфейсы ADO представляют собой интерфейсы и объекты СОМ. Модель СОМ является базовой для технологий ActiveX и OLE. Технология СОМ работаете так называемыми СОМ-обьектами. Во многом СОМ-объекты похожи на обычные объекты визуальной библиотеки компонентов Delphi. Но, в отличие от последних, СОМ-объекты не содержат поля, в них находятся лишь свойства и методы, а также интерфейсы. Интерфейсы — это группы логически или семантически связанных процедур, которые обеспечивают связь между поставщиком услуги (сервером) и его клиентом. Названия интерфейсов начинаются с буквы I. Обычный СОМ-объект включает в себя один или несколько интерфейсов. Кроме того, СОМ-объект содержит методы, которые позволяют приложению пользоваться им. Технология СОМ имеет два явных плюса: 1. создание СОМ-объектов не зависит от языка программирования. Таким образом, СОМ-объекты могут быть написаны на различных языках; 2. СОМ-объекты пригодны для использования в любой среде программирования под Windows. В число этих сред входят Delphi, Visual С++, С++ Builder, Visual Basic и многие другие. Технология СОМ реализуется с помощью СОМ-библиотек (такие файлы операционной системы, как OLE32.DLL и OLEAUT32.DLL). СОМ-библиотеки содержат набор стандартных интерфейсов, которые отвечают за функциональность СОМ-объекта, а также небольшой набор функций API, обеспечивающих создание СОМ-объектов и управление ими.
Рассмотрим особенности архитектуры ADO (рис. 1). Рисунок 1 – Архитектура ADO Перечислим основные интерфейсы ADO и кратко поясним их назначение: 1. Интерфейс IConnection выполняет следующие функции: · Осуществляет связь с сервером; · Управляет транзакциями; · Получает информацию о произошедших ошибках (свойство Errors); · Получает информацию о схеме данных (таблицы, поля и так далее); · Интерфейс IRecordset (на нижнем уровне ADO это IRowset) является аналогом TDataSet в Delphi и поддерживает текущее положение и перемещение курсора, закладки (Bookmarks), чтение, изменение и удаление записей и тому подобное; · Интерфейс IReld позволяет получать значение поля, его тип, длину и другие сведения о поле данных; · Интерфейсы ICommand и IParameter обеспечивают работу с командами источника данных. Синтаксис команд для каждого из источников свой собственный; · Интерфейс IProperty позволяет получать и устанавливать параметры, специфические для провайдера данных. Для работы с механизмом ADO в Delphi 7 предназначены семь стандартных компонентов, расположенных на закладке ADO палитры компонентов (рисунок 2). Рисунок 2 – Закладка ADO Первый компонент называется ADOConnection. Функционально он аналогичен компоненту Database закладки BDE. С помощью компонента ADOConnection можно указывать местоположение базы данных и работать с транзакциями. Рисунок 3 – ADOConnection Следующий компонент закладки ADO называется ADOCommand. Он предназначен для выполнения SQL-команды без возврата результирующего набора данных. Третий компонент закладки ADO носит имя ADODataSet Его назначение получение набора данных из одной или нескольких таблиц базы данных. Кроме того, он также позволяет работать с возвращенным набором данных визуальным компонентам, предназначенным для отображения данных. Это наиболее общий компонент для работы с набором данных, который может использоваться вместо компонентов ADOTable, ADOQuery или ADOStoredProc.
Следующий компонент закладки ADO называется ADOTable. Он является аналогом компонента Table, расположенного на закладке BDE, и предназначен для доступа к таблице с помощью механизма ADO. Компонент ADOQuery представляет собой запрос к базе данных. Это может быть, как запрос, в результате которого возвращаются данные из базы (например, SELECT), так и запрос, не формирующий результирующего набора данных (например, INSERT). Рисунок 4 – ADOQuery.SQL Компонент ADOStoredProc предназначен для вызова процедуры, хранимой на сервере базы данных. В отличие от BDE и InterBase хранимые процедуры в ADO могут возвращать набор данных, поэтому компонент такого типа является потомком DataSet и может выступать источником данных в компонентах типа DataSource. Последний компонент закладки ADO называется RDSConnection. Этот компонент управляет маршалингом данных, когда набор записей переносится из одного компьютера на другой. Все события в ADO условно разделим на несколько групп: события соединения, события транзакции, события выполнения команд. События соединения: 1. OnWillConnect — вызывается перед установкой соединения; 2. OnConnectComplete — вызывается после установки соединения; 3. OnDisconnect — активируется при разрыве соединения. Эти события инкапсулированы в компоненте ADOConnection.События транзакции; 4. OnBeginTransComplete — происходят при выполнении BeginTrans; 5. OnCommitTransComplete — происходят при выполнении CommitTrans; 6. OnRollbackTransComplete — вызываются при выполнении RollbackTrans. События данной группы инкапсулированы в компоненте ADOConnection. События выполнения команд OnWillExecute и OnExecuteComplete вызываются перед выполнением команды и после него соответственно. В компонент ADOConnection также встроено событие OnlnfoMessage, которое вызывается по факту прихода с сервера дополнительной информации. Формат и назначение зависят от сервера, с которым вы работаете. В ADO есть и события, связанные с набором данных, а не с соединением, как вышеописанные. Они инкапсулированы в компоненты, представляющие наборы данных: ADODataSet, ADOTable, ADOQuery и ADOStoredProc. Эти события можно условно разбить на три группы. 1. События выборки данных. · OnFetchProgress — многократно вызывается в процессе выборки данных; · OnFetchComplete — завершение выборки. 2. Уведомления об изменении положения текущей записи в наборе:
· OnWillMove — вызывается до изменения положения текущей записи. Позволяет отменить действие; · OnMoveComplete — вызывается после изменения положения текущей записи; · OnEndOfRecordset — генерируется при достижении конца набора данных. Позволяет добавить новую запись. 3. Уведомления об изменении набора данных. · OnWillChangeField, OnFieldChangeComplete — вызываются до и после изменения текущей записи набора; · OnWillChangeRecord, OnRecordChangeComplete — вызываются до и после изменения, добавления, удаления строки набора и при отмене этих действий; · OnWillChangeRecordset, OnRecordsetChangeComplete — вызываются до и после открытия, закрытия, повторного запроса и синхронизации набора данных. Многие события допускают прерывание действия. Эта возможность полезна при асинхронной работе с сервером, например, для прерывания слишком длинного запроса. В ADO есть возможность, не имеющая аналогов ни в BDE, ни в InterBase. Это асинхронное выполнение операций с сервером. Асинхронно могут выполняться: 1. Установка соединения с сервером (Connection); 2. Выполнение команды (Execute); 3. Выборка данных (Fetch). Для включения этого режима необходимо присвоить свойству ConnectOptions компонента ADOConnection значение coAsyncConnect. При установлении соединения происходит следующее: 1. Вызывается обработчик события OnWillConnect; 2. Управление передается программе. После завершения соединения, как успешного, так и ошибочного, вызывается обработчик события OnConnectComplete. Надо заметить, что многие компоненты ADO при активизации или выполнении отрабатывают команду на языке SQL. Это такие компоненты, как ADOCommand, ADODataSet, ADOTable, ADOQuery и ADOStoredProc. Для асинхронного выполнения команды установите в свойстве ExecuteOptions значение coAsyncExecute. При выполнении команды будет происходить следующее: 1. Вызовется обработчик события OnWillExecute; 2. Управление передастся программе. После окончания выполнения команды, как успешного, так и ошибочного, вызывается обработчик события OnExecuteComplete. Асинхронная выборка данных поддерживается в компонентах ADODataSet, ADOTable, ADOQuery и ADOStoredProc. Для ее включения установите в свойстве ExecuteOptions значение coAsyncFetch.
После исполнения команды происходит передача данных. В процессе передачи многократно вызывается обработчик сообщения OnFetchProgress. В его параметрах указывается как количество уже переданных записей, так и общее количество предназначенных для передачи записей. Это очень удобно для создания индикаторов типа ProgressBar. После того как выборка с сервера закончена, вызывается обработчик события OnFetchCompiete. Результат работы программы: Рисунок 5 – Форма «Меню» Рисунок 6 – Форма «Город» Рисунок 7 – Форма «Судьи» Рисунок 8 – Форма «Инспектора» Рисунок 9 – Форма «Футбольные клубы» Рисунок 10 – Форма «Матчи»
Листинг программы unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button7: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2, Unit3, Unit4, Unit5, Unit6; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Form2.show; end; procedure TForm1.Button2Click(Sender: TObject); begin Form3.show; end; procedure TForm1.Button3Click(Sender: TObject); begin Form4.show; end; procedure TForm1.Button4Click(Sender: TObject); begin Form5.show end; procedure TForm1.Button7Click(Sender: TObject); begin Form6.show; end; procedure TForm1.Button5Click(Sender: TObject); begin close(); end; procedure TForm1.FormCreate(Sender: TObject); begin end; end. unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids; type TForm2 = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin close(); end; end. ЛАБОРАТОРНАЯ РАБОТА №4
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|