Перемещение таблиц

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Здесь я привожу примеры программ, которые я использую для копирования и удаления таблиц. Необходимые для работы модули: DB, DBTables, DbiProcs,DbiErrs, и DbiTypes. Вам всего лишь необходимо указать каталог расположения, исходное имя таблицы, каталог назначения и имя таблицы, куда будет скопирована исходная таблица и BDE скопирует таблицу целиком со всеми индексами. Процедура удаления в качестве входных параметров использует каталог расположения и имя таблицы, при этом BDE удаляет как саму таблицу, так и все файлы, связанные с ней (индексы и т.п.). Для тестирования данные процедуры были помещены в новое приложение и мне пришлось их немного отредактировать, чтобы удалить некоторые зависимости, которые были связаны с главной формой приложения. Теперь процедуры являются полностью автономными и могут быть помещены в отдельный модуль. (Не забудьте включить его в список используемых модулей). Пользуйтесь на здоровье!

procedure TConvertForm.CopyTable(FromDir, SrcTblName, ToDir, DestTblName:

string);

var

DBHandle: HDBIDB;

ResultCode: DBIResult;

Src, Dest, Err: array[0..255] of Char;

SrcTbl, DestTbl: TTable;

begin

SrcTbl := TTable.Create(Application);

DestTbl := TTable.Create(Application);

try

SrcTbl.DatabaseName := FromDir;

SrcTbl.TableName := SrcTblName;

SrcTbl.Open;

DBHandle := SrcTbl.DBHandle;

SrcTbl.Close;

ResultCode := DbiCopyTable(DBHandle, false,

StrPCopy(Src, FromDir ‘\’ SrcTblName), nil,

StrPCopy(Dest, ToDir ‘\’ DestTblName));

if (ResultCode DBIERR_NONE) then

begin

DbiGetErrorString(ResultCode, Err);

raise EDatabaseError.Create(‘При копировании ‘

FromDir ‘\’ SrcTblName ‘ в ‘

ToDir ‘\’ DestTblName ‘ ,’

‘BDE сгенерировал ошибку »’

StrPas(Err) »»);

end;

finally

SrcTbl.Free;

DestTbl.Free;

end;

end;

procedure TConvertForm.DeleteTable(Dir, TblName: string);

var

DBHandle: HDBIDB;

ResultCode: DBIResult;

tbl, Err: array[0..255] of Char;

SrcTbl, DestTbl: TTable;

SrcTbl := TTable.Create(Application);

begin

try

SrcTbl.DatabaseName := Dir;

SrcTbl.TableName := TblName;

SrcTbl.Open;

DBHandle := SrcTbl.DBHandle;

SrcTbl.Close;

ResultCode := DbiDeleteTable(DBHandle,

StrPCopy(Tbl, Dir ‘\’ TblName), nil);

if (ResultCode DBIERR_NONE) then

begin

DbiGetErrorString(ResultCode, Err);

raise EDatabaseError.Create(‘Удаляя ‘

Dir ‘\’ TblName ‘, BDE ‘

‘сгенерировал ошибку »’

StrPas(Err) »»);

end;

finally

SrcTbl.Free;

end;

end;

{/codecitation}

Добавить комментарий