Форум: "Базы";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
ВнизPackTable Найти похожие ветки
← →
Ольга (2002-02-26 15:28) [0]Прошу прощения, если мой вопрос покажется глупым, но с упаковкой таблиц столкнулась впервые.
Упаковываю таблицу:
Table1.Close;
Table1.Exclusive := True;
try
Check(DbiPackTable (Table1.DBHandle,Table1.Handle,PChar
(Table1.TableName),PChar(szDBASE),True));
except end;
Table1.Close;
Table1.Exclusive := False;
Table1.open;
И он выдает ошибку
Invalid handle to the function
← →
Ольга (2002-02-26 15:48) [1]Никто не знает?
← →
panov (2002-02-26 16:07) [2]загляни в FAQ
← →
deleon (2002-02-26 16:50) [3]procedure TForm1.FormCreate(Sender: TObject);
var
SaveActive: Boolean;
SaveExcl : Boolean;
begin
try
SaveExcl := Table1.Exclusive;
SaveActive := Table1.Active;
Table1.DisableControls;
Table1.Active := False;
Table1.Exclusive := True;
Table1.Active := True;
Check(DbiPackTable(Table1.DbHandle, Table1.Handle, PChar
(Table1.TableName), szDBASE, True));
finally
Table1.Active := False;
Table1.Exclusive := SaveExclusive;
Table1.Active := SaveActive;
Table1.EnableControls;
end;
end;
===================================================
Если нигде не ошибся - должно работать
===================================================
← →
Ольга (2002-02-26 16:54) [4]> deleon
Ругается, что Table is busy
← →
deleon (2002-02-26 17:13) [5]Ок, завтра напишу что как :-)
← →
kirill2000 (2002-02-27 02:27) [6]Сам столкнулся с большими проблемами при использовании метода PackTable и поэтому могу предложить следующее решение
batchmove1.Destination :=form1.Table4;
batchmove1.Mode :=batcopy;
batchmove1.Source :=form1.Table1;
batchmove1.Execute;
form1.Table1.Active :=false;
form1.Table1.Exclusive :=true;
form1.Table1.Active :=true;
form1.Table1.EmptyTable;
batchmove1.Destination :=form1.Table1;
batchmove1.Source :=form1.Table4;
batchmove1.Mode :=batappend;
batchmove1.Execute;
form1.Table1.Active :=false;
form1.Table1.Exclusive :=false;
form1.Table1.Active :=true;
form1.Table1.Active :=true;
Где Form1.Table1 таблица которую необходимо упаковать,а Form1.Table5 временная таблица.
← →
deleon (2002-02-27 08:43) [7]Как и обещал, привожу рабочий пример из нашего компонента TBdeTools (с)2002 Degisy Software:
function TBdeTools.PackTable(Table: TTable): DbiResult;
var
FCurProp : CurProps;
TblDesc : CRTblDesc;
hDb : hDbiDB;
TablePath : array[0..dbiMaxPathLen] of Char;
Exclusive : Boolean;
begin
Result := DBIERR_NONE;
if not Table.Active then
begin
Result := DBIERR_INVALIDTABLE;
Exit;
end;
Result := DbiGetCursorProps(Table.Handle, FCurProp);
if( Result = DBIERR_NONE )then
begin
if StrComp(FCurProp.szTableType, szParadox) = 0 then begin
hDb := nil;
FillChar(TblDesc, SizeOf(CRTblDesc), 0);
with TblDesc do begin
StrPCopy(szTblName, Table.TableName);
StrCopy(szTblType, FCurProp.szTableType);
bPack := True;
bProtected := FCurProp.bProtected;
end;
Result := DbiGetDirectory(Table.DBHandle, False, TablePath);
if( Result = DBIERR_NONE )then
begin
Table.Close;
try
Result := DbiOpenDatabase(nil, szCFGDBSTANDARD, dbiReadWrite, dbiOpenExcl, nil,
0, nil, nil, hDb);
if( Result = DBIERR_NONE )then
begin
Result := DbiSetDirectory(hDb, TablePath);
if( Result = DBIERR_NONE )then
begin
Result := DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False);
Check(DbiCloseDatabase(hDb));
end;
end;
finally
Table.Open;
end;
end;
end
else if StrComp(FCurProp.szTableType, szDBase) = 0 then begin
Exclusive := Table.Exclusive;
Table.Close;
try
Table.Exclusive := True;
Table.Open;
try
Result := DbiPackTable(Table.DBHandle, Table.Handle, nil, nil, True);
finally
Table.Close;
end;
finally
Table.Exclusive := Exclusive;
Table.Open;
end;
end
else Result := DBIERR_WRONGDRVTYPE;
end;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c