Jul 28

Примеры копирования и удаления таблиц

Давайте сейчас приведем примеры программ, которые с успехом используются для копирования и также удаления таблиц…

Для работы нам будут нужны следующие модули: 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;

Все! Надеюсь, все понятно и доступно написано! Пользуйтесь на здоровье!




  1. радуга
     Add karma Subtract karma  +2
    Цитировать.

    Хм… даже такое бывает.

    1
  2. Рудавинa
     Add karma Subtract karma  +0
    Цитировать.

    Давно меня тут не было.

    2

Поделитесь вашими мыслями

Поддерживаемые теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>