Компоненты доступа к данным Компоненты доступа к данным являются не визуальными. В Delphi для работы с наборами данных служат такие компоненты как: TTable, TQuery, TUpdateSQL, TDisicionQuery и TStoredProc. Но наиболее удобными и часто используемыми являются TTable, TQuery. Компонент Table представляет собой набор данных, который может быть связан только с одной таблицей Базы Данных. Данный компонент относят к навигационному доступу к данным, поэтому его рекомендуется использовать для локальных БД. Расположение БД указывает свойство DatabaseName. Значением свойства является имя каталога, в котором находиться БД, или псевдоним (alias), ссылающийся на этот каталог. При задании местоположения таблицы БД, набор данных нужно закрыть, чтобы избежать исключительной ситуации. Чтобы закрыть набор данных, можно воспользоваться двумя способами. Первый способ - это указать свойству Active значение False. А второй - это воспользоваться методом Close. Для того чтобы снова открыть набор данных, можно также воспользоваться двумя способами. Первый - это указать свойству Active значение True, и второй способ - воспользоваться методом Open.
Связь между таблицей и набором данных Table осуществляется через его свойство
TableName, которое задает имя таблицы БД. При указании данного свойства необходимо указать
имя таблицы и расширение. А теперь рассмотрим пример:
Обратите внимание на то, что перед указанием расположения таблицы БД, набор данных закрывается, дабы избежать исключительной ситуации. Так же обратите внимание, что я не указал значения для свойства DatabaseName. Но, я явно указал путь к таблице в свойстве TableName. Мой небольшой опыт работы с Базами Данных, показывает что, такой способ позволит избежать некоторых проблем при переносе приложения на другой компьютер. Свойство TableType определяет тип таблицы и может иметь следующие значения:
Если свойство TableType имеет значение ttDefault, то тип таблицы определяется по расширению файла таблицы:
Очень полезным свойством является свойство RecNo. Это свойство возвращает номер текущей записи в наборе данных. Данное свойство очень удобно использовать для запоминания текущей позиции курсора для последующего возврата в эту позицию.
Не менее полезным свойством является свойство RecordCount. Данное свойство возвращает число
записей набора данных. Это свойство доступно только во время выполнения программы и доступно только
для чтения. Рассмотрим небольшой пример:
В обработчик события onAfterScroll набора данных Table, мы внесли код для определения текущей позиции курсора в наборе данных и общего числа записей набора данных.
А вот так организуется возврат в исходную позицию, после некоторых возможных операций с
набором данных:
Для навигации по набору данных существует несколько методов:
Компонент доступа к данным Query представляет собой набор данных, записи которого формируются в результате выполнения SQL-запроса. Данный компонент относят к реляционному доступу к данным, поэтому его рекомендуется использовать для работы с удаленными БД. Query по своим свойствам и методам очень похож на Table. Текст запроса, на основании которого в набор данных будут отбираться записи, содержится в свойстве SQL. Запрос представляет собой команды написанные на языке запросов SQL. Он выполняется при открытии набора данных.
При написании запроса не производиться проверка правильности его написания. Эта проверка
происходит только во время выполнения данного запроса. Рассмотрим небольшой пример:
Использование SQL-запросов позволяет создать эти запросы в процессе выполнения программы. Например,
пользователь сам вводит необходимый запрос и тут же его выполняет. Это реализуется при помощи метода
Assign. Рассмотрим небольшой пример:
Иногда при выполнении запроса не требуется возвращать весь набор данных, чтобы снизить нагрузку на сеть. Для этого следует выполнить запрос не открытием набора данных, а вызовом метода ExecSQL. В результате можно выполнить требуемые изменения набора данных, не передавая весь результат в вызывающее приложение. Для того чтобы данные полученные в результате запроса можно было редактировать, нужно свойству RequestLive указать значение True. Значение данного свойства по умолчанию установлено в False. Иногда в результате выполнения запроса, можно получить не редактируемый набор данных, например при выборке данных из разных БД. В данной ситуации установка свойства RequestLive в True будет проигнорировано. Для того чтобы проверить можно ли набор данных каким-либо образом редактировать можно воспользоваться свойством CanModify логического типа. Если данное свойство возвращает значение True, то набор данных можно редактировать, иначе набор данных не может быть изменен. Источник данных используется как промежуточное звено между наборами данных и визуальными компонентами, при помощи которых, пользователь управляет набором данных. В Delphi источник данных представляет компонент DataSource, который также является не визуальным.
Для указания набора данных служит свойство DataSet. Все визуальные компоненты связываются
с источником данных через свойство DataSource. Рассмотрим пример:
Для проверки состояния, в котором находится набор данных, нужно использовать свойство State.
При изменении режима набора данных для источника данных генерируется событие onStateChange.
Рассмотрим пример:
Не менее интересным свойством источника данных является свойство AutoEdit. Данное свойство определяет, может ли автоматически набор данных быть переведен в режим редактирования. Но установка данного свойства в значение True будет влиять только на возможность редактирования со стороны пользователя. Программно можно будет изменять все записи набора данных.
При изменении данных текущей записи возникает событие onUpdateData. Это событие также удобно
использовать для дополнительной проверки вводимых данных. |