2014-06-19 15 views
1

我期待執行以下代碼,問題是,我需要在SQL中放置一個字符串變量,該變量應該使用」 「簽署SQL語句裏面。如何在VBA中執行一條SQL語句,使用「sign獲取帶有RecordSet Access 2013的ID

的問題是,我不能使用多個‘’我試着用字符用符號」,並將其轉換爲字符串,這時候我迷路了。

下面的代碼顯示了2個函數。 1要查看是否正確打印正確的SQL語句,另一個是返回實際記錄ID的函數,然後我將使用該ID來添加新記錄。

我主要是希望做,是使用記錄獲得的一個記錄的記錄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 

回答

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 
+0

非常感謝你和Gord。太棒了。 – user3100044

相關問題