6. Заполнение структуры cuRProps, содержащей данные о курсоре и наборе ДаННЬГХ (фуНКБИЯ DbiGetCursorProps).

7. Выделение памяти для буфера записи.

8. Навигация ПО набору данных (функции DbiSetToBegin, DbiSetToEnd, DbiSetToCursor И пр.)

9. Чтение необходимой записи (фуНКЦИИ DbiGetRelativeRecord, DbiGetNextRecord, DbiGetRecord, DbiGetPriorRecord И др.).

10. Чтение ИЛИ Обновление НеобхОДИМОГО ПОЛЯ (фуНКЦИИ DbiGetField,

DbiPutField).

11. Освобождение всех ресурсов (освобождение буфера записи, закрытие курсора, таблицы, BDE).

При использовании в программе функций из API BDE необходимо включить в секцию uses модуль BDE.

В прикладном программировании задачи, которые требовали бы выполнения всех описанных выше операций, практически не встречаются. Между тем, включение в программный код отдельных функций API BDE оправдано. В качестве примера рассмотрим приложение, которое позволяет очистить таблицу базы данных (рис. 16.4).

Дело в том, что при удалении записи из таблицы локальной СУБД (например Paradox) размер файла таблицы остается прежним, даже если удалить все записи. То есть на самом деле запись не удаляется, а только становится недоступной. При интенсивном использовании базы данных файлы таблиц могут занимать значительные объемы дискового пространства при довольно умеренном числе записей.

Программирование в Delphi 7

Рис. 16.4. Главная форма проекта BDEEmptyTable

Полная очистка таблиц базы данных осуществляется функцией DbiEmptyTable из API BDE. Именно она используется в демонстрационном приложении для радикального уменьшения размера таблиц.

(_Примечание_}

Функция DbiEmptyTabie используется в методе EmptyTable компонентов доступа кданным (см. гл. 17).

В листинге 16.1 приведен исходный код этого приложения. Помимо указанной функции, в нем используются функции создания списка параметров доступных баз данных и таблиц текущей базы данных.

| Листинг 16ЛШоделУглавной. формы приложения BDEEmptyTable Л'.'

unit Main; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, BDE, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables, Buttons;

type

TMainForm = class(TForm)

AliasesList: TComboBox;
TablesList: TComboBox;
EmptyBtn: TBitBtn;
Labell: TLabel;
Label2: TLabel;
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure AliasesListChange(Sender: TObject);

procedure EmptyBtnClick(Sender: TObject) ; private

hDB: hDBIDB;
hCursor: hDBICur;
DBDesc: DBDesc;

TblDesc : TBLBaseDesc; public

{ Public declarations } end;

var

MainForm: TMainForm; implementation {$R *.DFM}

procedure TMainForm.FormShow(Sender: TObject) ;
var Rslt: DBIResult;
begin
AliasesList.Items.Clear;
TablesList.Items.Clear;
hDB := Nil;

try

Dbilnit(Nil);
// Инициализация BDE DbiOpenDatabaseList(hCursor);

repeat

Rslt:= DbiGetNextRecord(hCursor, dbiNOLOCK, SDBDesc, nil); if (Rslt <> DBIERR_EOF) then AliasesList.Items.Add(StrPas(DBDesc.szName)); until (rslt 0 DBIERR_NONE) ; DbiCloseCursor(hCursor); except


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс