【问题标题】:ODBC Connection Dynamic From ClauseODBC 连接动态 From 子句
【发布时间】:2016-02-02 12:15:13
【问题描述】:
ODBC;DSN=Test;UID=;PWD=;SourceDB=\\server\folder\Test\prime.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;

然后是使用该连接的功能性静态查询。 prime.dbc 中有 5 个表。

Select field1, field2 field3
From Table1

现在基于下面的函数,我想将 funTestShipUic 提供给 FROM 子句而不是静态 Table1。

Public Function funTestShipUic() As String

   funTestShipUic = lngTestShipUic

End Function

我试过了……

Select field1, field2 field3
From funTestShipUic() 

但我得到 ODBC--调用失败。 ODBC Visual FoxPro 驱动程序下标引用无效。

【问题讨论】:

    标签: ms-access ms-access-2010 visual-foxpro pass-through


    【解决方案1】:

    很难理解你真正想要达到的目标。

    您可以使用字符串连接在 VBA 中构建动态 SQL,如下所示:

    strSql = "SELECT field1, field2 FROM " & myFunctionThatReturnsATableName()
    Set myRecordset = CurrentDb.OpenRecordset(strSql)
    

    您还可以将该 SQL 分配给现有查询,包括 PassThrough 查询。

    DB.QueryDefs("myQuery").SQL = strSql
    

    【讨论】:

    • 我明白你所说的一切。我已经在数据库的其他地方成功地使用了相同的方法,但仅限于 MS 表。问题似乎是通过 FoxPro ODBC 的直通查询。这整个过程是将数据从 FoxPro DB 导入到 Access DB。 FoxPro DB 中的“Test”文件夹可以有 5 个集合中的任何一个,因此将失败并显示静态表名称。我现在正在研究如何在 VBA 中进行 passthru。
    • @Kaw4Life:同样的方法。使用 ODBC 连接设置您的 PassThrough 查询,然后您可以在 VBA 中执行DB.QueryDefs("myPassThroughQuery").SQL = strSql。但是不能在 PassThrough 查询中使用函数,SQL 会按原样发送到 DB 服务器。
    • 我有一些工作。一旦完善/完成,我将发布给其他人使用,上帝禁止他们需要。
    【解决方案2】:

    首先,您不应将 ODBC 与 VFP 一起使用,除非您使用的是 VFP6 和更早版本或 ADS 服务器。相反,只需使用 OLEDB (VFPOLEDB)。然后您可以将函数的结果作为参数传递。即:

    Select field1, field2 field3 From (?)
    

    并将 funTestShipUic() 添加到参数集合中。如果您使用 ODBC,那么在直通查询中,它会是这样的:

    Select field1, field2 field3 From (?funTestShipUic())
    

    参数由驱动程序处理,SQL 不会按原样发送到服务器。

    【讨论】:

    • 感谢您的意见。我有一个考虑到给定环境的所有方面的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多