Option Explicit
Private mCon As ADODB.Connection
Const ConSqlServer_Sedori = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=----------;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=HOME-PC;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=master"
' Connectionオブジェクトを生成
Private Sub Class_Initialize()
Set mCon = New ADODB.Connection
mCon.CursorLocation = adUseClient
mCon.Open ConSqlServer_Sedori
End Sub
' データベースへの接続を解除する
Private Sub Class_Terminate()
mCon.Close
Set mCon = Nothing
End Sub
' 引数のSQL文を実行し、ADODB.Recordsetを返す
Public Property Get Get_ADODBRec(ByVal strSQL As String) As ADODB.Recordset
Dim rs As New ADODB.Recordset
' タイムアウト設定 (20分)
mCon.CommandTimeout = 60 * 20
' 処理された行数を示すメッセージが結果セットの一部として返されないようにする
mCon.Execute ("SET NOCOUNT ON")
' 警告メッセージが結果セットの一部として返されないようにする
mCon.Execute ("SET ANSI_WARNINGS OFF")
' オーバーフローおよび0除算時にはNULLを返す
mCon.Execute ("SET ARITHABORT OFF")
rs.Open strSQL, mCon, adOpenStatic, adLockBatchOptimistic
Do
' レコードの操作ができるオブジェクト若しくは次のRecordSetがとれず、コネクションが空になった場合終了
If rs.State = adStateOpen Or rs.ActiveConnection Is Nothing Then
Exit Do
End If
Set rs = rs.NextRecordset()
Loop
Set Get_ADODBRec = rs
' 設定OFF
mCon.Execute ("SET NOCOUNT OFF")
mCon.Execute ("SET ANSI_WARNINGS ON")
mCon.Execute ("SET ARITHABORT ON")
End Property
' トランザクションを開始する
Public Sub BeginTransaction()
mCon.BeginTrans
End Sub
' トランザクションをコミットする
Public Sub CommitTransaction()
mCon.CommitTrans
End Sub
' トランザクションをロールバックする
Public Sub RollbackTransaction()
mCon.RollbackTrans
End Sub
Public Property Get Get_TableID() As ADODB.Recordset
Dim sql As String
sql = "select name FROM sys.tables order by name"
Set Get_TableID = Get_ADODBRec(sql)
End Property