マップの作成

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

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!