Использование 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.
|
Категория: BDE | Добавил: Skinner (05.07.2008)
|
Просмотров: 346
| Рейтинг: 0.0/0 |
|