sql-server - 获取通过查询传递的连接字符串

  显示原文与译文双语对照的内容
0 0

我刚刚了解了 MS-ACCESS 中通过查询的内容。

我有一个 SQL SERVER 后端,如果我是对的,对于查询访问,在执行。子句之前加载所有记录。 那么,拥有 SQL SERVER 后端会有什么意义?

所以我想尽可以能多地尝试使用查询,但是有一种方法可以以从链接表中获取连接字符串。

我试过 CurrentDb.TableDefs("One of my table name").Connect 但是,在 ODBC Connect Str 属性中我得到了一个错误的连接字符串。

因为我知道我必须很快更改连接,所以不必在很多地方编辑连接字符串。

谢谢你。

时间:原作者:6个回答

0 0

我不确定你的意思是什么 "查询访问loads在执行where子句之前加载所有记录。"

如果可以以在服务器上应用 WHERE 子句,则ODBC将将它的转换为服务器语言,并且只将匹配行发送回访问:

WHERE date_field> = #2011-01-01# AND date_field <#2012-01-01#

WHERE 子句将限制发送到只有它的date_field 值为 2011的那些行的行。

但是,如果 WHERE 子句包含必须通过访问计算的函数,ODBC必须检索所有候选行并将它们交给访问数据库引擎,以便可以执行评估。

WHERE Format(date_field, 'yyyy') = '2011'

但对于你真正的问题。 用于传递查询的连接字符串。 请考虑下面的代码示例。 我有一个名为 dbo_foo的ODBC链接,SQL Server 中的源表为 [dbo].[foo] 。 可以从 dbo_foo 获取 .Connect 属性,并在基于相同服务器表的查询的.Connect 属性中使用它。

Public Sub CreatePassThruQuery()
 Dim db As DAO.Database
 Dim qdf As DAO.QueryDef
 Dim strConnect As String
 Set db = CurrentDb
 strConnect = db.TableDefs("dbo_foo").Connect
 Set qdf = db.CreateQueryDef("qryDbo_Foo")
 qdf.Connect = strConnect
 qdf.SQL ="SELECT * FROM [dbo].[foo];"
 qdf.Close
 Set qdf = Nothing
 Set db = Nothing
End Sub

在更改表的.Connect 属性时,还需要对查询进行操作。 如果你有很多和/或者经常更改连接,那么创建一个VBA过程来更新它们可能是值得的。 或者,可以为表的.Connect 属性和匹配查询使用 DSN 。 然后根据需要修改 DSN 。 这种方法的一个缺点是,如果其他人使用你的应用程序,你需要在多个机器上管理 dsn 。

原作者:
...