Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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;




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.031 c
6-80631           Delphimun             2002-01-07 11:39  2002.03.25  
Как отослать почту без использования VCL?


1-80557           Lion                  2002-03-09 23:49  2002.03.25  
StringGrid


6-80639           Red Alert             2002-01-10 15:34  2002.03.25  
Потоки данных..


3-80400           Igor_                 2002-02-26 10:53  2002.03.25  
QReport


14-80658          Елена                 2002-02-08 12:48  2002.03.25  
Не срабатывает таймер!!!