Использование 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 и кнопка закрытия формы. Описание кода:
Заметки о коде:
Программист использует API BDE для представления данных из базы данных DBDEMOS. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |