Очевидно, 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. |