2015-10-27 3 views
1

Что не так в этом примере? Он разрывается там, где указано, даже когда указанное имя tbl является прекрасно работающей связанной таблицей.Ошибка при открытии qd.openrecordset

Sub showLinked(tbl As String) 
'tbl is the name of an existing local linked table (SQL Server)' 
    Dim db As DAO.Database, rs As DAO.Recordset 
    Dim qd As QueryDef 
    Set db = CurrentDb 

    With db.TableDefs(tbl) 
     Debug.Print .Name, .SourceTableName, .Connect 
     Set qd = db.CreateQueryDef("") 
     qd.Connect = .Connect 
     qd.SQL = "select 1 xxx from " & .SourceTableName 
     qd.ReturnsRecords = True 
     Set rs = qd.OpenRecordset()  'breaks here: error 3146 - "ODBC--call failed" 
     Debug.Print "test connection:", rs.Fields(0) 
    End With 
End Sub 
+0

Что выбирает 1 xxx из «& .SourceTableName»? Является ли это корректным оператором SELECT в SQL Server? – HansUp

+0

Да, неверный SQL. Попробуйте с помощью '' select top 1 * from "& .SourceTableName' – Gustav

+0

@HansUp: он возвращает набор записей с 1 полем с именем' xxx' со значением 1 - работает в SSMS. @Gustav: попробовал свое предложение, ту же ошибку. –

ответ

1

Найден виновник: Я тестировал свою функцию на таблицу доступа называется Data_Archive_Transaction и его является Data_Archive.Transaction (не мое имя, я обещаю).
С Transaction зарезервированное слово, в SELECT оно должно быть окружено скобками: Data_Archive.[Transaction].
Я пробовал с другим столом с более нормальным именем, и он работал нормально.

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