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



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

  • Апрель
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31