Упаковка таблиц Paradox и dBase
Автор: Александр
WEB-сайт: http://delphibase.endimus.com
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Упаковка таблиц Paradox & dBase
Процедура упаковки таблиц Paradox & dBase.
В процедуру передается TTable c любым состоянием свойства Active.
Состояние Active после выполнения процедуры остается предыдущим.
Процедура предусматривает отключение всех визуальных DbControls,
с последующим их подключением.
Зависимости: Bde, Db, DbTables
Автор: Александр, dbwork@kor.kes.ru, Кореновск
Copyright: Из исходного кода Database Workshop 4.12 (c)2002 Degisy Software
Дата: 23 мая 2002 г.
***************************************************** }
procedure Bde_PackTable(DataSet: TDataSet);
var
hDb: hDBIDb;
Tbl: TTable;
Props: CURProps;
CrDesc: CRTblDesc;
Save: Boolean;
begin
if (DataSet is TTable) then
begin
Tbl := TTable(DataSet);
Save := Tbl.Active;
Tbl.Active := True;
try
Check(DbiGetCursorProps(Tbl.Handle, Props));
if (Props.szTableType = szPARADOX) then
begin
FillChar(CrDesc, SizeOf(CRTblDesc), 0);
StrCopy(CrDesc.szTblName, Props.szName);
StrCopy(CrDesc.szTblType, Props.szTableType);
CrDesc.bPack := True;
Check(DbiGetObjFromObj(hDBIObj(Tbl.Handle), objDATABASE, hDBIObj(hDb)));
Tbl.DisableControls;
Tbl.Active := False;
Check(DbiDoRestructure(hDb, 1, @CrDesc, nil, nil, nil, False));
end
else if (Props.szTableType = szDBASE) then
begin
Tbl.Active := True;
Check(DbiPackTable(Tbl.DBHandle, Tbl.Handle, nil, szDBASE, True));
end;
finally
Tbl.Active := Save;
Tbl.EnableControls;
end;
end;
end;
Пример использования:
Bde_PackTable(Table1);
|