繁体   English   中英

如何在VBA中使用“符号执行SQL语句以通过RecordSet Access 2013获取ID

[英]How to execute an SQL statement in VBA using " sign to Get the ID with RecordSet Access 2013

我正在寻找执行以下代码的方法,问题是,我需要在SQL中放置一个String变量,该变量应在SQL语句中使用“”符号。

问题是,我不能使用多个“”。 我尝试使用Char来使用符号“并将其转换为String,这就是我迷路的时候。

下面的代码显示2个功能。 1要查看我是否正确打印了正确的SQL语句,另一个是返回实际记录ID的函数,然后将其用于添加新记录。

我主要要做的是使用RecordSet获得其中一条记录的记录ID。

任何帮助将不胜感激。

Private Sub PrintSQLStatement_Click()

Dim strSQL As String
Dim strTmp As String
Dim i As Integer

strTmp = "UE243"

strSQL = "SELECT tbl_Sales.[ID], tbl_Sales.[SaleReference] FROM tbl_Sales WHERE (((tbl_Sales.[SaleReference])= "" + strTmp + ""));"

i = MsgBox(strSQL, vbOKOnly)

End Sub





Private Function GetSaleID(ByVal strSaleRef As String) As Integer

Dim db As Database
Dim rs As Recordset
Dim strSQL As String
Dim ID As Integer

strSQL = "SELECT tbl_Sales.[ID], tbl_Sales.[SaleReference] FROM tbl_Sales WHERE    (((tbl_Sales.[SaleReference])= "" + strSaleRef + ""));"

Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)

ID = rs.GetID

rs.Close
Set rs = Nothing
db.Close

GetSaleID = ID

End Function

您可以通过使用QueryDef对象运行参数化查询来避免字符转义问题,如下所示:

Private Function GetSaleID(ByVal strSaleRef As String) As Long
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Dim ID As Long

    strSQL = _
            "PARAMETERS prmSaleRef TEXT(255);" & _
            "SELECT tbl_Sales.[ID] FROM tbl_Sales " & _
            "WHERE tbl_Sales.[SaleReference]=[prmSaleRef]"

    Set db = CurrentDb
    Set qd = db.CreateQueryDef("", strSQL)
    qd!prmSaleRef = strSaleRef
    Set rs = qd.OpenRecordset(dbOpenSnapshot)

    ID = rs!ID

    rs.Close
    Set rs = Nothing
    Set qd = Nothing
    db.Close
    Set db = Nothing

    GetSaleID = ID
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM