Спасибо за идеи, высказанные в группах
новостей и присланные по электронной почте. Я думаю, что нашел лучшее решение.
Очевидно, 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.