我使用DAO數據組件來綁定表單上的控件元素。我在綁定到Data組件的記錄集中動態創建的查詢。這工作得很好。但是,當我運行Data.Refresh並且SQL Where語句包含通過不同別名對同一表的引用時,則顯示一個錯誤。DAO數據綁定刷新()調用 - 運行時錯誤3061,3075
注:以下運行良好的SQL查詢在MS Access查詢設計器
Global gDB As DataBase
Set Data1.Recordset = GetData(select, from, where, order)
Data1.Refresh
Public Function GetData(select As String, from As String, where As String, order As String) As Recordset
Dim sql As String
sql = "SELECT " & select & " FROM " & from & " WHERE " & where & " ORDER BY " & order
Set GetData = gDB.OpenRecordset(sql, dbOpenDynaset)
End Function
下面的工作:
SELECT
WIZ_APPL.*,
TRANS_PRI.Text AS LocalizedText
FROM
TRANSLATIONS AS TRANS_PRI,
WIZ
WHERE
TRANS_PRI.Tag="prog" & WIZ_APPL.Id AND
TRANS_PRI.LanguageId=1 AND
WIZ_APPL.Enabled <> 0
ORDER BY
WIZ_APPL.Id;
直到我試試這個:
SELECT
WIZ_APPL.*,
TRANS_PRI.Text AS LocalizedText,
TRANS_ALT.Text As AlternativeText
FROM
TRANSLATIONS AS TRANS_PRI,
TRANSLATIONS AS TRANS_ALT,
WIZ_APPL
WHERE
TRANS_PRI.tag="prog" & WIZ_APPL.Id AND
TRANS_ALT.tag="prog" & WIZ_APPL.Id AND
TRANS_PRI.LanguageId=1 AND
TRANS_ALT.LanguageId=2 AND
WIZ_APPL.Enabled <> 0
ORDER BY
WIZ_APPL.Id;
我得到運行時錯誤'3061': T很少有參數。預期1.
由於查詢略有不同,其中包括另一個表上的INNER JOIN,所以我得到運行時錯誤'3075': 查詢表達式'TRANS_PRI.tag ='prog'中的語法錯誤(缺少運算符) 。
SELECT
WIZ_APPL.*,
TRANS_PRI.Text AS LocalizedText,
TRANS_ALT.Text As AlternativeText
FROM
TRANSLATIONS AS TRANS_PRI,
TRANSLATIONS AS TRANS_ALT,
WIZ_APPL
INNER JOIN
WIZ_COUNTRY_APPL ON WIZ_APPL.Id = WIZ_COUNTRY_APPL.APPL
WHERE
TRANS_PRI.tag="prog" & WIZ_APPL.Id AND
TRANS_ALT.tag="prog" & WIZ_APPL.Id AND
TRANS_PRI.LanguageId=1 AND
TRANS_ALT.LanguageId=2 AND
WIZ_COUNTRY_APPL.Country=1
ORDER BY
WIZ_APPL.Id;
的bizar的事情是創造記錄是好的,我可以,只要我打電話Data1.Refresh我得到的打印數據。此外,窗體上的控件綁定和顯示數據。但是, ()可能會破壞記錄集(這可能是正常行爲)
Set Data1.Recordset = GetData(select, from, where, order)
Do While Not Data1.Recordset.EOF
Debug.Print Data1.Recordset!LocalizedText
Debug.Print Data1.Recordset!AlternativeText
Data1.Recordset.MoveNext
Loop
Data1.Refresh
更新:如果我將SQL查詢作爲字符串分配給Data1.RecordSource,則刷新工作正常。但是,當我將SQL查詢分配給記錄集時,recordset.Name僅包含SQL查詢的一部分。在Refresh()調用Data1.RecordSource與Data1.RecordSet.Name相同之後。如果Data組件嘗試從縮短的Recordset名稱構建查詢,那麼它顯然不起作用。
這是一個已知的VB6 DAO Recordset問題嗎?
如果將雙引號更改爲單引號,會發生什麼情況? (圍繞「prog」的兩個實例) –
它沒有區別。我擔心這是一個DAO記錄集錯誤。我將添加它作爲答案。 –
有趣。感謝更新。 –