2015-10-27 60 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

从“&.SourceTableName”中选择1 xxx会给你什么?这是SQL Server中有效的'SELECT'语句吗? – HansUp

+0

是的,无效的SQL。使用''从'&.SourceTableName'中选择顶部1 * * – Gustav

+0

@HansUp:它返回一个记录集,其中1个字段的值为1,它的值为1 - 在SSMS中工作。 @Gustav:试过你的建议,同样的错误。 –

回答

1

找到罪魁祸首:我在Access表中的测试我的函数调用Data_Archive_Transaction及其是Data_Archive.Transaction(不是我的名字,我保证)。
由于Transaction是保留字,因此在SELECT中必须用括号括起来:Data_Archive.[Transaction]
我试着用更正常的名称与另一个表,它工作正常。