【发布时间】:2018-09-08 01:57:56
【问题描述】:
我创建了一个应用程序,它使用以下逻辑将数据从 SQL 查询到我的 MS Access 应用程序。
- 我使用 ODBC 连接执行存储过程
- 使用这被指定为传递查询以在本地提取数据。
看起来像这样:
strSQL = "EXEC StoredProcedure " & Variable & "
Call ChangeQueryDef("qryPassThrough", strSQL)
Call SQLPassThrough(strQDFName:="qryPassThrough", _
strSQL:=strSQL, strConnect:=gODBCConn)
Me.frmDataSheet.Form.RecordSource = "qryPassThrough"
但是,最近我们使用高可用性故障转移系统将 SQL Server 升级到 2016 - 因此我们的连接字符串已更改为连接到如下侦听器:
gODBCConn = "ODBC;Driver= {SQL Server Native Client 11.0};Trusted_Connection=Yes;Regional=Yes;Database=" & varDB & ";MultiSubnetFailover=Yes;IntegratedSecurity=SSPI;Server=tcp:SERVER_LISTENER,1433;"
但是,看起来在连接字符串中使用 SQL Server Native Client 与我们最初使用的 SQL Server 不同。某些数据类型已更改,无法在 Access 中使用。
我是否有更好的方法从 SQL 查询数据并使用 ADO 或其他方法在访问中持久/显示这些数据?
编辑基于评论:
- 我遇到的问题是我在 SQL 中有使用以下数据类型的表:十进制 (12,2)。通过一些测试和试验,这在使用 ODBC 传递查询时似乎失败了。但是将数据类型更改为 Float 似乎可以正常工作。然后还有其他数据类型似乎也出错了,我还没有找到。似乎有一些我不知道的区别,我很想找到一种更好的方法将数据加载到我的 Access 应用程序中。
【问题讨论】:
-
请具体说明:什么不起作用?你的表结构是什么? VBA 不是那么相关,但该查询的存储过程、sql 字符串和 SQL 服务器上的数据结构是相关的。您可以使用 ADO 动态填充数据表,但这有一些缺点,例如在重新查询/过滤/排序时抛出错误
-
您已经详细说明了除了您的问题之外的所有内容。请用观察到的错误和预期输出更新您的问题。
-
Float 不是 Decimal(12, 2) 的替代品。应该是金钱/货币。
-
您不只是将数据创建为 SQL Server 视图或结果表,然后将其链接到作为链接表的访问,这是有原因的吗?您的存储过程和直通查询是什么样的?
标签: sql-server ms-access vba connection-string