Использование API BDE для представления данных

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

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.

Скачать весь проект

{/codecitation}

Добавить комментарий