제가 사용하는 코드입니다.
델파이로 짜여 있습니다.
빌더로 컨버팅은 쉬울겁니다.
그럼 즐프하십시요.
function CError.CreateMDB(ADBName: String): Boolean;
type
TFunction = function(hwndParent: HWND; fRequest: WORD; lpszDriver: LPCSTR; lpszAttributes: LPCSTR): Boolean; stdcall;
var
mStr: String;
ErrorNo: Word;
Proc: TFarProc;
Func: TFunction;
DLLHandle: THandle;
Driver, Attribute : String;
begin
ErrorNo := 0;
mStr := 'C:\' + ExtractFileName(ADBName);
Driver := 'Microsoft Access Driver (*.mdb)';
Attribute := 'CREATE_DB=' + mStr + ' General';
CreateMDB := False;
DLLHandle := LoadLibrary('ODBCCP32.DLL');
if DLLHandle > 32 then
begin
Proc := GetProcAddress(DLLHandle, 'SQLConfigDataSource');
@Func := Proc;
if Proc <> nil then
begin
if not Func(Application.Handle, 1, LPCSTR(Driver), LPCSTR(Attribute)) then ErrorNo := 1; //'데이터베이스를 생성할 수 없습니다'
end else ErrorNo := 2; //'ODBCCP32.DLL에서 Function을 찾을 수 없습니다'
end else ErrorNo := 3; //'ODBCCP32.DLL을 찾을 수 없습니다'
FreeLibrary(DLLHandle);
if (ErrorNo = 0) and (FileExists(mStr)) then
begin
CopyFile(PChar(mStr), PChar(ADBName), False);
DeleteFile(mStr);
end;
if FileExists(ADBName) then CreateMDB := True;
end;
function CError.MakeTable(ADBName: String): Boolean;
var
TableName: String;
FieldName: array [0..11] of String;
i: Integer;
mStr: String;
IsTable: Boolean;
TableList: TStringList;
begin
TableName := 'ERROR_LOG';
FieldName[ 0] := 'ERROR_NO Int';
FieldName[ 1] := 'DESCRIPTION TEXT';
FieldName[ 2] := 'HAPPEN_TIME DATETIME DEFAULT NOW()';
FieldName[ 3] := 'FINISH_TIME DATETIME DEFAULT NOW()';
FieldName[ 4] := 'DOING_TIME TEXT';
FieldName[ 5] := 'RUN_STATUS Int';
FieldName[ 6] := 'MODE Int';
FieldName[ 7] := 'KIND Int';
FieldName[ 8] := 'RANK Int';
FieldName[ 9] := 'STEP Int';
FieldName[10] := 'HAPPEN_TIME_FLOAT Float';
FieldName[11] := 'FINISH_TIME_FLOAT Float';
with FADOConnection do begin
Close;
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + ADBName + ';Persist Security Info=False;' + 'Jet OLEDB:Database Password=' + '';
LoginPrompt := False;
Open;
end;
TableList := TStringList.Create;
FADOConnection.GetTableNames(TableList, True);
IsTable := False;
for i := 0 to TableList.Count - 1 do
begin
if TableList.Strings[i] = TableName then IsTable := True;
end;
TableList.Free;
FADOCommand.Connection := FADOConnection;
if IsTable then
begin
FADOCommand.CommandText := 'Drop Table ' + TableName;
FADOCommand.Execute;
end;
mStr := 'CREATE TABLE ' + TableName + ' (ID AUTOINCREMENT, ';
for i := 0 to 10 do mStr := mStr + FieldName[i] + ',';
mStr := mStr + 'PRIMARY KEY(ID))';
FADOCommand.CommandText := mStr;
FADOCommand.Execute;
FADOConnection.Close;
MakeTable := True;
end;
김문제 님이 쓰신 글 :
: 코드 상에서 MDB(Access File)를 어떻게 생성할까요 ?
:
: 기존에 있던 파일은 불러오고, 삭제는 쉬운데...
:
: 없던 파일을 생성시키는 것을 생각하고 있는데..
:
: 쉽지 않네요.. 혹시.. 기존 파일을 체크해서.. 없으면 해당 파일을 생성할 수 있는 코드 좀 부탁합니다.
|