|
일단, MDB압축에 대한 코드는 저도 입수를 했는데, 제 컴에선 잘 안되더군요.
그래서 관련된 정보들을 추적하다가 MS측에서 답변한 것을 봤는데.. 오래되서
잘 기억은 안나지만, 요점은 '어쩔 수 없다' 였던걸로 기억합니다.
일단 한 번 시도해 보심이 좋을 것 같습니다.
bool __fastcall PackMDB(AnsiString &mdbFileName)
{
Variant db;
AnsiString tempFile;
try
{
Screen->Cursor = crSQLWait ;
db = Variant::CreateObject("DAO.DBEngine.30");
try
{
tempFile = ExtractFilePath(mdbFileName) + "\\msaTemp.mdb";
db.OleFunction("CompactDataBase", mdbFileName, tempFile);
DeleteFile(mdbFileName);
RenameFile (tempFile,mdbFileName);
}
catch(EOleException &e)
{
ShowMessage(e.Message);
return false;
}
}
__finally
{
db = Unassigned;
Screen->Cursor = crDefault ;
}
return true;
}
제 경우 에러가 나는 위치는
db = Variant::CreateObject("DAO.DBEngine.30");
여기입니다.
분명 다 설치되어 있고, 레지스트리에서도 확인할 수 있는데 클래스에 대한
허가가 없다는 아주 황당한 에러를 보여줍니다.
이 문제에 대한 MS의 답변은.. 어쩔 수 없으니까 자기네들이 만든 Pack 유틸
을 쓰라는.. 거였습니다. exe로 된 파일이더군요.
그 유틸은 저도 어디다 짱박아놨는지 잘 모르겠구요.. ^^;;
MDB는 ISAM을 쓰는 것으로 알고 있는데, 말씀하신 사이즈가 계속 커지는 문
제가 좀 고민스럽죠.. 차라리 Fox나 dBase에서 쓰던 dbf는.. INSERT할 때
Deleted된 레코드를 찾아서 그 위치에 엎어쓰고, Deleted마크를 풀어주면
크기 변화를 최소화 하면서 관리할 수 있는데 MDB에서는 그것도 잘 안되더라
구요.. 암튼, 혹시 저와 같은 문제를 접하셨다면, 그리고 해결하셨다면
제게도 좀 알려주시면 고맙겠습니다.
그리고.. ODBC timeout걸리는 문제는.. 2초씩 쿼리하는건 좀 심하지 않나요?
^^
아무리 polling시스템이라고 해도 2초는 좀 어렵던데..
저도 사이베이스랑 할 때 2초로 걸었다가 DB서버에 부하 엄청 걸리고 블러킹
되고 난리나서 30초로 조종했거든요. ^^
요즘엔 ODBC 안쓰고 ADO를 써서 작업하는데 제 경우엔 쓰레드로 작업한 후
쓰레드 종료시점에서 다시 타이머를 걸거나.. 비동기로 처리합니다.
어느 하나 명확한 답이 없네요.. 애구 쑥스러워랑.. ^^a
경호 님이 쓰신 글 :
: 음 간만에 질답란에 글을 쩝....
:
: ODBC로 Access의 MDB파일을 연결 했습니다.
: 음 그리고 데이터를 집어넣구 빼구 하다보면 실제 MDB안에 데이터는 하나두 없어두
: 파일의 크기는 처음크기로 복구되지 않고 있습니다.
:
: 일단 그건 물리적 레코드셋의 정보들을 기억하고 있어서 그런줄은 알고 있지만
: 파일의 레코드셋들을 재정렬해서 인덱스값들을 초기로 돌려놓기 위해 복구 또는 압축을 해야 하는데
: ODBC의 경우에 옵션안에는 복구모드가 있어서 할수 있지만 프로그램상에서는 방법을 못찿았습니다.
:
: 혹시 프로그램 상에서 MDB파일을 복구할수 있는 방법을 아시는 분은 좀 가르쳐주세요 ^^;
: DAO로 하는 경우야 알고 있기는 한데 DAO자체의 한계성 때문에 프로그램에서 쓰기는 힘들겠더군요
:
: 질문을 정리하자면 ODBC를 사용하여 MDB를 연결해서 사용할 경우 프로그램 상에서 MDB파일을
: 압축하거나 복구하는 방법은 무엇입니까 예요 ^^:
:
: 그리고 한가지 더 ^^;
:
: ODBC를 사용하는 경우 쿼리를 2초당 한번씩 할경우 어느 순간에 가서 ODBC에 넘겨진 쿼리가 timeout
: 이 걸려서 블럭이 생기는 경우가 있는데 혹시 이런 경우를 당해 보신분 있나여 ^^:
: 이에 대한 해결책을 아시는 분도 리플 달아 주세요 ...
:
:
|