如何使用"在VBA中执行SQL语句使用RecordSet Access 2013获取ID

时间:2014-06-19 11:44:36

标签: sql vba ms-access access-vba

我期待执行以下代码,问题是,我需要在SQL中放置一个String变量,该变量应该使用""在SQL语句中签名。

问题是,我不能使用多个""。我尝试使用Char来使用标志"并将其转换为字符串,当我迷路时就是这样。

下面的代码显示了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

1 个答案:

答案 0 :(得分:0)

通过使用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