>데이터 베이스 >MySQL 튜토리얼 >Microsoft Access 쿼리를 위해 VBA에서 매개 변수를 안전하게 사용하는 방법은 무엇입니까?

Microsoft Access 쿼리를 위해 VBA에서 매개 변수를 안전하게 사용하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-23 08:21:09563검색

How to Securely Use Parameters in VBA for Microsoft Access Queries?

Microsoft Access의 다양한 상황에서 VBA 매개변수 사용

많은 Microsoft Access 개발자는 매개 변수를 올바르게 사용하는 방법에 대한 이해 부족으로 인해 취약한 코드에 의존합니다. 이 짧은 가이드는 이 주제에 대해 약간의 정보를 제공할 것입니다.

양식 및 보고서

Access는 대부분의 경우 매개 변수 없이 SQL 코드에서 직접 폼과 보고서의 값을 참조할 수 있는 고유한 방법을 제공합니다.

<code>DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT " & _
    "Forms!MyForm!MyTextbox" '插入单个值</code>

TempVar

TempVars는 여러 쿼리의 값을 저장하고 재사용하는 방법을 제공합니다.

<code>TempVars!MyTempVar = Me.MyTextbox.Value
DoCmd.RunSQL "INSERT INTO Table1(Field1) SELECT " & _
    "Field1 FROM Table2 WHERE ID = TempVars!MyTempVar"</code>

사용자 정의 함수(UDF)

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.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.