Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Базы данных , BDE

Использование 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.

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

Программное приложение на языке Delphi использует БДЕ (Borland Database Engine) для подключения к базе данных Paradox и отображения данных в двух текстовых полях CountryEdit и CapitalEdit. В приложении есть три кнопки: PriorBtn, NextBtn и кнопка закрытия формы.

Описание кода:

  1. Определен класс TMainForm, который наследуется от TForm. Он содержит несколько приватных переменных, включая handle к базе данных (hDB), курсор (hCur) и другие переменные, связанные с обработкой данных.
  2. Определена процедура OnBDEError, которая отображает сообщение об ошибке, если возникает ошибка при доступе к базе данных.
  3. Процедура FormShow вызывается, когда форма отображается. Она инициализирует БДЕ, открывает базу данных "DBDEMOS" и таблицу "COUNTRY" в режиме чтения-записи.
  4. Процедура FormClose вызывается, когда форма закрывается. Она освобождает память, выделенную для буфера записи (RecBuf), закрывает курсор и базу данных.
  5. Процедура PriorBtnClick вызывается, когда кнопка "Назад" нажата. Она перемещает курсор к предыдущему записи, проверяет, находится ли она в начале файла, и обновляет текстовые поля с новыми значениями записи.
  6. Процедура NextBtnClick вызывается, когда кнопка "Вперед" нажата. Она перемещает курсор к следующей записи, проверяет, находится ли она в конце файла, и обновляет текстовые поля с новыми значениями записи.

Заметки о коде:

  • БДЕ инициализируется функцией DbiInit(nil), которая инициализирует БДЕ без указания имени базы данных.
  • Функция DbiOpenDatabase используется для открытия базы данных "DBDEMOS".
  • Функция DbiOpenTable используется для открытия таблицы "COUNTRY" в режиме чтения-записи.
  • Функция DbiGetCursorProps используется для получения свойств курсора, таких как размер буфера записи.
  • Функции DbiSetToBegin и DbiGetNextRecord используются для перемещения курсора к началу или следующей записи соответственно.
  • Функция DbiGetField используется для извлечения значения поля из текущей записи.

Программист использует API BDE для представления данных из базы данных DBDEMOS.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: BDE ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 14:19:41/0.014205932617188/1