이곳저것에서 돌아다니며 배운걸로 만들었거든여...
근데... 잘 안되네요...
폼실행은 되는데...
버튼을 누르면... 에러가 뜨거든여...
디비파일(물리)까지는 접근이 되는것 같은데...
프로세스 머라머라 에러나와여 --;(영어가 안되서리..)
유저명 나오고여
디비경로명 나오고여
그러면서 에러 나오네여
에러 메시지
Project Project2.exe raised exception class EDBEngineError with message 'Table is busy.
Table:CVIDIOSHOPVI.DB
User:kkk'.Process stopped, Use Step or Run to continue.
이런 에러 메시지 뜨거든여....
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables,bde, StdCtrls;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure ParadoxPack(Table : TTable);
var
TBDesc : CRTblDesc;
hDb: hDbiDb;
TablePath: array[0..dbiMaxPathLen] of char;
begin
FillChar(TBDesc,Sizeof(TBDesc),0);
with TBDesc do begin
StrPCopy(szTblName,Table.TableName);
StrPCopy(szTblType,szParadox);
bPack := True;
end;
Table.Open;
hDb := nil;
Check(DbiGetDirectory(Table.DBHandle, True, TablePath));
Table.Close;
Check(DbiOpenDatabase(nil, 'STANDARD', dbiReadWrite,
dbiOpenExcl,nil,0, nil, nil, hDb));
Check(DbiSetDirectory(hDb, TablePath));
Check(DBIDoRestructure(hDb,1,@TBDesc,nil,nil,nil,False));
Table.Open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//packtable(table1);
//DBIPackTable(Table1.DBHandle,Table1.Handle,nil,nil,True);
ParadoxPack(table1);
end;
end.
그리구여 팩킹하면 물리적으로 디비 파일 크기가 변한다고 알고 있는데여
정말 변하나여?
확장자가 db인 파일의 크기가 변하는거에여?
좋은 하루 되시고 답변 부탁드립니다.
해당 테이블이 열려 있다는 뜻입니다..
테이블명은 Table:CVIDIOSHOPVI.DB입니다..
해당 table의 내용을 닫은후 실행해 보시는게 어떨지..
그리고,
Pack하는것은 실제로 줄어들지 안 줄어들지 미지수입니다.
줄어드는 경우는 삭제된 내용이 이전에
있었을때에..
파라독스는 삭제한 data를 지우지 않고,
Marking만 해두는 방식을 취합니다..
따라서.. 아무리 삭제를 해도.. 사이즈는 줄지 않는다는 뜻이져..
그래서.. Pack이라는걸 해주는데..
삭제된.. 그러니까 Marking된 내용을 진짜로 지운다고나 할까여..
그래서, 사이즈가 준다는 뜻입니다...
이해가 되셨을런지..
만약 삭제된 내용이 없다면... 줄지 않겠쪄?
Pack도 되기는하지만..
에러가 간혹발생할때가 있는데..
그러면 복구가 되지 않습니다..
아주 조심하셔야 할듯..
만약.. Pack을 신용치 못하겠다면..
Temp Table을 만드시구여..
그곳에 모두 복사하구(Insert하구)..
Pack할 Table 지우고,
Pack할 Table 만들고, Temp Table에 있는
Data를 다시.. Pack할 Table에 밀어 넣으면 될겁니다..
확실한 방법이져..
약간의 코딩이 있겠지만..