Class内部にTableもつのなら、Open、Closeにして、メモリ解放できるようにしたほうがいい気がしてきた…。
そろそろマジメにインターフェイスを考えよう。
- Public Class SetDBtoTable
- '----------
- 'Variable
- '----------
- Private _Provider As String
- Private _DataSource As String
- Private _ConnectionString As String
- Private _UserID As String
- Private _Password As String
- Private _RecordCount As Long
- Private _ColumnCount As Long
- ' Private _DataTable[][] As String 'テーブルデータ格納場所
- '----------
- 'Property
- '----------
- Public Property Provider As String
- Get
- Return _Provider
- End Get
- Set(value As String)
- _Provider = value
- End Set
- End Property
- Public Property DataSource As String
- Get
- Return _DataSource
- End Get
- Set(value As String)
- _DataSource = value
- End Set
- End Property
- Public Property ConnectionString As String
- Get
- Return _ConnectionString
- End Get
- Set(value As String)
- _ConnectionString = value
- End Set
- End Property
- Public Property UserID As String
- Get
- Return _UserID
- End Get
- Set(value As String)
- _UserID = value
- End Set
- End Property
- Public Property Password As String
- Get
- Return _Password
- End Get
- Set(value As String)
- _Password = value
- End Set
- End Property
- Public ReadOnly Property RecordCount As Long
- Get
- Return _RecordCount
- End Get
- End Property
- Public ReadOnly Property ColumnCount As Long
- Get
- Return _ColumnCount
- End Get
- End Property
- '----------
- '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
- '_ConnectionStringが空か確認。空であればエラーを吐きFalseを返してMethod終了
- If _ConnectionString = Nothing Then
- Debug.Print("ERROR:" & TypeName(Me) & ":ConnectionString Property Not Assignment”)
- OnOK = False
- Return OnOK
- End If
- 'DataSourceが空か確認。空であればエラーを吐きFalseを返してMethod終了
- If _DataSource = vbNullString Then
- Debug.Print("ERROR:" & TypeName(Me) & ":DataSource Property Not Assignment”)
- OnOK = False
- Return OnOK
- End If
- 'DataSource設定(テーブ名やSQL。DELETEとか書かれても、rs.open()のときにReadOnlyで開くからはじけると思う
- cn.Properties("Data Source").Value = _DataSource
- 'ID/Passwd設定(試してない
- If _UserID <> Nothing Then
- cn.Properties("UserID").Value = _UserID
- End If
- If _Password <> Nothing Then
- cn.Properties("Password").Value = _Password
- End If
- Try
- cn.Open()
- rs.Open(_ConnectionString, cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockReadOnly)
- _RecordCount = rs.RecordCount
- _ColumnCount = rs.Fields.Count
- rs.Close()
- cn.Close()
- Catch ex As Exception
- 'Try中のエラーのとき
- Debug.Print("ERROR:" & TypeName(Me) & ":DB or RS Open failed”)
- OnOK = False
- End Try
- Return OnOK
- End Function
- End Class
<<前 次>>
0 件のコメント:
コメントを投稿