我剛剛在 stackoverflow 中找到了復制粘貼的解決方案,做了一些調整以根據我的需要采用它,并且......它不起作用:| 這是代碼:
Public Function getAssortmentTypes(Optional personId As Variant) As DAO.Recordset 'personId is integer
Dim strQuery As String
Dim qdf As DAO.QueryDef
Dim rst As DAO.Recordset
If IsMissing(personId) Then
strQuery = "SELECT assortment_type.type_id, assortment_type.type_name AS qryTest FROM assortment_type"
Else
strQuery = "SELECT * FROM get_non_deleted_assortment_types_by_user(" & personId & ")"
End If
Set qdf = CurrentDb.CreateQueryDef("")
With qdf
.SQL = strQuery
.Connect = getDBConnectionString
.ReturnsRecords = True
End With
Set rst = qdf.OpenRecordset
Debug.Print rst!qryTest
Set getAssortmentTypes = rst
End Function
在我的 postgresql 資料庫中,我確實有作業功能和適當的表。我已經使用 DBEaver 測驗了 sql 查詢并且它們有效。當我呼叫沒有引數的函式時,我只收到一行(應該是大約 30)。使用引數我期望過濾結果集但收到“錯誤 3131 來自子句中的語法錯誤”。有人可以幫我嗎?泰
uj5u.com熱心網友回復:
始終在設定 SQL之前設定連接字串。
當您設定 SQL 時,DAO 不知道這將成為一個傳遞查詢,因此它嘗試將其決議為 Access SQL,但顯然失敗了,因為它不是有效的 Access SQL。
只需更改順序:
With qdf
.Connect = getDBConnectionString
.ReturnsRecords = True
.SQL = strQuery
End With
請注意,您應該
因此,就像鏈接表一樣 - 將連接字串放在該 PT 查詢中。
不要在代碼中放置或嘗試放置連接字串。因此,您的重新鏈接例程還可以包括重新鏈接 PT 查詢。
您現在可以使用此代碼:
Public Function getAssortmentTypes(Optional personId As Variant) As DAO.Recordset 'personId is integer
Dim rst As DAO.Recordset
Dim strQuery As String
If IsMissing(personId) Then
strQuery = "SELECT assortment_type.type_id, assortment_type.type_name AS qryTest FROM assortment_type"
Else
strQuery = "SELECT * FROM get_non_deleted_assortment_types_by_user(" & personId & ")"
End If
With CurrentDb.QueryDefs("qryPT")
.SQL = strQuery
Set rst = .OpenRecordset
End With
Debug.Print rst!qryTest
Set getAssortmentTypes = rst
End Function
因此,創建一個名為(對于本示例)qryPT 的 PT 查詢
uj5u.com熱心網友回復:
嘗試省略“DAO”。Recordset 和維度陳述句中的前綴。更高版本的 Access 了解您想要什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/392498.html
