Adoquery delphi описание компонента

ADO это технология стандартного обращения к реляционным данным от Microsoft. Эта технология аналогична BDE по назначению и довольно близка по возможностям. Следует отличать компоненты Delphi, являющиеся частью библиотеки визуальных компонентов Delphi VCL , и интерфейсы и объекты ADO, которые в них инкапсулированы.

В дальнейшем, когда упоминается компонент — это компонент Delphi, а когда объект или интерфейс — это объект или интерфейс ADO. Для работы с ADO на вкладке компонентов ADO есть шесть компонентов: TADOConnection, TADOCommand, TADODataSet, TADOTable, TADOQuery, TADOStoredProc.

TADOConnection аналогичен компоненту BDE TDatabase и используется для указания базы данных и работы транзакциями. TADOTable — таблица доступная через ADO. TADOQuery — запрос к базе данных. Это может быть как запрос, в результате которого возвращаются данные и базы например, SELECT , так и запрос не возвращающий данных например, INSERT. TADOStoredProc — вызов хранимой процедуры. В отличие от BDE и InterBase хранимые процедуры в ADO могут возвращать набор данных, по этому компонент данного типа является потомком от TDataSet и может выступать источником данных в компонентах типа TDataSource.

TADOCommand и TADODataSet являются наиболее общими компонентами для работы с ADO, но и наиболее сложными в работе. Оба компонента позволяют выполнять команды на языке провайдера данных так в ADO называется драйвер базы данных. Разница между ними в том, что команда, исполняемая через TADODataSet, должна возвращать набор данных и этот компонент позволяет работать с ними средствами Delphi например, привязать компонент типа TDataSource.

А компонент TADOCommand позволяет исполнять команды не возвращающие набор данных, но не имеет штатных средств Delphi для последующего использования возвращенного набора данных. Очевидно, что все компоненты должны связываться с базой данных. Делается это двумя способами либо через компонент TADOConnection либо прямым указанием базы данных в остальных компонентах.

К TADOConnection остальные компоненты привязываются с помощью свойства Connection , к базе данных напрямую через свойство Connection String.

База данных может быть указана двумя способами через файл линка к данным файл в формате Microsoft Data Link, расширение UDL , либо прямым заданием параметров соединения. Окно этого свойства выглядит так:. Этот файл можно создать в любом окне explorer-а в этом окне открытия файла, в самом explorer, на desktop и т. После этого появится property sheet описанный чуть ниже.

Использование файлов Microsoft Data Link упрощает поддержку приложений, так как возможно использовать средства Windows для настройки приложения. В этом окне выбирается тип базы данных, местоположение базы и параметры соединения. Если он не отмечен, то введенный пароль будет использоваться только при выполнении тестового соединения.

Редактирование осуществляется в виде параметр — значение, причем в текстовой форме, никаких диалогов нет. Помощи то же нет, эти параметры описаны только в документации на провайдер.

В компоненте TADOConnection есть свойства Provider , DefaultDatabase и Mode которые являются альтернативным методом задания частей строки параметров соединения — провайдера, базы данных например, пути до базы MS Access и режима совместного использования файлов базы данных. Эти значение этих свойств автоматически включаются в строку соединения, если были заданы до активизации компонента и автоматически выставляются после соединения.

TADOTable с палитры компонент ADO ,. TDataSource с палитры компонент Data Access,. TDBGrid c палитры компонент Data Controls. Теперь нам необходимо указать базу данных. Делается это в свойстве ConnectionString компонента TADOTable. Этот линк указывает на базу в формате MS Access, входящую в поставку Delphi. После этого в свойстве TableName компонента TADOTable выберем таблицу customer. Активизируем компонента TADOTable , установив свойство Active в True.

Этот пример можно найти в директории Simple. ADO основано на технологии COM. Все объекты и интерфейсы ADO являются интерфейсами и объектами COM. Схема взаимодействия в ADO основных COM интерфейсов. Интерфейсы Recordset и Field. Поддерживает текущее положение и перемещение курсора, закладки bookmarks , чтение, изменение и удаление записей и так далее.

