到 SQL Server 的 MS Access 通用直通查询

Posted

技术标签:

【中文标题】到 SQL Server 的 MS Access 通用直通查询【英文标题】:MS Access Generic Pass-Through Query to SQL Server 【发布时间】:2017-07-25 22:35:11 【问题描述】:

我在 MS Access 中成功设置了传递查询。从某种意义上说,它是通用的,我可以通过 DAO.QueryDef ".SQL" 属性动态设置 SQL。

问题是,我似乎无法即时设置“.ReturnsRecords”属性。查询的属性表中的任何内容似乎都卡在那里。

一个例子可能会有所帮助:

Dim qdef As DAO.QueryDef 
Set qdef = CurrentDb.QueryDefs(gPassThru)
qdef.ReturnsRecords = False  ' or True
qdef.SQL = "exec dbo.sp_whatever"

重申一下,

    qdef.SQL 替换传递查询中的任何 SQL

    qdef.ReturnsRecords 不替换传递的属性表定义

有什么方法可以使查询完全通用,还是我需要根据是否返回记录创建单独的查询?

【问题讨论】:

如果你这样做Dim cdb As DAO.DatabaseSet cdb = CurrentDbSet qdef = cdb.QueryDefs(gPassThru),效果会更好吗? 这个保存的查询是在其他地方按名称调用的,还是只立即执行?如果只立即执行,而不是保存然后更改的查询,只需创建一个临时 QueryDef 并在需要时设置所有必要的属性。您可以为“样板代码”创建一个函数。 戈德汤普森,这似乎没有帮助。我遇到了同样的问题。谢谢。 C Perkins,一个临时查询(我可以完全控制)可能是我需要的。我会调查的。 【参考方案1】:

这似乎起到了作用——至少在我不需要任何记录的情况下。感谢 C Perkins 引导我朝这个方向发展。

Dim strSQL As String
Dim qdef As DAO.QueryDef

Set qdef = CurrentDb.CreateQueryDef("") 'temporary pass-through
strSQL = "exec dbo.sp_whatever"

With qdef
  .Connect = gConnect
  .SQL = strSQL
  .ReturnsRecords = False
  .Execute
End With

Set qdef = Nothing

【讨论】:

以上是关于到 SQL Server 的 MS Access 通用直通查询的主要内容,如果未能解决你的问题,请参考以下文章

到 SQL Server 的 MS Access 通用直通查询

将表从 SQL Server 2008 复制到 MS Access 2007

从 SQL Server 2008 迁移到 MS access 2007

如何通过编码将数据从 MS Access 导入 Sql Server [关闭]

使用 c# 将 MS Access 表数据添加到 SQL Server 表中

MS Access 2003 + 到 SQL Server 2005 的链接表 + Windows 身份验证 = 慢