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
[64446] Re:코드 상에서 MDB(Access File)를 어떻게 생성할까요 ?
이길남.HoPe [miru0418] 1526 읽음    2011-05-25 17:31
제가 사용하는 코드입니다.

델파이로 짜여 있습니다.

빌더로 컨버팅은 쉬울겁니다.

그럼 즐프하십시요.


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)를 어떻게 생성할까요 ?
:
: 기존에 있던 파일은 불러오고, 삭제는 쉬운데...
:
: 없던 파일을 생성시키는 것을 생각하고 있는데..
:
: 쉽지 않네요.. 혹시.. 기존 파일을 체크해서.. 없으면 해당 파일을 생성할 수 있는 코드 좀 부탁합니다.

+ -

관련 글 리스트
64439 코드 상에서 MDB(Access File)를 어떻게 생성할까요 ? 김문제 1121 2011/05/25
64446     Re:코드 상에서 MDB(Access File)를 어떻게 생성할까요 ? 이길남.HoPe 1526 2011/05/25
64441     Re:코드 상에서 MDB(Access File)를 어떻게 생성할까요 ? 1146 2011/05/25
64447         Re:Re:코드 상에서 MDB(Access File)를 어떻게 생성할까요 ? 김문제 1281 2011/05/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.