집 >데이터 베이스 >MySQL 튜토리얼 >Microsoft Access 쿼리를 위해 VBA에서 매개 변수를 안전하게 사용하는 방법은 무엇입니까?
많은 Microsoft Access 개발자는 매개 변수를 올바르게 사용하는 방법에 대한 이해 부족으로 인해 취약한 코드에 의존합니다. 이 짧은 가이드는 이 주제에 대해 약간의 정보를 제공할 것입니다.
Access는 대부분의 경우 매개 변수 없이 SQL 코드에서 직접 폼과 보고서의 값을 참조할 수 있는 고유한 방법을 제공합니다.
<code>DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT " & _ "Forms!MyForm!MyTextbox" '插入单个值</code>
TempVars는 여러 쿼리의 값을 저장하고 재사용하는 방법을 제공합니다.
<code>TempVars!MyTempVar = Me.MyTextbox.Value DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT " & _ "Field1 FROM Table2 WHERE ID = TempVars!MyTempVar"</code>
UDF를 사용하여 값을 저장하고 검색할 수 있습니다.
<code>Option Compare Database Option Explicit Private ThisDate As Date Public Function GetThisDate() As Date If ThisDate = #12:00:00 AM# Then ' 设置默认值。 ThisDate = Date End If GetThisDate = ThisDate End Function Public Function SetThisDate(ByVal NewDate As Date) As Date ThisDate = NewDate SetThisDate = ThisDate End Function '设置值: SetThisDate SomeDate</code>
DoCmd.SetParameter를 사용하면 DoCmd.OpenForm, DoCmd.OpenReport 및 기타 DoCmd 문에 대한 매개 변수를 설정할 수 있습니다.
<code>DoCmd.SetParameter "MyParameter", Me.MyTextbox DoCmd.OpenForm "MyForm",,, "ID = MyParameter"</code>
DAO에서는 레코드세트를 열거나 쿼리를 실행하기 전에 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 '打开记录集,命名参数 Dim rs As DAO.Recordset With CurrentDb.CreateQueryDef("", "SELECT Field1 FROM Table2" & _ " WHERE Field1 = FirstParameter And Field2 = " & _ "SecondParameter") .Parameters!FirstParameter = Me.Field1 '感叹号表示法 .Parameters("SecondParameter").Value = Me.Field2 '更明确的表示法 Set rs = .OpenRecordset End With</code>
ADO에서는 ADODB.Command 개체를 사용하여 매개변수를 생성하고 이를 Command.Parameters 컬렉션에 연결할 수 있습니다.
<code>'执行查询,未命名参数 Dim cmd As ADODB.Command 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 '打开记录集,隐式参数 Dim rs As ADODB.Recordset Dim cmd As ADODB.Command Set cmd = New ADODB.Command With cmd Set .ActiveConnection = CurrentProject.Connection '使用与当前数据库的连接 .CommandText = "SELECT Field1 FROM Table2 WHERE " & _ "Field1 = @FirstParameter And Field2 = @SecondParameter" Set rs = .Execute(,Array(Me.Field1, Me.Field2)) End With</code>
이러한 방법을 따르면 개발자는 SQL 삽입 취약점을 제거하고 Access 애플리케이션의 보안을 향상할 수 있습니다.
위 내용은 Microsoft Access 쿼리를 위해 VBA에서 매개 변수를 안전하게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!