2018年4月25日水曜日

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

RecordCountとColumnCountをRead Only Propeatyとして参照できるようにしてみた。
Class内部にTableもつのなら、Open、Closeにして、メモリ解放できるようにしたほうがいい気がしてきた…。
そろそろマジメにインターフェイスを考えよう。

  1. Public Class SetDBtoTable
  2. '----------
  3. 'Variable
  4. '----------
  5. Private _Provider As String
  6. Private _DataSource As String
  7. Private _ConnectionString As String
  8. Private _UserID As String
  9. Private _Password As String
  10. Private _RecordCount As Long
  11. Private _ColumnCount As Long
  12. ' Private _DataTable[][] As String 'テーブルデータ格納場所
  13. '----------
  14. 'Property
  15. '----------
  16. Public Property Provider As String
  17. Get
  18. Return _Provider
  19. End Get
  20. Set(value As String)
  21. _Provider = value
  22. End Set
  23. End Property
  24. Public Property DataSource As String
  25. Get
  26. Return _DataSource
  27. End Get
  28. Set(value As String)
  29. _DataSource = value
  30. End Set
  31. End Property
  32. Public Property ConnectionString As String
  33. Get
  34. Return _ConnectionString
  35. End Get
  36. Set(value As String)
  37. _ConnectionString = value
  38. End Set
  39. End Property
  40. Public Property UserID As String
  41. Get
  42. Return _UserID
  43. End Get
  44. Set(value As String)
  45. _UserID = value
  46. End Set
  47. End Property
  48. Public Property Password As String
  49. Get
  50. Return _Password
  51. End Get
  52. Set(value As String)
  53. _Password = value
  54. End Set
  55. End Property
  56. Public ReadOnly Property RecordCount As Long
  57. Get
  58. Return _RecordCount
  59. End Get
  60. End Property
  61. Public ReadOnly Property ColumnCount As Long
  62. Get
  63. Return _ColumnCount
  64. End Get
  65. End Property
  66. '----------
  67. 'Constructor
  68. '----------
  69. Public Sub New()
  70. Debug.Print("Constructor:" & TypeName(Me))
  71. _Provider = "Microsoft.Jet.OLEDB.4.0;"
  72. End Sub
  73. '----------
  74. 'Destructor
  75. '----------
  76. Private Sub Class_Terminate()
  77. Debug.Print("Destructor:" & TypeName(Me))
  78. End Sub
  79. '----------
  80. 'Method
  81. '----------
  82. Public Function GetTable() As Boolean
  83. Dim OnOK As Boolean = True
  84. Dim cn As ADODB.Connection
  85. Dim rs As ADODB.Recordset
  86. cn = New ADODB.Connection
  87. rs = New ADODB.Recordset
  88. cn.Provider = _Provider
  89. '_ConnectionStringが空か確認。空であればエラーを吐きFalseを返してMethod終了
  90. If _ConnectionString = Nothing Then
  91. Debug.Print("ERROR:" & TypeName(Me) & ":ConnectionString Property Not Assignment”)
  92. OnOK = False
  93. Return OnOK
  94. End If
  95. 'DataSourceが空か確認。空であればエラーを吐きFalseを返してMethod終了
  96. If _DataSource = vbNullString Then
  97. Debug.Print("ERROR:" & TypeName(Me) & ":DataSource Property Not Assignment”)
  98. OnOK = False
  99. Return OnOK
  100. End If
  101. 'DataSource設定(テーブ名やSQL。DELETEとか書かれても、rs.open()のときにReadOnlyで開くからはじけると思う
  102. cn.Properties("Data Source").Value = _DataSource
  103. 'ID/Passwd設定(試してない
  104. If _UserID <> Nothing Then
  105. cn.Properties("UserID").Value = _UserID
  106. End If
  107. If _Password <> Nothing Then
  108. cn.Properties("Password").Value = _Password
  109. End If
  110. Try
  111. cn.Open()
  112. rs.Open(_ConnectionString, cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockReadOnly)
  113. _RecordCount = rs.RecordCount
  114. _ColumnCount = rs.Fields.Count
  115. rs.Close()
  116. cn.Close()
  117. Catch ex As Exception
  118. 'Try中のエラーのとき
  119. Debug.Print("ERROR:" & TypeName(Me) & ":DB or RS Open failed”)
  120. OnOK = False
  121. End Try
  122. Return OnOK
  123. End Function
  124. End Class



<<前  次>>




0 件のコメント:

コメントを投稿