Использование API BDE для представления данных
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, BDE, ExtCtrls;
type
TMainForm = class (TForm)
PriorBtn: TBitBtn;
Panel2: TPanel;
NextBtn: TBitBtn;
Label3: TLabel;
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: dbiErrInfo; //Структура, содержащая информацию об ошибках
AStr: string ;
begin
DbiGetErrorInfo(True, ErrInfo); //Функция возвращает информацию об ошибке
case ErrInfo.iError of
9733: AStr := "Для создания записи недостаточно параметров ";
10024: AStr := "Ошибка доступа к данным";
10245: AStr := "База данных занята другим пользователем";
10038: AStr := "Значение поля задано неверно";
11871: AStr := "Несоответствие типов";
11959: AStr := "В выражении отсутствует оператор GROUP BY";
else
AStr := "Ошибочная операция с данными";
end ;
ShowMessage(AStr);
end ;
procedure TMainForm.FormShow(Sender: TObject);
begin
hDB := nil ;
hCur := nil ;
DbiInit(nil ); // Инициализация системы BDE
DbiOpenDatabase // Открытие базы данных
(
"DBDEMOS", // Псевдоним базы данных
nil , // Тип базы данных
dbiReadWrite, // Режим редактирования данных
dbiOpenShared, // Режим разделения данных
nil , // Пароль
0, // Число дополнительных параметров
nil , // Перечень полей для доп. параметров
nil , // Список доп. параметров
hDB // Дескриптор базы данных
);
DbiSetPrivateDir("c:\temp"); // Определение временного каталога
DbiOpenTable // Открытие таблицы
(
hDB, // Дескриптор базы данных
PChar("COUNTRY"), // Название таблицы
PChar(szParadox), // Тип таблицы (только для локальных БД)
nil , // Название индекса (необязательный)
nil , // IndexTagName - только для dBASE
0, // 0 - использовать первичный индекс
dbiReadWrite, // Режим редактирования данных
dbiOpenShared, // Режим разделения данных
xltField, // Режим трансляции данных
False, // Признак одностороннего перемещения курсора
nil , // Дополнительные параметры
hCur // Дескриптор курсора таблицы
);
DbiGetCursorProps // Определение параметров курсора
(
hCur, // Дескриптор курсора таблицы
CursProps // Структура параметров курсора
);
GetMem(RecBuf, CursProps.iRecbufSize * SizeOf(Byte)); // Выделение памяти под буфер записи
DbiSetToBegin(hCur); // Установка курсора в начало набора данных
DbiGetNextRecord // Перемещение на первую запись
(
hCur, // Дескриптор курсора таблицы
dbiNoLock, // Режим ограничения доступа
RecBuf, // Буфер записи
nil // Параметры записи
);
DbiGetField // Получение значения поля
(
hCur, // Дескриптор курсора таблицы
1, // Номер поля в структуре таблицы
RecBuf, // Буфер записи
@FValue, // Переменная, в кторую передается значение
IsEmpty // Признак пустой ячейки
);
MainForm.CountryEdit.Text := FValue;
DbiGetField(hCur, 2, RecBuf, @FValue, IsEmpty);
MainForm.CapitalEdit.Text := FValue;
end ;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
finally
FreeMem(RecBuf); // Освобождение памяти буфера записи
DbiCloseCursor(hCur); // Закрытие курсора
DbiCloseDatabase(hDB); // Закрытие базы данных
DbiExit; // Закрытие сеанса работы с BDE
end
end ;
procedure TMainForm.PriorBtnClick(Sender: TObject);
begin
try
if DbiGetPriorRecord(hCur, dbiNoLock, RecBuf, nil ) = DBIERR_BOF
then PriorBtn.Enabled := False
else
begin
if not NextBtn.Enabled then NextBtn.Enabled := True;
DbiGetField(hCur, 1, RecBuf, @FValue, IsEmpty);
MainForm.CountryEdit.Text := FValue;
DbiGetField(hCur, 2, RecBuf, @FValue, IsEmpty);
MainForm.CapitalEdit.Text := FValue;
end ;
except
OnBDEError;
end ;
end ;
procedure TMainForm.NextBtnClick(Sender: TObject);
begin
try
if DbiGetNextRecord(hCur, dbiNoLock, RecBuf, nil ) = DBIERR_EOF
then NextBtn.Enabled := False
else
begin
if not PriorBtn.Enabled then PriorBtn.Enabled := True;
DbiGetField(hCur, 1, RecBuf, @FValue, IsEmpty);
MainForm.CountryEdit.Text := FValue;
DbiGetField(hCur, 2, RecBuf, @FValue, IsEmpty);
MainForm.CapitalEdit.Text := FValue;
end ;
except
OnBDEError;
end ;
end ;
end .
Скачать весь проект
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Использование API BDE для представления данных", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:
Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи , в сообщение обязательно указывайте название или ссылку на статью!