CAFE

[6.0]Tip & Tech [인기]

[6.0]MDB 파일 생성 및 테이블 생성

작성자whitebono|작성시간08.08.20|조회수4,888 목록 댓글 2

저는 MDB를 사용할 경우엔 프로그램 배포의 편의를 위해 초기 기동시 MDB를 자동생성하게 만들어줍니다.

SQL문으로 CREATE TABLE할때 DEFAULT값 주는 방법을 의외로 찾기 어려워서 혹시 필요하신분이 계실까해서 올립니다.

ADOX관련은 아래에도 글이 있습니다만 그냥 샘플코드에 같이 넣었습니다.

코드 테스트를 위해 반드시 MDAC2.5이상 버전이 설치되어 있어야 합니다. (버전은 정확히 어디부터 지원되는지 모르겠습니다.)

또한 ADOX로 MDB를 생성할때 ACCESS가 필요없는걸로 아는데 정확하진 않습니다. ^^;

 

1. 새 프로젝트 -> Exe프로젝트

2. 프로젝트 -> 참조 -> Microsoft ActiveX Data Object 2.x Library

                                Microsoft ADO Ext. 2.x for DDL and Security 추가

3. Form1에 아래와 같이 코딩

 

 

'//------------------------------------------------------------------------//

Option Explicit

 

Private Sub Form_Load()

On Error Resume Next

Dim cat As ADOX.Catalog

Dim con As Connection

Dim rs As Recordset

Dim strCon As String, strQry As String

Dim i As Integer, tmp As String

 

    '// 접속문자열(여기서는 실행 위치 아래에 MDB를 생성합니다.)

    strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.path & "\tmp.mdb;user ID=admin;"

 

    '// ADOX를 이용하여 MDB생성

    Set cat = New ADOX.Catalog

        Call cat.Create(strCon)     '// 단순히 접속문자열로 Create()하면 끝;;

    Set cat = Nothing

 

    '// MDB에 접속

    Set con = New Connection

    

        Call con.Open(strCon)   '// 접속시도

        If con.State <> adStateOpen Then

            '// 접속에 실패!!

            MsgBox "접속실패!!"

        Else

            '// 성공하면 테이블 생성

            '// 아래와 같이 IDENTIFY 키워드로 자동증가 일련번호 필드를 만들 수 있고,

            '// DEFAULT 키워드로 기본값을 설정할 수 있습니다.

            '// 단, DEFAULT사용시 ()나 ''로 묶으면 에러가 나고 공백문자열은 """"로 넣어주면 됩니다.

            strQry = "CREATE TABLE [test] (" & _

            " [Idx] LONG IDENTITY PRIMARY KEY NOT NULL, " & _

            " [CurDate] DATETIME DEFAULT NOW() NOT NULL , " & _

            " [NumField] INTEGER DEFAULT 0 NOT NULL , " & _

            " [StrField] CHAR(32) NOT NULL DEFAULT """" )"

            

            Call con.Execute(strQry)

            

            '// 데이터 넣어봄

            strQry = "INSERT INTO [test](NumField, StrField) VALUES(0, 'first')"

            Call con.Execute(strQry)

            For i = 1 To 10

                strQry = "INSERT INTO [test](NumField, StrField) VALUES(" & CStr(i) & ", 'test" & CStr(i) & "')"

                Call con.Execute(strQry)

            Next

            

            '// 데이터를 디버깅창에 뿌려봄

            strQry = "SELECT * FROM [test]"

            Set rs = New Recordset

                Call rs.Open(strQry, con, adOpenForwardOnly, adLockReadOnly, adCmdText)

                Do While Not rs.EOF

                    For i = 0 To rs.Fields.Count - 1

                        tmp = tmp & rs(i).Name & ":" & rs(i) & " / "

                    Next

                    Debug.Print tmp

                    rs.MoveNext

                Loop

                Call rs.Close

            Set rs = Nothing

        End If

 

    Set con = Nothing

End Sub

'//------------------------------------------------------------------------//

 

MDB에 SQL로 많은 걸 할 수 있는데 다른 DB들이 쓰는 문법이랑 기본규칙이 미묘하게 달라서

간단한것도 못찾고 헤매는 경우가 많았습니다.

저 DEFAULT만 해도 처음엔 DEFAULT(0) 이런식으로 써서 했더니 죽어도 안되었지요 =_=

 

어쨌든 필요하신 분이 계셨으면 좋겠네요^-^

 

[출처 : Devpia VB 강좌란]

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자산이 | 작성시간 09.03.11 감사합니다.. ^^;
  • 작성자귀연곰 | 작성시간 09.10.21 감사합니다.. 도움 받았습니다.~ ㅎ
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