Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
ADO [17]
ASCII и CSV [12]
Access [20]
Alias [24]
BDE [37]
BLOB поля [19]
Clipper [2]
DB2 [2]
DBASE и DBF [26]
Fox Pro [1]
Interbase [21]
MSSQL [0]
ODBC [10]
Oracle [0]
Paradox [0]
SQL [29]
Sybase [1]
База данных [0]
Закладки [2]
Записи [0]
Индексы [10]
Компоненты и Базы данных [0]
Модуль данных [3]
Отчеты [2]
Ошибки БД [17]
Поиск [16]
Поля [0]
Сортировка и Фильтр [6]
Таблицы [0]

Наш опрос
Есть ли у Вас свой сайт?
Всего ответов: 48

Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0

Форма входа

Главная » Статьи » Базы данных » 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.
Категория: BDE | Добавил: Skinner (05.07.2008)
Просмотров: 346 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2024 Хостинг от uCoz