Значение полей и их типы доступны с помощью свойства Fields. Интерфейс Field позволяет получать значение поля, его тип длину и так далее. Интерфейсы Command и Parameter. Эти два типа позволяют работать с командами источника данных. Синтаксис команд для каждого из источников свой. Все объекты, кроме Parameter , имеют свойство Properties , которое позволяет получать и устанавливать параметры специфические для провайдера данных. Библиотека довольно запутанная, многие функции дублированы в разных объектах.

Например, Recordset можно создавать напрямую, методом Open , причем предварительно создавать Connection не обязательно , можно получить как результат выполнения метода Command. Execute , либо после Connection. Execute задав команду без параметров. Интерфейс Command инкапсулирован во все компоненты за исключением TADOConnection. Это сделано потому, что в ADO нет возможности получить данные не выполнив команду.

Интерфейс Recordset инкапсулирован в компоненты производные от TCustomADODataSet. Это компоненты TADODataSet, TADOTable, TADOQuery, TADOStoredProc. Получать данные из них возможно штатными средствами Delphi. Возможно получение данных и при выполнении компонента TADOCommand. После чего его можно, например, связать с компонентом TADODataSet следующим образом.

Компоненты TADOTable, TADOQuery и TADOStoredProc являются частными случаями команды, соответственно для таблицы, SQL запроса и хранимой процедуры. Тип Connection инкапсулируется в компонент TADOConnection. Когда вы выполняете команду предварительно не открывая соединение, оно все равно создается. Получить к нему доступ возможно через свойство Recordset. Привязать компонент TADOConnection к уже открытому соединению возможно через свойство ConnectionObject. Информацию о структуре базы данных можно получить с помощью метода OpenSchema компонента TADOConnection.

Эта информация представлена как набор таблиц, как стандартизованных, так и специфических для провайдера. Таким способом можно узнать список таблиц, запросов, хранимых процедур и многое другое. Однако изменять структуру базы с помощью возвращаемых наборов данных невозможно. В этом примере рассматривается работа с компонентом TADOConnection , SQL запросами с параметрами и трансакциями. Создадим приложение из следующих компонентов. MasterSQL и DetailSQL типа TADODataSet. MasterDS и DetailDS типа TDataSource.

MasterGrid и DetailGrid типа TDBGrid. Master - detail форма на этапе дизайна. Связываем MasterGrid , MasterDS , MasterSQL и DetailGrid , DetailDS , DetailSQL аналогично предыдущему примеру, за исключением того, что вместо типа TADOTable используется тип TADODataSet.

Привязываем Connect к базе данных. Для этого в редакторе свойства ConnectionString выбираем ту же базу данных, что и в предыдущем примере. Для ввода SQL запросов необходимо отредактировать свойство CommandText компонентах MasterSQL и DetailSQL. Запрос в DetailSQL должен выбирать только те детали, поставщик которых является текущим в MasterSQL.

Компоненты ADO

Для этого установим свойство DataSource компонента DetailSQL в значение MasterDS. VendorNo в части where — параметр запроса. Параметры при установленном DataSource берутся из него. Активизируем MasterSQL и DetailSQL аналогично предыдущему примеру. Этот пример можно найти в директории MasterDetail. Теперь ограничим выборку поставщиков по значению поля State.

Для этого добавим к форме следующие компоненты StateEdit типа TEdit c вкладки Standard , Query Button типа TButton c вкладки Standard. StateID — параметр, вместо которого при выполнении подставляется значение. Добавим так же обработчик события OnClick в Query Button следующего содержания.

Этот пример можно найти в директории Param. Первый — c помощью метода Resync , который повторно считывает записи набора. Этот метод используется при выполнении метода Refresh Delphi. Второй — повторный запрос методом Requery , который заново выполняет запрос на сервере.

Выполнение этого метода то же самое, что и выполнение подряд закрытия и открытия набора данных. Этих методы доступны во всех компонентах имеющих набор данных.

Однако эти функции доступны не для всех баз данных. В компонентах ADO работа с транзакциями осуществляется через компонент TADOConnection. Тип транзакции устанавливается в свойстве IsolationLevel одной из следующих констант: Сервер будет использовать лучший, по его мнению, тип изоляции. Транзакции с более высоким уровнем изоляции не могут изменять данные измененные, но не подтвержденные в текущей транзакции. Чтение данных измененных в не подтвержденных транзакций.

