Советы по Delphi

         

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


Здесь я привожу примеры программ, которые я использую для копирования и удаления таблиц. Необходимые для работы модули: 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);trySrcTbl.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) thenbeginDbiGetErrorString(ResultCode,Err);raise EDatabaseError.Create('При копировании ' +FromDir + '\' + SrcTblName + ' в ' +ToDir + '\' + DestTblName + ' ,'+ 'BDE сгенерировал ошибку '''+ StrPas(Err) + '''');end;finallySrcTbl.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);trySrcTbl.DatabaseName := Dir;SrcTbl.TableName := TblName;SrcTbl.Open;DBHandle := SrcTbl.DBHandle;SrcTbl.Close;ResultCode := DbiDeleteTable(DBHandle,StrPCopy(Tbl,Dir + '\' + TblName),nil);if (ResultCode <> DBIERR_NONE) thenbeginDbiGetErrorString(ResultCode,Err);raise EDatabaseError.Create('Удаляя ' +Dir + '\' + TblName + ', BDE ' +'сгенерировал ошибку '''+ StrPas(Err) + '''');end;finallySrcTbl.Free;end;end;
[000033]



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