Советы по Delphi

         

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


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

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

Содержание раздела