【发布时间】:2016-01-07 20:11:29
【问题描述】:
我有一些 VBA 代码可以分析 MS Access 中的数据。一些数据位于 SQL Server 中(在 Access 中链接)。
我的问题是这个特定表的列太多 (255+),因此 Access 会截断一些与我相关的列。
我的想法是我可以使用 ADO(或 DAO)提取相关数据(我只需要 10 列左右),将其保存在我的访问表中,然后继续执行其余的逻辑。
Dim cn As New ADODB.Connection
Dim ssql as String
cn = CreateObject("ADODB.Connection")
cn.Open "Provider=SQLOLEDB;Data Source=ServerName;Initial Catalog=CID;Integrated Security=SSPI;"
ssql = "SELECT a.channel, a.Firm_Name, a.[AUM 0915], a.[Rev 0915] INTO [Localtable] FROM dbo.TableName"
cn.execute (ssql)
我可以获取 Recordset 然后循环遍历它,尽管我并不热衷于这样做(它有几十万行数据,这使得它非常慢)。我希望的是一个解决方案,要么
(最好)在一条 SQL 语句中完成所有操作
(我会接受这个)将整个 Recordset 转储到 Access(希望有效)
欣赏任何指针。这是我的额外限制
我对数据如何存储在 SQL Server 本身没有任何发言权,所以我不能要求任何人减少列数
我在SQL服务器上只有读权限,所以不能在服务器上新建表再通过Access链接
谢谢。
【问题讨论】:
-
您能否要求 DBA 创建一个视图,从宽表中提取这 10 列,然后在 Access 中链接到该视图?
-
当您说“在一条 SQL 语句中完成所有操作”时,“它”是什么?
-
您可以使用 Access 传递查询(使用与您的问题相同的 SELECT 语句)来仅检索您需要的列。传递查询生成的记录集将是只读的,但如果需要,您始终可以将其转储到 Access 中的临时表中。
-
@Hansup:很遗憾,我没有那个选项(这是我的约束 #1)
-
说你 create a pass-through query 并将其命名为 [myPassThroughQuery]。然后,您可以使用像
SELECT * INTO [myLocalTable] FROM [myPassThroughQuery]这样的生成表查询将内容转储到本地 Access 表中。
标签: sql sql-server vba ms-access