Q&A

  • [참고] access db(mdb) 복구 및 압축방법...
개발이전에 사전 테스트용이므로...정리해서 보세요.



당연히 access 또는 msoffice를 설치핫고..

아니면 ms hompage에서 mdac_typ.exe(배포용)를 다운받아서 설치.<--ado

왠만하면 2.1(97용)이나 2.5버전(2000용)으로..

1. DAO를 이용해서...

uses절에 comobj를 추가하고.

procedure TForm1.Button1Click(Sender: TObject);

var

DAOEngine: Variant;

begin

DAOEngine := CreateOleObject( 'DAO.DBEngine.35' );

//여기서 레지스트리를 살펴보세요.

//이 클래스 문지열이 없으면 에러가 나지요..

//DAOEngine := CreateOleObject( 'DAO.DBEngine.30');



// ich denke die datenbank muss exclusive geoffnet werden



if FileExists( Edit2.Text) then

DeleteFile( Edit2.Text);

// if fileexists('d:daonorthwind.bak') then deletefile('d:daonorthwind.bak');



DAOEngine.CompactDatabase( FilenameEdit1.Text, Edit2.Text );

// RenameFile( 'd:daonorthwind.mdb', ChangeFileExt( 'd:daonorthwind.mdb', '.BAK') );

// RenameFile( 'tmp.$$$', 'd:daonorthwind.mdb');

//if fileexists('tmp.$$$') then deletefile('tmp.$$$');

//if fileexists('d:daonorthwind.bak') then deletefile('d:daonorthwind.bak');

ShowMessage('CompactDatabase 완료했습니다');

MessageBeep(0);



DAOEngine := unassigned;

end;



procedure TForm1.Button2Click(Sender: TObject);

var

DAOEngine: Variant;

begin

DAOEngine := CreateOleObject( 'DAO.DBEngine.35');

//여기서 레지스트리를 살펴보세요.

//이 클래스 문지열이 없으면 에러가 나지요..

//DAOEngine := CreateOleObject( 'DAO.DBEngine.30');

try

DAOEngine.RepairDataBase( Filenameedit1.Text );

ShowMessage('RepairDataBase 완료했습니다');

MessageBeep(0);

except

ShowMessage('RepairDataBase 실패했습니다');

MessageBeep(0);

end;



DAOEngine := unassigned;



end;



2.ado connection을 이용해서...

procedure TRepairDBForm.Button1Click(Sender: TObject);

var

ole:variant;

FromStream, ToStream: TFileStream;

BytesToCopy: LongInt;

Pos:Int64;

DBSource,DBTarget:String;

DataSource:string;

begin

ProgressBar1.Position := 0;

lblStep2.Caption := '진행율';



DBSource := GetCurrentDir+'RepairDB.$$$';

if FileExists(DBSource) then

DeleteFile(DBSource);



try

MainDMForm.adcnMain.Connected:=True;

DataSource:=RetString(MainDMForm.adcnMain.ConnectionString,'Data Source=',';Mode=');

if MainDMForm.adcnMain.Connected then

MainDMForm.adcnMain.Connected:=False;



ole:=CreateOleObject('jro.jetengine.2.5'); // <--mdac_typ 2.5

// 레지스트리에서 잘 찾아보시요..어떤버전이 설치
0  COMMENTS