2018年4月24日火曜日

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

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

  1. Public Class SetDBtoTable
  2. '----------
  3. 'Variable
  4. '----------
  5. Private _Provider As String
  6. Private _DataSource As String
  7. Private _ConnectionString As String
  8. ’(PropertyのGet/Set省略)
  9. '----------
  10. 'Constructor
  11. '----------
  12. Public Sub New()
  13. Debug.Print("Constructor:" & TypeName(Me))
  14. _Provider = "Microsoft.Jet.OLEDB.4.0;"
  15. End Sub
  16. '----------
  17. 'Destructor
  18. '----------
  19. Private Sub Class_Terminate()
  20. Debug.Print("Destructor:" & TypeName(Me))
  21. End Sub
  22. '----------
  23. 'Method
  24. '----------
  25. Public Function GetTable() As Boolean
  26. Dim OnOK As Boolean = True
  27. Dim cn As ADODB.Connection
  28. Dim rs As ADODB.Recordset
  29. cn = New ADODB.Connection
  30. rs = New ADODB.Recordset
  31. cn.Provider = _Provider
  32. cn.Properties("Data Source").Value = _DataSource
  33. Try
  34. cn.Open()
  35. rs.Open(_ConnectionString, cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockReadOnly)
  36. Debug.Print("RecordCount:" & rs.RecordCount)
  37. Debug.Print("column:" & rs.Fields.Count)
  38. rs.Close()
  39. cn.Close()
  40. Catch ex As Exception
  41. OnOK = False
  42. End Try
  43. Return OnOK
  44. End Function
  45. End Class



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

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

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

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

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

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

<<前  次>>

0 件のコメント:

コメントを投稿