在 Visual Basic for Applications (VBA) 中使用參數對於防止 SQL 注入和確保 Access 應用程式的資料完整性至關重要。本文提供瞭如何在各種上下文中有效地使用 VBA 參數的全面範例和指導,包括使用窗體和報表值、TempVars、自訂函數以及 DAO 和 ADO 物件。
Access 提供了一種便捷的方法,可以直接在 SQL 程式碼中存取窗體和報表上控制項的目前值,從而無需明確參數。引用控制項作為參數對於 DoCmd.RunSQL、窗體/報表記錄來源和篩選器以及網域聚合非常有用。
<code>DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT Forms!MyForm!MyTextbox" '插入单个值</code>
TempVars 是全域可存取的變量,可以在 VBA 或使用巨集中為其賦值。它們可以重複用於多個查詢,並且對於參數化窗體/報表非常有利,因為它們在來源物件關閉時會保留。
<code>TempVars!MyTempVar = Me.MyTextbox.Value DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT Field1 FROM Table2 WHERE ID = TempVars!MyTempVar"</code>
可以使用自訂函數和靜態變數來儲存和檢索參數值。這種方法提供了靈活性,並允許使用可選參數。
<code>Public Function GetThisDate() As Date If ThisDate = #12:00:00 AM# Then ' 设置默认值。 ThisDate = Date End If GetThisDate = ThisDate End Function</code>
DoCmd.SetParameter 允許參數化某些 DoCmd 操作,例如開啟表單和報表,但不適用於 DoCmd.RunSQL 或 DAO/ADO。
<code>DoCmd.SetParameter "MyParameter", Me.MyTextbox DoCmd.OpenForm "MyForm",,, "ID = MyParameter"</code>
DAO 提供了全面的參數處理功能。 QueryDef 物件用於建立參數化查詢,可以直接執行這些查詢或用於開啟記錄集。
<code>With CurrentDb.CreateQueryDef("", "INSERT INTO Table1(Field1) SELECT Field1 FROM Table2 WHERE Field1 = ?p1 And Field2 = ?p2") .Parameters(0) = Me.Field1 .Parameters(1) = Me.Field2 .Execute End With</code>
ADO 透過 Command 物件提供參數處理。可以在查詢執行期間明確建立參數或將其作為數組傳遞。
<code>Set cmd = New ADODB.Command With cmd Set .ActiveConnection = CurrentProject.Connection '使用与当前数据库的连接 .CommandText = "INSERT INTO Table1(Field1) SELECT Field1 FROM Table2 WHERE Field1 = ? And Field2 = ?" .Parameters.Append .CreateParameter(, adVarWChar, adParamInput, Len(Me.Field1), Me.Field1) 'adVarWChar 用于可能包含 Unicode 的文本框 .Parameters.Append .CreateParameter(, adInteger, adParamInput, 8, Me.Field2) 'adInteger 用于整数(长整数或整数) .Execute End With</code>
透過在 VBA 中採用參數化技術,Access 開發人員可以顯著增強其應用程式的安全性和健全性。
以上是如何在 Microsoft Access 應用程式的 VBA 中有效使用參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!