本文包含範例來說明參數如何呼叫 Microsoft Access 化 QueryDef 和傳回 ADO 資料錄集使用 Visual Basic 6.0 版。範例會指定文字和數字輸入的參數。
下列範例說明從 Microsoft 的 Access QueryDef,預期才能傳回資料錄集的一或多個資料列的參數傳回 ADO 資料錄集的方法。範例應用程式包含三個使用使用參數的 Microsoft Access QueryDefs 的程序。
第一個程序顯示第二個程序會顯示一個範例傳遞文字參數的傳遞數字參數的範例。前兩個程序將示範如何建立 ADO 參數集合,並定義有 ADO 資料錄集傳回的所有參數屬性。第三個程序將示範如何使用 ADO Parameters.Refresh 方法以傳回參數的屬性。
注意: 您必須取得並安裝本文中的 [Microsoft 資料存取元件 (MDAC) 範例的。
如果您要測試使用 Access 2000,您必須使用提供 Microsoft 資料存取元件 2.1 及更新版本的 Jet 引擎 4.0。您可以下載最新版本在下列 Microsoft 網站:
第一個需求是建立 Microsoft Access QueryDefs。本文假設讀者熟悉在 Microsoft Access 中建立新的 QueryDefs。下列 Visual Basic 程式碼範例 Nwind.mdb 隨附 Visual Basic 中預期兩個新 QueryDefs。建立新的 QueryDefs 具有下列內容:
Query Name Table Criteria On Field Datatype
------------------------------------------------------------
ProductsByID Products [ProductID] ProductID Integer
CustomerByID Customers [CustomerID] CustomerID Text
請確定您也參數名稱和資料型別在 Access 中選取來設定查詢,並選擇參數。
建立 Microsoft Access QueryDef 之後開啟新的 Visual Basic 專案。預設會建立 Form1。從 [專案] 功能表選擇 [參考],然後選取 [Microsoft ActiveX 資料物件程式庫]。
請依照下列步驟執行:
- 新增到新表單的三個命令按鈕,以這些設定值:
Button Name Caption
---------------------------------------------------------
Command1 cmdNumeric Numeric Parameter
Command2 cmdText Text Parameter
Command3 cmdParameters Determine Parameter Properties
- 下列程式碼貼到 Form1 的一般宣告區段:
Dim Conn As New ADODB.Connection
Dim Cmd As New ADODB.Command
Dim Cmd1 As New ADODB.Command
Dim Cmd2 As New ADODB.Command
Dim Rs As New ADODB.Recordset
Private Sub Form_Load()
Dim strConn As String
'Change the DSN to match your settings.
strConn = "DSN=dsnAccess;"
With Conn
.CursorLocation = adUseClient
.ConnectionString = strConn
.Open
End With
End Sub
Private Sub cmdNumeric_Click()
'Passes a Numeric parameter to a Microsoft Access 97 QueryDef
'that is based on the Products table. The parameter is on the
'ProductID field.
With Cmd
Set .ActiveConnection = Conn
.CommandText = "Productsbyid"
.CommandType = adCmdStoredProc
'ADO Numeric Datatypes are very particular
.Parameters.Append .CreateParameter("paramProdID", _
adSmallInt, _
adParamInput, _
2) 'Works without a Size
End With
Cmd.Parameters("paramProdID") = 3
'OR
'Cmd.Parameters(0) = 3
Rs.Open Cmd, , adOpenStatic, adLockReadOnly
Debug.Print Rs(0), Rs(1), Rs(2)
Rs.Close
End Sub
Private Sub cmdText_Click()
'Passes a Text parameter to a Microsoft Access 97 QueryDef that
'is based on the Customers table. The parameter is on the
'CustomerID field.
With Cmd1
Set .ActiveConnection = Conn
.CommandText = "Customerbyid"
.CommandType = adCmdStoredProc
'Can use either adVarChar or adChar dataType
.Parameters.Append .CreateParameter("paramCustID", _
adVarChar, _
adParamInput, _
5) 'needs Size to work
End With
Cmd1.Parameters("paramCustID") = "COMMI"
Rs.Open Cmd1, , adOpenStatic, adLockReadOnly
Debug.Print Rs(0), Rs(1), Rs(2)
Rs.Close
End Sub
Private Sub cmdParameters_Click()
'The purpose of this procedure is to determine the
'properties of a parameter.
'
With Cmd2
Set .ActiveConnection = Conn
.CommandText = "ProductsbyID"
.CommandType = adCmdStoredProc
End With
Cmd2.Parameters.Refresh
Debug.Print "The parameter properties for ProductsbyID are: " _
& vbCrLf _
& "Name: " & Cmd2.Parameters(0).Name & vbCrLf _
& "Type: " & Cmd2.Parameters(0).Type & vbCrLf _
& "Direction: " & Cmd2.Parameters(0).Direction & vbCrLf _
& "Size: " & Cmd2.Parameters(0).Size
Debug.Print "-------------"
With Cmd2
Set .ActiveConnection = Conn
.CommandText = "CustomerbyID"
.CommandType = adCmdStoredProc
End With
Cmd2.Parameters.Refresh
Debug.Print "The parameter properties for CustomerbyID are: " _
& vbCrLf _
& "Name: " & Cmd2.Parameters(0).Name & vbCrLf _
& "Type: " & Cmd2.Parameters(0).Type & vbCrLf _
& "Direction: " & Cmd2.Parameters(0).Direction & vbCrLf _
& "Size: " & Cmd2.Parameters(0).Size
End Sub
執行專案註明每按一下按鈕的結果。
您可能已經注意到要從 Microsoft Access QueryDef 取回資料錄集的另一個方法是使用 Parameter.Refresh 方法,而不是參數集合中定義參數屬性。這實際上適用雖然額外往返是伺服器的必要。 但,傳遞文字參數時則會發生錯誤因為文字參數的正確大小並不會叫用 (Invoke) Parameter.Refresh 方法來傳回。傳遞文字參數時,大小屬性是必要的。此一屬性可設定建立 ADO 資料錄集之前,若要避免此錯誤。
如需有關 MDAC 的詳細資訊,請參閱下列 Microsoft 網站:
文章編號: 181782 - 上次校閱: 2007年5月17日 - 版次: 2.5
這篇文章中的資訊適用於:
- Microsoft ActiveX Data Objects 1.5
- Microsoft ActiveX Data Objects 2.0
- Microsoft ActiveX Data Objects 2.1 Service Pack 2
- Microsoft ActiveX Data Objects 2.5
- Microsoft ActiveX Data Objects 2.6
| kbmt kbhowto kbjet KB181782 KbMtzh |
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:
181782
(http://support.microsoft.com/kb/181782/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。