"Советы по Delphi. Версия 1.0.6" - читать интересную книгу автора (Озеров Валентин)

Сканирование версии структуры базы данных

Спасибо за идеи, высказанные в группах новостей и присланные по электронной почте. Я думаю, что нашел лучшее решение.

Очевидно, BDE содержит номер версии структуры, по крайней мере для файлов Paradox. (Я не могу поручиться за dBase и другие форматы.) Всякий раз при изменении структуры (например, в Database Desktop) BDE увеличивает номер версии. Следующий модуль содержит функцию, которая возвращает версию структуры базы данных:

(*****************************************************************************

* DbUtils.pas

*

* Утилита для работы с базами данных

*

* Создана 09/20/96

*****************************************************************************)

unit Dbutils;

(****************************************************************************)

(****************************************************************************)

interface

(****************************************************************************)

(****************************************************************************)

uses DbTables;

function DbGetVersion(table: TTable): LongInt;


(****************************************************************************)

(****************************************************************************)

implementation

(****************************************************************************)

(****************************************************************************)

uses Db, DbiProcs, DbiTypes, {DbiErrs,} SysUtils;

{---------------------------------------------------------------------------}

(*

* Цель:                    определение номера версии структуры таблицы

* Параметры:               table (I) – интересующая нас таблица

* Возвращаемая величина:   номер версии

* Исключительная ситуация: EDatabaseError

*)

function DbGetVersion(table: TTable): LongInt;

var

 hCursor   : hDBICur;

 tableDesc: TBLFullDesc;

 cName     : array[0..255] of char;

begin

 { копируем имя таблицы в строку 'с' }

 StrPCopy(cName, table.TableName);

 { просим BDE создать запись, содержащую информацию об определенной таблице }

 Check(DbiOpenTableList(table.DBHandle, True, False, cName, hCursor));

 { получаем запись, содержащую информацию о структуре }

 Check(DbiGetNextRecord(hCursor, dbiNOLOCK, @tableDesc, nil));

 { возвращаем поле записи, содержащее номер версии структуры нашей таблицы }

 Result:= tableDesc.tblExt.iRestrVersion;

 Check(DbiCloseCursor(hCursor));

end;


end.