2018年4月24日火曜日

Accessアクセス from VB ~Class化してみるよ~(3)

とりあえず、ClassでDBにアクセス成功。

Public Class SetDBtoTable
    '----------
    'Variable
    '----------
    Private _Provider As String
    Private _DataSource As String
    Private _ConnectionString As String
’(PropertyのGet/Set省略)
    '----------
    'Constructor
    '----------
    Public Sub New()
        Debug.Print("Constructor:" & TypeName(Me))
        _Provider = "Microsoft.Jet.OLEDB.4.0;"
    End Sub
    '----------
    'Destructor
    '----------
    Private Sub Class_Terminate()
        Debug.Print("Destructor:" & TypeName(Me))
    End Sub
    '----------
    'Method
    '----------
    Public Function GetTable() As Boolean
        Dim OnOK As Boolean = True
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        cn = New ADODB.Connection
        rs = New ADODB.Recordset
        cn.Provider = _Provider
        cn.Properties("Data Source").Value = _DataSource
        Try
            cn.Open()
            rs.Open(_ConnectionString, cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockReadOnly)
            Debug.Print("RecordCount:" & rs.RecordCount)
            Debug.Print("column:" & rs.Fields.Count)
            rs.Close()
            cn.Close()
        Catch ex As Exception
            OnOK = False
        End Try
        Return OnOK
    End Function
End Class



呼び出し側
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim DataTable As SetDBtoTable
    DataTable = New SetDBtoTable
    DataTable.DataSource = "\\LANDISK1\share\Test.mdb"
    DataTable.ConnectionString = "T_Master"
    Debug.Print(DataTable.GetTable())
End Sub

無事、レコード件数とカラム数を取得できました。

でも、RecordCountが、読み込んだ数を返す~なんてコト書いてる人がいて、ちょっと不安。
VBAだけの話ならば良いのだけれど。一応MSDNではコレでOKぽい。

ちなみに内容を参照したければ、してみるよ~(2)のように、Untileループしてあげてください。

しかーし、必要なPropertyが設定されていないと実行時にエラーになる。あたり前だけど。
ソレを検知、表示するために、コンストラクタで、Property変数に””を入れて、
Methodで、if _Property <> "" とかで引っ掛けようとしたんだけど、どーもうまくいかない。
Propertyが空だったら~って判定は出来ないモノか。
サブルーチンにして、引数固定にすりゃ、コンパイルの時点で怒られるのに…

ちなみにコンストラクタ、デストラクタで、自分自身を表示…TypeName(Me)…しといた。
できれば実体の変数も表示させたいけど…わかんね( ゚-゚)~゚(ぉぃ

<<前  次>>

0 件のコメント:

コメントを投稿