C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[21385] Re:Re:ODBC로 연결된 MDB파일의 압축이나 복구방법 아시는 분 ^^;
경호 [ansoni19] 1144 읽음    2002-09-12 09:23
페페루님 안뇽 ^^

음 일단 아직 모두 해결은 못했구요 ㅠ.ㅠ
그래서 이런저런 방법을 찿고 있습니다. 음 그런데 DAO의 경우에는 제가 미리 말씀 드렸다시피 많은 한계성을 가지고 있어서 쓸수가 없더군요 compact나 repair등을 사용할수 있지만 DAO에서 사용하는 Engine은 한계가 너무 심해요 ^^;

일단 그래서 다르게 생각하고 있는것이 디비의 용량이 어느정도 커지면 클론을 만드는 형태인데
이것두 생각해야 할 문제가 많군요 ...
일단 해결하면 다시 알려 드릴께요 ^^:

그리구 timeout문제는 디스크의 가용공간에 따른 용적률 계산형태로 일단 해결했습니다.
즉 쿼리하는 시간의 간격이 동적으로 움직이게 했죠 ...

그리고 한번에 쿼리해서 처리하는 양또한 동적으로 처리를해서 일단 만족스러운 결과를
얻어냈습니다.

이제 남은 문제는 파일 크기인데 ...
좀더 고민해 보아야 겠습니다.

오프가 원래는 내일이었는데 월말로 밀려서 아쉽네요 ^^;
페페루님두 뵌지가 오래됐는데 쩝...

이번달 오프에는 뵐수 있을려나 히히
그럼 수고하시구요 혹시 그 페키지 찾으면 좀 보내주세요 ^^

김상구.패패루 님이 쓰신 글 :
: 일단, 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
: : 이 걸려서 블럭이 생기는 경우가 있는데 혹시 이런 경우를 당해 보신분 있나여 ^^:
: : 이에 대한 해결책을 아시는 분도 리플 달아 주세요 ...
: :
: :

+ -

관련 글 리스트
35225         Re:Re:ODBC로 연결된 MDB파일의 압축이나 복구방법 아시는 분 ^^; 유기형 1308 2004/05/27
21385         Re:Re:ODBC로 연결된 MDB파일의 압축이나 복구방법 아시는 분 ^^; 경호 1144 2002/09/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.