この記事では、ADO 接続オブジェクトと Recordset オブジェクトを開く方法について説明します。
元の製品バージョン: SQL Server
元の KB 番号: 168336
まとめ
ActiveX データ オブジェクト (ADO) には、Connection オブジェクトと Recordset オブジェクトの両方を開く方法がいくつか用意されています。 この記事では、オブジェクトごとにいくつかの一般的な手法のサンプル コードを示します。
詳細
ADO 内で Connection オブジェクトを開くには、いくつかの方法があります。
ConnectionStringプロパティを有効な接続文字列に設定し、Open()メソッドを呼び出します。 この接続文字列はプロバイダーに依存します。- 有効な接続文字列を
Open()メソッドの最初の引数に渡します。 - 有効な Command オブジェクトを Recordset の Open メソッドの最初の引数に渡します。
- ODBC データ ソース名と必要に応じてユーザー ID とパスワードを Connection オブジェクトの
Open()メソッドに渡します。
ADO 内で Recordset オブジェクトを開くには、次の 3 つの方法があります。
Connection.Execute()メソッドから Recordset を開く。Command.Execute()メソッドから Recordset を開く。- Connection オブジェクトまたは Command オブジェクトを指定せずに Recordset オブジェクトを開き、有効な Connect 文字列を
Recordset.Open()メソッドの 2 番目の引数に渡します。
このコードは、Nwind.mdbが Visual Basic と共にインストールされ、 C:\Program Files\DevStudio\VB directoryにあることを前提としています。
Option Explicit
Private Sub cmdOpen_Click()
Dim Conn1 As New adodb.Connection
Dim Cmd1 As New adodb.Command
Dim Errs1 As Errors
Dim Rs1 As New adodb.Recordset
Dim i As Integer
Dim AccessConnect As String
' Error Handling Variables
Dim errLoop As Error
Dim strTmp As String
AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
'---------------------------
' Connection Object Methods
'---------------------------
On Error GoTo AdoError ' Full Error Handling which traverses
' Connection object
' Connection Open method #1: Open via ConnectionString Property
Conn1.ConnectionString = AccessConnect
Conn1.Open
Conn1.Close
Conn1.ConnectionString = ""
' Connection Open method #2: Open("[ODBC Connect String]","","")
Conn1.Open AccessConnect
Conn1.Close
' Connection Open method #3: Open("DSN","Uid","Pwd")
Conn1.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
"DBQ=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
Conn1.Close
'--------------------------
' Recordset Object Methods
'--------------------------
' Don't assume that we have a connection object.
On Error GoTo AdoErrorLite
' Recordset Open Method #1: Open via Connection.Execute(...)
Conn1.Open AccessConnect
Set Rs1 = Conn1.Execute("SELECT * FROM Employees")
Rs1.Close
Conn1.Close
' Recordset Open Method #2: Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Set Rs1 = Cmd1.Execute
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Method #3: Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Rs1.Open Cmd1
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Method #4: Open w/o Connection & w/Connect String
Rs1.Open "SELECT * FROM Employees", AccessConnect, adOpenForwardOnly
Rs1.Close
Done:
Set Rs1 = Nothing
Set Cmd1 = Nothing
Set Conn1 = Nothing
Exit Sub
AdoError:
i = 1
On Error Resume Next
' Enumerate Errors collection and display properties of
' each Error object (if Errors Collection is filled out)
Set Errs1 = Conn1.Errors
For Each errLoop In Errs1
With errLoop
strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
strTmp = strTmp & vbCrLf & " ADO Error # " & .Number
strTmp = strTmp & vbCrLf & " Description " & .Description
strTmp = strTmp & vbCrLf & " Source " & .Source
i = i + 1
End With
Next
AdoErrorLite:
' Get VB Error Object's information
strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
strTmp = strTmp & vbCrLf & " Generated by " & Err.Source
strTmp = strTmp & vbCrLf & " Description " & Err.Description
MsgBox strTmp
' Clean up gracefully without risking infinite loop in error handler
On Error GoTo 0
GoTo Done
End Sub
エラーに関する注意事項
ADO Connection オブジェクトにのみエラー コレクションがあります。 監視リーダーは、 RecordSet.Open の例で軽量エラー ハンドラーが有効になっていることがわかります。 RecordSet オブジェクトを開くときにエラーが発生した場合、ADO は OLEDB プロバイダーから最も明示的なエラーを返す必要があります。 上記のコードで発生する可能性のある一般的なエラーの一部を次に示します。
接続文字列で DefaultDir パラメーターを省略した場合 (またはエラーが発生した場合)、次のエラーが表示されることがあります。
ADO エラー # -2147467259
説明 [Microsoft][ODBC Microsoft Access 97 ドライバー] '(不明)'
は有効なパスではありません。 パス名が
スペルが正しく、サーバーに接続されていること
ファイルが存在する場所。
ソース Microsoft OLE DB Provider for ODBC ドライバー
接続文字列の Dbq パラメーターにエラーがある場合は、次のエラーが発生する可能性があります。
ADO エラー # -2147467259説明 [Microsoft][ODBC Microsoft Access 97 ドライバー] ファイル '(不明)' が見つかりませんでした。
ソース Microsoft OLE DB Provider for ODBC ドライバー
上記のエラーでは、接続エラー コレクションにも次のエラーが設定されます。
ADO エラー # -2147467259
説明 [Microsoft][ODBC ドライバー マネージャー] ドライバー
SQLSetConnectAttr が失敗しました
ソース Microsoft OLE DB Provider for ODBC ドライバー
ADO エラー # -2147467259
説明 ログインに失敗しました
ソース Microsoft OLE DB Provider for ODBC ドライバー
Note
エラーごとに、ADO エラー番号は同じです。この場合、0x80004005に変換されます。これは一般的なE_FAILエラー メッセージです。 基になるコンポーネントには、発生した条件に対する特定のエラー番号はありませんでしたが、有用な情報が ADO に発生することはありませんでした。