아래내용보다 좀더 자세한 소스는 푸르덴셜 업무 폴더를 찾아볼껏(혼자말)

데브피아 펌.

저는 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) 이런식으로 써서 했더니 죽어도 안되었지요 =_=

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

Leave a Reply

Your email address will not be published. Required fields are marked *