То есть изменения видны сразу после того как другая транзакция передала их на сервер. Чтение данных измененных подтвержденными транзакциями. То есть изменение данных будет видимо после выполнения Commit в другой транзакции. То же самое что и IlCursorStability. Изменения, сделанные другими транзакциями не видимы, но при выполнении перезапроса они транзакция может получать новый набор данных.

Обратите внимание на то, что не все типы провайдеров данных поддерживают все типы изоляции или работу с транзакциями. Свойство Attributes устанавливает открывать ли новую транзакцию автоматически.

Так же у компонента TADOConnection есть три метода для работы с транзакциями:. За базовый возьмем пример использования TADOConnection.

Этот пример находится в директории Trans. Обратите внимание на то, что когда транзакция не запущена, все равно можно изменять данные и они записываются немедленно. В ADO есть понятие набора данных recordset и тесно связанное с ним понятие курсора cursor. Что такое курсор в документации на ADO не описано. Однако почему то месторасположение набора данных называется положением курсора. Я думаю, что это терминологическая путаница в Microsoft и курсор то же самое что набор данных.

Во всех компонентах имеющих набор данных то есть в TADODataSet, TADOTable, TADOQuery, TADOStoredProc есть свойства CursorLocation , CursorType , LockType и MarshalOptions , устанавливающие параметры обмена с сервером. Все эти свойства должны быть установлены до того, как набор данных открывается. Если вы установите их позже, то эффекта не будет. CursorLocation — определяет, где выполняется работа с набором на клиенте clUseClient или на сервере clUseServer. Если набор данных расположен на клиенте, то с сервера данные запрашиваются однократно или до выполнения повторного запроса , в дальнейшем вся выборка данных и позиционирование идет на клиенте.

Однако модификация данных производится немедленно. CursorType — устанавливает тип курсора. Статическая копия набора записей, которую вы можете использовать, например, для генерации отчета.

Добавления, изменения или удаление записей другими пользователями не видимы. Это тип улучшает эффективность в ситуациях, когда вы делаете только один проход через набор данных. Добавления, изменения и удаление другими пользователями видимы и возможны все типы передвижения по набору данных. Закладки bookmarks возможны только, если провайдер данных их поддерживает. Аналогичен динамическому курсору, за исключением того, что вы не увидите записи добавленные другими пользователями, а записи удаленные другими пользователями недоступны из вашего набора данных.

Изменения данных другими пользователями видимы. Надо заметить, что TDBGrid и другие компоненты, одновременно работающие с несколькими записями, могут работать только когда закладки поддерживаются. Поэтому для компонент с которыми вы будите связывать такие компоненты должны использоваться типы ctKeyset или ctDynamic.

LockType — определяет тип блокировки записей в наборе данных. Запись блокируется сразу после начала редактирования и до сохранения записей.

Запись блокируется только когда изменения сохраняются. Более подробно она рассматривается в следующем пункте. MarshalOptions — это свойство определяет будут ли отправлены на сервер те поля, которые не были изменены. При значении moMarshalAll будут, а при moMarshalModifiedOnly не будут. Обратите внимание, что в компонентах ADO нет свойства CachedUpdates , но это не означает, что невозможно отложить передачу изменений данных на сервер.

Эта возможность встроена с ADO и называется Batch Updates. Для ее использования необходимо использовать клиентский курсор то есть установить свойство CursorLocation в clUseClient и LockType в ltBatchOptimistic. Так же есть метод сохраняющий изменения UpdateBatch и метод их отменяющий CancelBatch. К каким записям из набора данных применяется действие зависит от единственного параметра этих функций.

Добавим обработчики событий OnClick во все эти три компонента. Изменим обработчик события OnActivate формы. События ADO предназначены для той же цели, что и события VCL. Многие из них имеют аналогичные события VCL и компоненты вызывают из событий ADO события VCL. В компонентах доступны как события ADO, так и события BDE. OnWillConnect — вызывается перед установкой соединения. OnConnectComplete — после установки соединения. Эти события инкапсулированы в компоненте TADOConnection. OnBeginTransComplete — при выполнении BeginTrans.

