2014-04-27 57 views
0

這裏是我的數據表,tblTable,以逗號分隔的格式:錯誤3125當我運行SQL SELECT查詢來獲取具有「。」的行時。

Customer ID, Customer Name 
1, Company Inc. 

我的VB代碼:

Public Sub ViewCustomerByJob(varCustomerName As Variant) 
    Dim strSQL As String 
    strSQL = "SELECT * FROM tblCustomer " & _ 
      "WHERE CustomerName = '" & varCustomerName & "'" 

    Dim qd As DAO.QueryDef 

    Set qd = CurrentDb.CreateQueryDef(strSQL) 
    With qd 
     .ReturnsRecords = True 
     .SQL = strSQL 
    End With 

    DoCmd.OpenQuery (strSQL) 
End Sub 

每當varCustomerName等於 「公司公司」 的MS Access拋出一個錯誤3125:

SELECT * FROM tblCustomer WHERE CustomerName = 'Company Inc." is not a valid name.

這是第一句逐字。

如果我去tblCustomer並刪除「。」從「公司」,然後重新運行該代碼,它顯示該行:

Customer ID, Customer Name 
1, Company Inc 

如果沒有,則SQL查詢的工作,但隨着,它打破了「‘’。」爲什麼?

+0

我注意到你在「客戶名稱」列名的空間在你的表格佈局,但不是在你的SQL ...嘗試在SQL中的該字段名稱周圍添加方括號,如果真的存在,請添加空格。 –

+0

錯誤的屏幕截圖? – Yawar

+0

@TimWilliams剛剛嘗試過,但我仍然得到相同的錯誤。 –

回答

4

的問題是蒂姆·威廉姆斯說。建議:給你要創建一個名稱QueryDef對象,並通過該名稱爲DoCmd.OpenQuery方法:

Public Sub ViewCustomerByJob(varCustomerName As Variant) 
    dim qryName as string 
    Dim strSQL As String 
    Dim qd As DAO.QueryDef 

    qryName = "qryCustomersByJob" 
    strSQL = "SELECT * FROM tblCustomer " & _ 
      "WHERE CustomerName = '" & varCustomerName & "'" 

    on error resume next 
    currentdb.querydefs.delete qryName 
    Set qd = CurrentDb.CreateQueryDef(qryName, strSQL) 

    DoCmd.OpenQuery qryName 
End Sub 
+0

請注意,我個人更喜歡使用純SQL語句而不是使用Access對象模型。因此,而不是'QueryDefs.Delete qryName',我會使用'CurrentProject.Connection.Execute「刪除過程」&qryName',而不是'CurrentDb.CreateQueryDef(...)',我會使用'CurrentProject.Connection。執行「創建過程...」。 – Yawar

+1

是的@TimWilliams是對的。我檢查了這個答案,因爲它也有代碼。感謝你們倆。 –

0

請注意,我還沒有嘗試過。我相信,這將起作用。

Dim strSQL As String 
strSQL = "SELECT * FROM tblCustomer " & _ 
     "WHERE [Customer Name] = cName" 

Dim qd As DAO.QueryDef 
Dim rstTemp As Recordset 

Set qd = CurrentDb.CreateQueryDef(strSQL) 
With qd 
    .ReturnsRecords = True 
    .SQL = strSQL 
    .Parameters("cName") = varCustomerName 

    Set rstTemp = .OpenRecordset(dbOpenSnapshot) 
End With 

With rstTemp 
    ' Populate Recordset and print number of records. 
    .MoveLast 
    Debug.Print " Number of records = " & _ 
     .RecordCount 
    Debug.Print 
    .Close 
End With 

參考:http://www.access-programmers.co.uk/forums/showthread.php?t=236021
http://msdn.microsoft.com/en-us/library/office/ff845129%28v=office.15%29.aspx

3

CreateQueryDef預計兩個參數:一個名稱和查詢的SQL。

你傳入的SQL的名稱參數,因此錯誤「......是不是一個有效的名稱」