Соединение с источником данных
Все обращения из приложения к таблицам одной базы данных осуществляются через одно соединение, на которое замыкаются все компоненты доступа к данным, имеющие соответствующие значения свойства DatabaseName (см. ниже).
Все управление одиночным соединением с какой-либо базой данных в BDE осуществляется компонентом TDatabase (табл. 16.5). В процессе работы компонент активно использует параметры псевдонимов и драйверов BDE.
Таблица 16.5. Свойства и методы компонента TDatabase
Объявление |
Тип |
Описание |
Свойства |
||
property AliasName: string; |
Pb |
Задает имя псевдонима BDE используемой базы данных |
property Connected: Boolean; |
Pb |
Управляет включением соединения с базой данных |
property DatabaseName: string; |
Pb |
Определяет имя базы данных |
property DataSetCount: Integer; |
Ro |
Возвращает число открытых наборов данных, работающих через данное соединение |
property DataSets [Index: Integer]: TDBDataSet; |
Ro |
Индексированный список всех объектов открытых наборов данных этого соединения |
property Directory: string; |
Pu |
Определяет текущий каталог для баз данных Paradox и dBASE |
property DriverName: string; |
Pb |
Содержит имя драйвера базы данных |
property Exclusive: Boolean; |
Pb |
При значении True другие приложения не могут работать с базой данных одновременно с этим компонентом |
type HDBIDB: Longint; property Handle: HDBIDB; |
Pu |
Дескриптор BDE. Используется для прямых вызовов функций API BDE |
property HandleShared: Boolean;
|
Pu |
При значении True дескриптор BDE компонента доступен в компоненте TSession |
property InTransaction: Boolean |
Ro |
Показывает состояние транзакции. При значении True транзакция выполняется |
property IsSQLBased: Boolean; |
Ro |
При значении True соединение работает через драйвер SQL Links |
property KeepConnection: Boolean;
|
Pb |
При значении True соединение продолжает оставаться активным после закрытия всех наборов данных. При значении False после закрытия последнего набора данных соединение закрывается |
type TLocale: Pointer; property Locale: TLocale; |
Ro |
Указывает на языковый драйвер BDE, используемый при работе с базой данных |
property LoginPrompt: Boolean; |
Pb |
Управляет отображением стандартного диалога регистрации пользователя при подключении к серверу |
property Params: TStrings;
|
Pb |
Содержит список значений параметров псевдонима BDE, которые пользователь задает перед подключением к серверу |
property Session: TSession |
Ro |
Указывает на компонент TSession, который управляет работой данного компонента |
property SessionAlias: Boolean; |
Ro |
При значении True при подключении к БД используется псевдоним сессии |
property SessionName: string; |
Pb |
Содержит имя сеанса, который управляет работой компонента |
property Readonly: Boolean; |
Pb |
Управляет режимом доступа к данным "только для чтения" |
property Temporary: Boolean; |
Pu |
Значение True говорит о том, что экземпляр компонента создан во время выполнения |
type TTraceFlag = (tfQPrepare, tfQExecute, tfError, tfStmt, tf Connect, tfTransact, tfBlob, tfMisc, tfVendor, tfDataln, tfDataOut) ; TTraceFlags = set of TTraceFlag; property TraceFlags: TTraceFlags; |
Pu |
Определяет перечень операций, выполнение которых отображается в утилите SQL Monitor при выполнении приложения
|
type TTransIsolation = (tiDirtyRead, tiReadCommitted, tiRepeatableRead) ; property Translsolation: TTransIsolation; |
Pb |
! Определяет уровень изоляции транзакций:
|
Методы |
||
procedure ApplyUpdates (const DataSets: array of TDBDataSet); |
Pu
|
Фиксирует все изменения в наборах данных, работающих через это соединение, в базе данных |
procedure Close; |
Pu |
Закрывает все открытые наборы данных и соединение |
procedure CloseDatasets; |
Pu |
Закрывает все открытые наборы данных, работающие через это соединение |
procedure Commit; |
Pu |
Завершает выполнение текущей транзакции и фиксирует все изменения в базе данных |
function Execute (const SQL: string; Params : TParams = nil; Cache: Boolean = False; Cursor: phDBICur = nil) : Integer; |
Pu |
Выполняет запрос SQL без использования компонента TQuery. Текст запроса содержится в параметре SQL. Параметры запроса определяются параметром Params. Режим кэширования изменений включается параметром Cache. Параметр Cursor может использоваться при работе с функциями BDE, использующими курсор набора данных (см. гл. 14) |
procedure FlushSchemaCache (const TableName: string); |
Pu |
Изменяет представление о структуре таблиц БД, загруженной в память |
procedure Open; |
Pu |
Открывает соединение |
procedure Rollback; |
Pu |
Отменяет все операции текущей транзакции и завершает ее |
procedure StartTransaction; |
Pu |
Начинает выполнение транзакции |
procedure ValidateName (const Name: string) ; |
Pu |
Вызывает исключительную ситуацию, если база данных Name уже открыта в текущей сессии |
Методы-обработчики событий |
||
type TLoginEvent = procedure (Database: TDatabase; LoginParams: TStrings) of object; property OnLogin: TLoginEvent; |
Pb |
Вызывается при регистрации пользователя на сервере |
property AfterConnect: TNotifyEvent; |
Pb |
Вызывается после подключения |
property AfterDisconnect: TNotifyEvent; |
Pb |
Вызывается после отключения |
property BeforeConnect: TNotifyEvent; |
Pb |
Вызывается перед подключением |
property AfterDisconnect: TNotifyEvent; |
Pb |
Вызывается перед отключением |
Обычно компонент TDatabase размешается в модуле данных приложения.
Для определения базы данных (сервера), с которой приложение устанавливает соединение при помощи компонента TDatabase, чаще используется свойство AliasName. Свойства DatabaseName и DriverName предоставляют альтернативный способ создания соединения.
Если соединение задано свойством AliasName,то свойство DatabaseName
можно использовать для создания временного псевдонима, который будет доступен только для компонентов доступа к данным внутри приложения. При щелчке на кнопке списка доступных псевдонимов свойства DatabaseName в Инспекторе объектов для любого компонента доступа к данным в списке будет доступен и временный псевдоним компонента TDatabase.
Например, при переключении приложения на другую базу данных можно изменить только значение псевдонима в компоненте TDatabase. Если все компоненты наборов данных подключены к временному псевдониму компонента TDatabase, то они автоматически переключатся на новую БД.
Дополнительные возможности управления наборами данных при переключении соединения предоставляют свойства Connected и KeepConnection. Они позволяют одновременно с соединением закрыть все активные наборы данных.
Если наборы данных приложения подключены к базе данных через компонент TDatabase, то перед их открытием необходимо установить соединение с БД. Соединение с БД устанавливается при помощи метода open. Если попытаться активизировать набор данных без этого метода, то соединение будет установлено автоматически.
Аналогичная картина возникает при закрытии наборов данных и отключении от БД. Дополнительное средство управления в этом случае предоставляет свойство KeepConnection. Если оно равно значению True, то при закрытии последнего открытого набора данных соединение остается открытым. В противном случае соединение автоматически закрывается.
Это позволяет управлять соединением в различных исходных ситуациях. При большой загруженности сервера бывает необходимо прерывать соединение каждый раз. Если требуется разгрузить сетевой график, то соединение лучше оставлять включенным.
При подключении к базе данных довольно часто требуется задать значения для параметров драйвера BDE. Для этого используется свойство Params, представляющее собой обычный список. В нем необходимо задавать названия изменяемых параметров и их новые значения:
USERNAME=SYSDBA
PASSWORD=masterkey
Значения параметров можно задавать как статически, так и динамически во время выполнения.
Компонент TDatabase может облегчить подключение к базам данных с регистрацией пользователей. При регистрации на сервере достаточно задать имя пользователя, пароль в свойстве Params (см. выше) и установить для свойства LoginPrompt значение False. Эта комбинация работает как во время выполнения, так и во время разработки.
Примечание
Для организации доступа к защищенным паролем таблицам Paradox используется метод AddPassword компонента TSession (см. выше).
Дополнительные возможности обработки регистрации пользователя дает единственный метод-обработчик onLogin, программный код которого выполняется вместо появления стандартного диалога ввода имени и пароля. Это позволяет разработчику создавать собственные сценарии регистрации пользователей.
Для обеспечения доступа к функциям API BDE используется свойство Handle (BDE играет важную роль при создании соединения).
Управление выполнением транзакций осуществляется при помощи методов StartTransaction, Commit и RollBack.
Дело в том, что в его постановке и выводах произведена подмена, аналогичная подмене в школьной шуточной задачке на сообразительность, в которой спрашивается:
- Cколько яблок на березе, если на одной ветке их 5, на другой ветке - 10 и так далее
При этом внимание учеников намеренно отвлекается от того основополагающего факта, что на березе яблоки не растут, в принципе.
В эксперименте Майкельсона ставится вопрос о движении эфира относительно покоящегося в лабораторной системе интерферометра. Однако, если мы ищем эфир, как базовую материю, из которой состоит всё вещество интерферометра, лаборатории, да и Земли в целом, то, естественно, эфир тоже будет неподвижен, так как земное вещество есть всего навсего определенным образом структурированный эфир, и никак не может двигаться относительно самого себя.
Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в FAQ по эфирной физике.