2013-12-09 3 views
2

Я использую компонент 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?

+0

Что произойдет, если вы измените двойные кавычки на одинарные кавычки? (вокруг обоих экземпляров «prog») –

+0

Это не имело значения. Я боюсь, что это ошибка набора записей DAO. Я добавлю его в качестве ответа. –

+0

Интересно. Спасибо за обновление. –

ответ

1

Я не совсем уверен в этом, но я думаю, что это набор записей DAO и ошибка компонента данных.

Похоже, что набор записей использует SQL-запрос для создания его свойства имени, однако он сокращает короткий запрос. Компонент данных, похоже, использует этот запрос разреза, чтобы обновить свой внутренний набор записей.

Ошибка 1: свойство имени набора записей сокращает короткий запрос Ошибка 2: компонент данных, вероятно, использует свойство name набора записей для извлечения SQL-запроса из набора записей или использует другое свойство/функцию, которая также сокращает короткий запрос

Обходной путь или, возможно, правильный способ использования; не присваивайте SQL-запрос внутреннему набору записей, скорее используйте свойство источника записи данных данных

Смежные вопросы