Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
unitUnit1; 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: emp'); // Определение временного каталога 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
.