Q&A

  • access db가 커지기만 해요.
안녕하세요.



제가 델파이로 ADO로 microsoft access db를 handling하는데..

레코드를 추가할때마다 db file의 사이즈가 커집니다.

그리고 나서 전체 레코드를 삭제하게 되면 db file의 사이즈가 작아지지 않아요.

혹시 ADO나 다른 방법으로라도 db file의 사이즈를 줄이는 방법이 있는지 알고 싶어요.

아무리 방법을 찾아봐도 해결되지 않아서 이렇게 글을 올립니다.



access에서는 데이타베이스 압축이라는 기능이 있는데... 이 기능하고 비슷한 기능입니다.

미리 감사드립니다.



from mando.



1  COMMENTS
  • Profile
    왕초보 2001.11.09 19:54
    타락님은 글을 우연히 보게 되어서 이렇게 글을 올립니다.



    도움이 되셨으면 좋겠습니다.



    //=============================================



    안녕하세여... 타락임다..^^



    혹 필요한 분을 위해서....



    파라독스는 게으른삭제(Lazy Delete)를 함다. 파라독스 테이블에서 어떤 레코드가 삭제되면



    그 레코드는 테이블에서 제거되나, 그 레코드가 있던 자리는 그대로 비어둡니다.



    즉, 테이블 파일의 중간에 구멍이 생깁니다. 그래서 레코드 수가 늘어나면 테이블 파일의



    사이즈는 증가하나, 레코드 수가 줄어두 테이블 파일의 사이즈가 감소하진 않습니다.



    파라독스 테이블의 패킹이란, 그러한 구멍들을 제거해서 테이블 파일의 크기를



    압축하는 작업을 말합니다..



    이 함수는, Paradox or dBase에서 정상적으로 작동합니다..



    ex> PackTable(Table1)



    uses DB, DBTables, BDE;



    // Pack a Paradox or dBASE table

    procedure PackTable(Table: TTable);

    var

    TblDesc: CRTblDesc;

    TempDBHandle: hDBIDb;

    WasActive: Boolean;

    Props: CURProps;

    begin

    Check(DbiGetCursorProps(Table.Handle, Props));



    FillChar(TblDesc, sizeof(TblDesc), 0);

    Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(TempDBHandle)));

    StrPCopy(TblDesc.szTblName, TableName);

    StrPCopy(TblDesc.szTblType, szPARADOX);

    TblDesc.bPack := True;

    Close;

    Check(DbiDoRestructure(TempDBHandle, 1, @TblDesc, nil, nil, nil, False));



    Open;

    end;