OnCommitTransComplete — при выполнении CommitTrans. OnRollbackTransComplete — при выполнении RollbackTrans. OnWillExecute и OnExecuteComplete вызываются перед и после выполнением команды. Эти события инкапсулированы в компоненте TADOConnection , а не в компоненте TADOCommand , как можно было бы предположить.

Это связано с тем, что в ADO объекта команды как такого нет и по этой причине он не может получать сообщения. В TADOConnection также инкапсулировано событие OnInfoMessage, которое вызывается при приходе с сервера дополнительной информации. Формат и назначение зависят от сервера, с которым вы работаете. В ADO так же есть события связанные с набором данных, а не с соединением, как вышеописанные. Они инкапсулированы в компоненты имеющие набор данных — TADODataSet , TADOTable , TADOQuery и TADOStoredProc.

OnFetchProgress — многократно вызывается в процессе выборки набора данных. OnWillMove , OnMoveComplete — вызываются до и после изменения положения текущей записи. OnWillMove позволяет отменить действие. OnEndOfRecordset — вызывается при достижении конца набора данных, позволяет добавить новую запись. OnWillChangeField , OnFieldChangeComplete — до и после изменения текущей записи набора.

OnWillChangeRecord , OnRecordChangeComplete — вызываются до и после изменения, добавления, удаления строки набора и отмене этих действий. OnWillChangeRecordset , OnRecordsetChangeComplete - вызываются до и после открытия, закрытия, повторного запроса и синхронизации набора данных.

Многие события допускают прерывание действия. Эта возможность бывает полезна при асинхронной работе с сервером. Например, для прерывания слишком длинного запроса. В ADO есть возможность не имеющая аналогов ни в BDE ни в InterBase. Это асинхронное выполнение операций с сервером. Могут асинхронно выполнятся установка соединения с сервером Connection , выполнение команды Execute и выборка набора данных Fetch. Для включения этого режима необходимо установить свойство ConnectOptions компонента TADOConnection в coAsyncConnect.

Вызывается обработчик события OnWillConnect. После окончания соединения, как успешного, так и ошибочного, вызывается обработчик события OnConnectComplete. Надо заметить, что все компоненты ADO, за исключением компонента TADOConnection при активизации или выполнении исполняют команду ADO. Эти компоненты TADOCommand, TADODataSet, TADOTable, TADOQuery, TADOStoredProc. Установите в свойстве ExecuteOptions eoAsyncExecute.

Вызывается обработчик события OnWillExecute. После окончания выполнения команды, как успешного, так и ошибочного, вызывается обработчик события OnExecuteComplete. Асинхронная выборка данных поддерживается в компонентах TADODataSet, TADOTable, TADOQuery, TADOStoredProc. Для ее включения установите в свойстве ExecuteOptions eoAsyncFetch. После исполнения команды происходит передача данных. В процессе передачи многократно вызывается обработчик сообщения OnFetchProgress.

В его параметрах есть как количество уже переданных записей, так и общее количество. Это очень удобно для создания индикаторов типа TProgressBar. После того, как выборка с сервера закончена, вызывается обработчик события OnFetchComplete. Компоненты ADO В Delphi 5. Обзор компонент Для работы с ADO на вкладке компонентов ADO есть шесть компонентов: Окно этого свойства выглядит так: На первой странице выбирается тип базы данных или Provider, в терминах ADO.

Параметры идентификации пользователя аналогичны выше описанным. Простейшее приложение Создадим простейшее приложение, состоящее из одной таблицы. Создаем форму состоящую из трех компонент TADOTable с палитры компонент ADO , TDataSource с палитры компонент Data Access, TDBGrid c палитры компонент Data Controls.

Обзор ADO ADO основано на технологии COM. Интерфейсы Command и Parameter Эти два типа позволяют работать с командами источника данных. Интерфейс Property Все объекты, кроме Parameter , имеют свойство Properties , которое позволяет получать и устанавливать параметры специфические для провайдера данных. После чего его можно, например, связать с компонентом TADODataSet следующим образом ADODataSet1. Сайт создан в системе uCoz. То же самое что и IlReadUncommitted. Транзакция не видит изменений данных произведенных другими транзакциями.

То же самое что и IlIsolated.



Коментарии:

Помимо перечисленных, существует также огромное количество других провайдеров OLE DB для MDAC.