Работа с ADO в Delphi. Часть 11. Получение информации набора данных

8 минут на чтение

Всем доброго времени суток дорогие читатели! В этой статье хотел бы поговорить о работе ADO, а именно о получении всевозможной информации о таблицах, полях и так далее. Конечно, может многие уже об этом знают, но все же, данная статья больше будет рассчитана для новичков.

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

Ну, что ребята, давайте приступим к самому простому из нашего списка – это определение версии, установленной на компьютере пользователя, технологии ADO. А для начала мы создадим некоторую базу данных и в ней таблицу, с несколькими полями, это на Ваше усмотрение, она может быть произвольной. Я создал таблицу следующего вида:

Все, теперь, давайте сделаем подключение к нашей Базе данных. Как это делается я описывал в статье. После того, как мы соединились с нашей Базой данных, теперь мы можем получать от нее различную информацию и как я говорил Выше давайте начнем с получение версии технологии ADO, установленной на компьютере пользователя. Это мы можем сделать, обращаясь к свойству Version компонента TADOConnecton. Например, так:

procedure TForm1.Button3Click(Sender: TObject);
begin
   Caption:=ADOConnection1.Version;
end;

Можете посмотреть результат, у меня на заголовке моей формы отобразилось – 2.8, у Вас естественно может отличаться от моей версии. Кроме того, данное свойство будет работать, то есть, мы сможем получить версию ADO, даже если свойство Connected компонента TADOConnection установлено в False.

Переходим к следующему нашему пункту, а именно получение информации о состоянии соединения в текущий момент времени. Данную информацию мы можем получить, а точнее определить с помощью свойства State компонента TADOConnection.

PropertyState:TObjectStates

Список всех возможных значений, которое может принимать свойство State описано ниже:

  • stClosed
  • stOpen
  • stConnecting
  • stExecuting
  • stFetching

Теперь разберемся по порядку. Значение stClosed – означает, что данный (текущий) набор данных не доступен. Значение stOpen – означает, что набор данных открыт и Ваше множество данных доступно для изменения, редактирования, удаления и так далее. Значение stConnecting – означает, что если потомок класса TCustomADODataSet находится в процессе соединения, то вот свойство State и возвращает данное значение. Значение stExecuting – означает то, что в данный момент времени элемент управления выполняет команду. Ну и наконец, значение stFetching – означает, что в данный момент времени происходит выборка строк из таблиц. То есть, если пользователь выбирает по определенному критерию строки из таблицы, то свойство State вернет данное значение. Эти значения можно применить почти к аналогичному свойство множества данных RecordSetRecordsetState.

Ну что, давайте теперь посмотрим небольшой пример использования:

procedure TForm1.Button1Click(Sender: TObject);
begin
   if ADOConnection1.State=[stOpen] then
    begin
     Caption:='Набор данных открыт'
    end;
end;

Думаю, что с этим разобрались, так что идем дальше. Давайте теперь попробуем получить список всех таблиц, которые у нас присутствуют в нашей Базе данных. Кроме того, мы получим не только список таблиц, а также некоторые данные по ним, которые будут отображаться в TDBGrid. Ну что, давайте разместим на форме следующие компоненты:

  • TADOConnection
  • TADODataSet
  • TDBGrid
  • TDataSource
  • TButton

Сделайте подключение к Вашей Базе данных через компонент TADOCOnnection, об этом я писал в данной статье. Как только Вы сделали подключение, выделите компонент TADODataSet и в свойстве Connection свяжем его с компонентом TADOConnection. Далее выделяем компонент TDataSource и в свойстве DataSet связываем его с компонентом TADODataSet. Ну и наконец, выделяем компонент TDBGrid и в свойстве DataSource мы связываем его с компонентом TDataSource. Вот и все, нам даже для выполнения данной цели нам и программировать не придется практически, достаточно, чтобы было сделано правильно подключение к нашей Базе данных и связаны между собой компоненты.

Теперь на событие OnClick нашей кнопки напишем код, который состоит всего из двух строчек:

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOConnection1.Open;
ADOConnection1.OpenSchema(siTables,EmptyParam,EmptyParam,ADODataSet1);
end;

Первый параметр в процедуре OpenShema может быть не обязательно таблицы, в нем может присутствовать и индекса, процедуры и много другое, то есть о каких элементах Базы данных мы хотим получить данные, первым параметром мы и указываем. У меня получилось следующее:

