
Давайте сейчас приведем примеры программ, которые с успехом используются для копирования и также удаления таблиц…
Для работы нам будут нужны следующие модули: DB, DbiProcs, DBTables, 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;
Все! Надеюсь, все понятно и доступно написано! Пользуйтесь на здоровье!
+2