Компонент TODBCQuery

Вернуться к оглавлению

Невизуальный компонент, аналог TQuery и TADOQuery, но предназначен для работы с запросами к базам данных без использования посредников. Вся функциональность реализована через API-функции, начинающиеся с префикса sql (SQLConnect, SQLExecute и т.п.).

Компонент разрабатывался для Delphi 5, но работает так же и в Delphi 6, и должен работать в Delphi 7. В более поздних версиях Delphi и его клонов не тестировался.

Подробное описание

Основная цель разработки компонента TODBCQuery - это устранение излишних посредников при обращении к базе данных. Для работоспособности ПО в таком случае не требуется, чтобы был установлены ADO, требующий наличия в системе Internet Explorer 4. Впрочем, это возможно только в NT 4.
  
TODBCQuery TODBCDatabase

Компонент TODBCQuery.

В сравнении со своими аналогами, функциональность TODBCQuery несколько ограничена. Причина в том, что реализовывались только те средства, которые действительно были необходимы для конкретных проектов, в которых использовался компонент. Самыми главными недостатками могут показаться:

В то же, приятно может удивить наличие возможностей, не всегда доступных даже при использовании ADO-компонентов:

Свойства и методы времени исполнения компонента TODBCQuery (секция PUBLIC).

Имя свойства / декларация метода Тип Только чтение Описание
SQL TSQLStringList R Список строк, в которых сохраняется текст запроса.
procedure ExecSQL;     Выполняет запрос, не возвращающий результата.
procedure Open;     Выполняет запрос, возвращающий один или несколько наборов результатов (обычно, запрос, содержащий оператор SELECT).
procedure Close;     Закрывает запрос, удаляя результаты. До выполнения следующего запроса после Open, этот метод обязательно должен быть вызван.
FieldCount Integer R Возвращает число полей в текущем наборе результатов запроса.
FieldNames[ Idx: Integer ] String R Возвращает имена полей в текущем наборе результатов запросов по индексу от 0 до FieldCount-1.
FieldTypes[ Idx: Integer ] TFieldType R Возвращает типы полей в текущем наборе результатов по индексу от 0 до FieldCount-1.
FieldPrecision[ Idx: Integer ] Integer R Возвращает точность значения в поле по индексу поля (только для полей типа Numeric).
function FindFieldIndex( const S: String ): Integer;     Находит индекс поля по его имени, поиск регистро-независимый (т.е. буква A эквивалента a и т.п. в имени поля).
Eof Boolean R Возвращает TRUE, если достигнут конец данных (выполнен Next, когда текущая запись в наборе результатов была последней). В этом случае попытка доступа к полям будет вызывать ошибку, т.к. текущей записи под "головкой чтения" не существует.
Bof Boolean R Возвращает TRUE, когда "головка чтения" установлена на первую запись в наборе результатов.
procedure First;     Переводит позицию чтения на первую запись в наборе результатов. Этот вызов не требуется, если до сих пор чтение не производилось, т.е. сразу после Open. Возможно или невозможно использовать этот метод после того, как позиция чтения уже была передвинута, зависит от конкретного используемого драйвера ODBC, а не от компонента.
procedure Next;     Переходит к следующей записи в текущем наборе результатов.
procedure Prev;     Переходит к предыдущей записи в наборе результатов. Возможно или невозможно использовать этот метод после того, как позиция чтения уже была передвинута, зависит от конкретного используемого драйвера ODBC, а не от компонента.
procedure Last;     Переходит к последней записи в текущем наборе результатов.
function More: Boolean;     Переходит к следующему набору результатов. Наборов результатов может быть несколько, если в одном запросе, исполняемом методом Open, имелось несколько операторов SELECT. Возвращается FALSE, если больше результатов нет, и в этом случае дальнейшая работа с результатами будет вызывать ошибку, т.к. текущий результат отсутствует.
procedure Cancel;     Немедленно отменяет текущий исполняемый запрос.
SFieldN[ N: Integer ] String R Доступ к строковому значению поля в текущей записи текущего набора результатов по индексу поля.
SField[ const S: String ] String R Доступ к строковому значению поля в текущей записи текущего набора результатов по имени поля (регистро-независимое).
IFieldN[ N: Integer ] Integer R Доступ к целочисленному значению поля в текущей записи по индексу поля.
IField[ const S: String ] String R Доступ к строковом значению поля по имени поля.
FFieldN[ N: Integer ] Extended R Доступ к вещественному значению поля по индексу поля.
FField[ const S: String ] Extended R Доступ к вещественному значению поля по имени поля.
DFieldN[ N: Integer ] TDateTime R Эквивалентно FFieldN.
DField[ const S: String ] TDateTime R Эквивалентно FField.
NullFieldN[ N: Integer ] Boolean R Проверка значения поля на NULL. Вообще, при работе с TODBCQuery безопасно происходит обращение к полям, в которых база данных возвратила NULL. В случае числовых полей в этом случае будет получено значение 0, в случае строковых - пустая строка. Данное свойство необходимо на тот случай, чтобы обработать ситуацию в отдельной ветке.
NullField[ const S: String ] Boolean R Проверка значения поля (по имени поля) на NULL.






Компонент TODBCDatabase

Данный компонент предназначен для соединения с базой данных используя только API-интерфейс ODBC (функции, начинающиеся с SQL). Один из таких (или чаще - единственный) может быть присвоен глобальной переменной DefaultODBCDataSource, после чего при динамическом конструировании компонентов TODBCQuery может быть опущено явное присваивание значения свойству Connection.
 

Свойства и методы времени исполнения компонента TODBCDatabase (секция PUBLIC).

Имя свойства / декларация метода Тип Только чтение Описание
ConnectionString String R/W Строка параметров соединения. Описание конкретных параметров зависит от используемого провайдера ODBC.
EnvironmentHandle THandle R Дескриптор среды ODBC. Для внутреннего использования.
Connection THandle R Дескриптор соединения. Может использоваться для прямого обращения к функциям API без использования компонентов TODBCDatabase и TODBCQuery. Обычно в использовании необходимость не возникает.
Connected Boolean R Возвращает TRUE, если соединение прошло успешно. Обычно следует проверять после выполнения метода Connect или DSNConnect.
function Connect: Boolean;     Выполняет соединение с базой данных в соответствии с параметрами в ConnectionString.
function DSNConnect( const DSN, User, Pwd: String ): Boolean;     Выполняет соединение с базой данных используя DSN, где DSN - это имя соединения ODBC (data source name), которое прописывается в настройках ODBC соединений (Панель управления - Administrative tools - ODBC Data Sources - ...).
procedure Disconnect;     Закрывает соединение с базой данных.
procedure BeginTrans;     Начинает транзакцию. Типичное оформление запроса на выполнение связанных изменений в таблицах базах данных выглядит так:
DefaultODBCDataSource.BeginTrans;
try
    ... //
изменения
    DefaultOFDBCDataSource.CommitTrans;
except
    DefaultODBCDataSource.RollbackTrans;
    ... //
прочая обработка исключения
end;
procedure RollbackTrans;     Откатывает транзакцию.
procedure CommitTrans;     Завершает транзакцию.
Async Boolean R/W Соединение выполняется асинхронно. В этом случае после выдачи Connect или DSNConnect может быть организован цикл ожидания с регулярной проверкой свойства Connected, и с возможностью отменить попытку соединения по истечении заданного таймаута или по требованию пользователя.

 


(C) by Vladimir Kladov, 2000-2010