Как видите, мы здесь получили не только список таблиц нашей базы данных, а также все данные по ним, в том числе и описание таблиц. У меня как-то спрашивали: как можно получить описание таблицы Базы данных MS Access, я привел пример, уже не помню какой именно код, но здесь я привожу еще один вариант, как это можно сделать. Так что, как-то так.
На основе данной процедуры (OpenShema) построены ряд методов, с помощью которых также можно получать данные о таблицах:

  • procedure GetTableNames(List: TStrings; SystemTables: Boolean = False);
  • procedure GetFieldNames(const TableName: string; List: TStrings);
  • procedure GetProcedureNames(List: TStrings);

Пример использования:

procedure TForm1.Button3Click(Sender: TObject);
begin
   ADOConnection1.GetTableNames(ListBox1.Items);
end;

Если в данной процедуре указать необязательный второй параметр и установить его в TRUE, то в компонент TListBox выведется список таблиц нашей Базы данных, в том числе и системные таблицы Базы данных.

Точно также работают и другие методы. Ну что теперь давайте перейдем к последнему нашему пункту статьи – это получение информации о нашем наборе данных. То, есть мы можем определить каким возможностями он обладает. На уровне администрирования нашей База данных мы можем ей выставить какие-то права, вот здесь мы и будем получать то, что мы можем и не можем делать с нашим набором данных. Необходимо на форму установить следующие компоненты:

  • TADOConnection
  • TADODataSet
  • TButton

Теперь необходимо установить соединение к нашей Базе данных через компонент TADOConnection, это конечно можно сделать и сразу в компоненте TADODataSet в свойстве ConnectionString, но все же, сделаем через компонент TADOConnection, если кто-то забыл, как это делать, то смотрим это здесь. После того, как мы установили соединение с нашей Базой данных, выделяем компонент TADODataSet и в свойстве Connection выбираем компонент TADOConnection. Теперь в TADODataSet необходимо добавить некоторый набор данных, который мы будем проверять. Для этого мы выделяем компонент TADODataSet и в свойстве CommandText добавим следующий SQL-запрос:

SELECT * FROM Table1

Почти все, нам осталось компонент TADODataSet только активировать и свойство Active устанавливаем в TRUE. Для того, чтобы нам выявить какими возможностями обладает наш набор данных, то мы воспользуемся функцией:

  • function Supports(CursorOptions: TCursorOptions): Boolean;

Если указанная опция, которая передается в параметр данной функции, поддерживается нашим набором данным, то метод возвратит значение TRUE, если же нет, то соответственно FALSE. Теперь на событие OnClick нашей кнопки пишем следующий код:

procedure TForm1.Button2Click(Sender: TObject);
begin
ADODataSet1.Active:=True;
if ADODataSet1.Supports([coAddNew])=True then
 begin
  Caption:='True';
 end;
end;

Здесь я запросил данные о том: поддерживает ли наш набор данных (в нашем случае просто таблица) вставку новых записей. Список значений, которое может принимать наша функция Supports следующие:

  • coHoldRecords – большинство записей без подтверждения отложенных обновлений
  • coMovePrevious – курсор может быть перемещен без использования закладок
  • coAddNew – есть возможность вставки новых данных
  • coDelete – есть возможность удаления данных
  • coUpdate – есть возможность модификации данных (редактирование данных)
  • coBookmark — Закладка (свойство Bookmark) объекта Recordset может быть использована для перемещения курсора или для доступа к отмеченной записи
  • coApproxPosition – записи поддерживают свойство Recno, соответственно можно идентифицировать номер записи
  • coUpdateBatch – есть возможность пакетного обновления данных
  • coResync – данные курсора могут обновляться асинхронным способом
  • coNotify — объект Recordset поддерживает уведомления и может генерировать
  • события
  • coFind – для поиска данных можно использоваться метод Locate()
  • coSeek – для поиска данных может использоваться метод Seek()
  • coIndex – для задания текущего индекса таблицы может быть использовано свойство IndexName.
Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Продолжаем работу с базами данных. На этот раз, хотел бы рассмотреть фильтрацию данных в БД. Вообще, хотелось бы поговорить, для чего она предназначена, а также способы фильтрации данных, другими словами поиска данных в БД, с использованием технологии ADO. Как...
Всем здравствуйте, в этой статье я хотел бы снова обратить внимание на Базы данных, а в частности работа с Базами данных по технологии ADO. Когда пользователь создает приложение на Delphi, работающего с СУБД, к которой присоединяется по технологии ADO, то к фа...
Всем привет, и вот мой первый урок, думаю урок полезный, так как работа с базами данных в Delphi очень важно, а тем более Access на мой взгляд самая легкая база данных, с которой можно работать в Delphi. В этой статье я расскажу Вам как эту самую Базу данных A...