저는 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 강좌란]