Иллюстрированный самоучитель по Delphi 7 для профессионалов

Интерфейс прикладного программирования ВDЕ

При открытии главной формы (метод-обработчик FormShow) функция Dbiinit осуществляет инициализацию BDE. Затем функция DbiOpenDatabaseList создает в памяти временную таблицу, в которую записываются характеристики каждой зарегистрированной базы данных. Для этого применяется структура DBDesc. Курсор hcursor обеспечивает доступ к записям о базах данных.

После этого функция DbiGetNextRecord позволяет осуществить последовательное считывание имен псевдонимов баз данных (для этого в параметре передается указатель на структуру DBDesс) и их запись в список компонента AliasesList типа TComboBox.

При выборе из этого списка конкретного псевдонима работает метод-обработчик AliasesListchange. В нем открывается соответствующая база данных (функция DbiOpenDatabase), доступ к которой в дальнейшем осуществляется через дескриптор hDB.

Функция DbiopenTableList создает временную таблицу в памяти, в которую помещаются данные о таблицах выбранной базы данных в соответствии с форматом структуры TBLBaseDesс. Функция DbiGetNextRecord позволяет передать эту информацию в список компонента TablesList типа TCombоВох.

При щелчке на кнопке EmptyBtn в методе-обработчике EmptyBtndick работает функция DbiEmptyTabie, которая очищает выбранную ранее в компоненте TablesList таблицу.

Теперь рассмотрим пример простейшего приложения, которое может отображать два поля из таблицы COUNTRY. DВ в демонстрационной базе данных DBDEMOS. Эта база данных поставляется в комплекте Delphi. В примере использованы только функции API BDE.

Проект называется DirectBDE и имеет только одну форму, в которой отображаются сведения из таблицы COUNTRY. DB о государствах и их столицах (рис. 16.5). Кнопки в нижней части формы позволяют перемещаться по набору данных.

Листинг 16.2. Модуль главной формы приложения DirectBDE.

unit Unitl;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCTRLs, Buttons, BDE, ExtCTRLs;
type
TMainForm = class(TForm)
PriorBtn: TBitBtn;
Panel2: ТPanel;:
NextBtn: TBitBtn;
Label3: ТLabel;
CountryEdit: TEdit;
Label1: TLabel;
CapitalEdit: TEdit;
procedure PriorBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject};
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure NextBtnClick(Sender: TObject);
private
hDB: hDBIDB;
hCur: hDBICur;
CursProps: CurProps;
RecBuf: pByte;
FValue: array [0.. 255] of Char;
IsEmpty: Bool;
procedure OnBDEError;
public
end;
var
MainForm: TMainForm;
implementation ($R *.DFM}
procedure TMainForm.OnBDEError;
var ErrInfo: dbiErrlnfo; // Структура, содержащая информацию об ошибках
AStr: String;
begin
DbiGetErrorlnfo(True, Errlnfo);// Функция возвращает информацию об ошибке c
ase Errlnfo.iError of
9733: AStr: = 'Для создания записи недостаточно параметров';
10024: AStr: = 'Ошибка доступа к данным';
10245: AStr: = 'База данных занята другим пользователем';
10038: AStr: = 'Значение поля задано неверно';
11871: AStr: = 'Несоответствие типов';
11959: AStr: = 'В выражении отсутствует оператор GROUP BY';
else
AStr: = 'Ошибочная операция с данными';
end;
ShowMessage(AStr);
end;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.