Q&A

  • 쿼리로 MS ACCESS 디비를 만들고 싶습니다!
안녕하세요...

CREATE TABLE ~~  이것은 테이블을 생성하는 구문이잖아요..

근데 테이블을 생성하려고 하면 그 위에 데이터 베이스가 있어야 하는데....

   데이터 베이스
          ㅣ
        테이블
          ㅣ
   컬럼, 로우 등등...


쿼리로 MS ACCESS 디비를 만드는 법을 모르겠습니다..

ADO를 이용하라는 말씀이 많으신데.. 전 BDE를 사용했습니다...

데이터 베이스를 쿼리로 만드는 법을 몰라서 일단 손으로 .mdb를 만들었습니다.. 그리고 난 후에..

BDE Administrator 에서 ODBC  Administrator - 시스템 DSN에서

ODBC Microsoft Access를 추가했습니다. (Microsoft Access driver(*.mdb))

그 후에 Tdatabase, Tquery 컴포넌트를 내려놓고 경로를 맞춰주고..

procedure TForm1.Button1Click(Sender: TObject);  //테이블 만들기
begin
  try
    with Query1 do begin
      SQL.Clear;
      sql.add(' create table example_9(last_name text(20) ');
      sql.add(', first_name text(15) ');
      sql.add(', cry float ');
      sql.add(', intt int ');
      sql.add(', ddd datetime ');
      sql.add(', no bit');
      sql.add(', primary key(last_name) ) ');
      execSQL;
    end;
    showmessage('테이블 생성 완료!!');
  except
    Application.MessageBox('테이블 생성도중 Error 발생!!!','알림',mb_ok+mb_IconInformation);
    Query1.Close;
    Query1.Free;
    Exit;
  end;
end;


이렇게 테이블을 생성했습니다... 생성은 잘 됩니다...

mdb 데이터 베이스 생성하는 것을 검색해보니 있기는 한데 해보니..

procedure TForm1.Button2Click(Sender: TObject);    //데이터 베이스 만들기
begin
  if SQLConfigDataSource(Handle, 1, LPCSTR('Microsoft Access Driver (*.mdb)'), LPCSTR('CREATE_DB = D:\Bang\MDB디비만들기\ATest.mdb General')) then begin
       ShowMessage('MDB 파일을 성공적으로 만들었습니다.');
       exit;
   end else begin
       ShowMessage('MDB 파일을 생성하는데 실패했습니다.');
       exit;
   end;
end;


반응이 없습니다... 'MDB 파일을 생성하는 데 실패했습니다' 메세지가 뜹니다.. ㅠ

무슨 조건이 하나더 있는 건가요? 꼭 좀 부탁드리겠습니다...
1  COMMENTS
  • Profile
    nilriri™ 2006.05.25 00:31
    //   function SQLConfigDataSource(hwndParent : HWND; fRequest : WORD; lpszDriver : LPCSTR; lpszAttributes : LPCSTR) : Boolean; stdcall; external 'C:\WINDOWS\SYSTEM32\ODBCCP32.DLL';
       function SQLConfigDataSource(hwndParent : HWND; fRequest : WORD; lpszDriver : LPCSTR; lpszAttributes : LPCSTR) : Boolean; stdcall; external 'ODBCCP32.DLL';




    function Tdm.NewDBCreateofDAO(ADBPath:String):Boolean;
    var
      WorkSp, DBEngine : OLEvariant;
    begin
      //MDAC 2.7이 등록되어 있어야 한다.
      try
        Result := False;
        try
          //레지스트리에 등록되어 있는 엔진버젼.. 현재 MDAC 2.7 인스톨 테스트
          DBEngine := CreateOleObject(DAO_DB_ENGINE_VER);
         //DAO DBEngine의 작업공간
          WorkSp := DBEngine.WorkSpaces[0];

           if FileExists(pAnsiChar(ADBPath)) then
             DeleteFile(pAnsiChar(ADBPath));
           //Access 2000 type으로 생성
           try
             WorkSp.CreateDataBase(ADBPath, DB_LANG_KOREAN + DEFAULT_DB_PASSWORD,DB_VERSION40);
             Result := True;
           except
             on e : exception do
             begin
                Result := False;
                WriteLog('회원사 데이터 베이스 생성 실패 : Create Path is '+ ADBPath + e.Message);
             end;
           end;

        except
          MessageDlgTimer('MDAC 2.7이 설치 되어 있지않습니다.','회원사 DB 생성 에러');
        end;

      finally
        DBEngine := NULL;
        WorkSp := NULL;
      end;
    end;

    function Tdm.NewDBCreate(APath:String):Boolean;
    var
       ls_DBPath : String;
    begin
       try
          ls_DBPath := APath + DEFAULT_DBNAME;

          Result := SQLConfigDataSource(Application.Handle, 1,
                               LPCSTR(OLEDB_DRIVER_NAME),
                               LPCSTR('CREATE_DB=' + ls_DBPath + ' General'));
       except
          on e : exception do
          begin
             WriteLog('회원사 데이터 베이스 생성 실패후 재시도 : Error DBPath is '+ls_DBPath + e.Message);
             Result := dm.NewDBCreateOfDAO(ls_DBPath);
          end;
       end;
    end;



    리소스 자료실에 보시면 참고할만한 셈플 소스코드가 있습니다.

    수고하세요.