Я использую компонент DAO Data для элементов управления связыванием данных в форме. Запрос, который я создаю динамически в наборе записей, который я привязываю к компоненту Data. Это работает очень хорошо. Однако, когда я запускаю Data.Refresh, а оператор SQL Where содержит ссылки на одну и ту же таблицу с помощью разных алиасов, тогда отображается ошибка.DAO Data bind Refresh() call - Ошибка времени выполнения 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 я получаю ошибка времени выполнения. Кроме того, 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
UPDATE: Если я задаю SQL-запрос как String для Data1.RecordSource, тогда обновление будет прекрасным. Однако, когда я присваиваю SQL-запрос набору записей, тогда recordset.Name содержит только часть SQL-запроса. После вызова Refresh() Data1.RecordSource совпадает с именем Data1.RecordSet.Name. Если компонент Data пытается создать запрос из сокращенного имени набора записей, то он, очевидно, не сработает.
Является ли это известным вопросом VB6 DAO Recordset?
Что произойдет, если вы измените двойные кавычки на одинарные кавычки? (вокруг обоих экземпляров «prog») –
Это не имело значения. Я боюсь, что это ошибка набора записей DAO. Я добавлю его в качестве ответа. –
Интересно. Спасибо за обновление. –