MS アクセスはデータベースを視覚的に操作できるので大変便利です。 VB でデータベースのプログラムを作るとき、ツールとして MS アクセスを使いました。 しかしこれだけのために MS アクセスを購入するのはもったいないので、MS アクセスがない人は自分でデータベースプログラム作成のためのツールを作ります。
次のプログラムは MDB ファイルの中にどんなテーブルがあるか確認するためのものです。 プログラムを実行すると、データベースに定義されているテーブルが SQL で出力されます。
このプログラムは、主キー、外部キー、インデックスなどの情報は出力できません。 簡単な機能しかもっていないので、不足のときは自分で拡張して下さい。
Option Explicit
Private Const outputfile As String = "output.txt"
Private mdbfilepath As String
Private outputpath As String
Private db As Database
Private Sub cmdExit_Click()
End
End Sub
Private Sub cmdSQL_Click()
On Error GoTo cancelexit
With commdlg
.CancelError = True
.Filter = "データベース|*.mdb|"
.ShowOpen
mdbfilepath = .filename
End With
On Error GoTo errorhandle
Set db = DBEngine.Workspaces(0).OpenDatabase(mdbfilepath)
outputpath = App.Path & "\" & outputfile
listing
db.Close
cancelexit:
Exit Sub
errorhandle:
MsgBox Err.Description, vbExclamation, ""
End Sub
Private Sub listing()
Open App.Path & "\" & outputfile For Output As #1
Print #1, "-- source file '" & mdbfilepath & "'"
Dim td As TableDef
For Each td In db.TableDefs
If td.Attributes = 0 Then
mkCreateTable td
End If
Next td
Print #1, "-- end"
Close #1
End Sub
Private Sub mkCreateTable(td As TableDef)
Print #1, "--"
Print #1, "create table " & td.Name & " ("
mkColDefinition td.Fields(0)
Dim i As Integer, cnt As Integer
cnt = td.Fields.Count
For i = 1 To cnt - 1 Step 1
Print #1, ","
mkColDefinition td.Fields(i)
Next i
Print #1, ");"
End Sub
Private Sub mkColDefinition(fd As Field)
Print #1, vbTab & fd.Name;
Print #1, vbTab & dataType(fd);
If fd.Required Then
Print #1, vbTab & "not null";
End If
End Sub
Private Function dataType(fd As Field) As String
Select Case fd.Type
Case dbBoolean '論理型(Boolean)
dataType = "boolean"
Case dbDouble '倍精度浮動小数点(Double)
dataType = "double precision"
Case dbInteger '整数(Integer)
dataType = "integer"
Case dbLong '長整数型 (Long)
dataType = "integer"
Case dbSingle '単精度浮動小数点(Double)
dataType = "real"
Case dbText 'テキスト(Text)
dataType = "char(" & fd.Size & ")"
Case Else
dataType = "型取得不可"
End Select
End Function