【发布时间】:2018-09-14 03:22:57
【问题描述】:
长话短说,我正在将一堆数据从数据仓库提取到本地 Access 数据库中。在展示我对第一个源数据集所做的操作之前,我将发布代码。其余数据集使用相同的概念提取。
本地表是预定义的,相关文本字段是本地数据库中的“备忘录”字段。我检查并加载到数据仓库中的源数据没有截断这些字段。此外,我还可以通过其他应用程序导出数据,而不会截断这些字段。因此,当我将数据从数据仓库导入本地访问数据库时,会发生一些事情。
这是我的(非常简单的)代码的相关摘录。我只是匹配字段名称并使用记录集 .value 属性将数据从服务器复制到本地表。
有什么想法吗?
Dim db As DAO.Database
Set db = CurrentDb
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim rsServer As ADODB.Recordset
Set rsServer = New ADODB.Recordset
Dim rsLocal As Recordset
Dim fField As ADODB.Field
'Open Connection
With conn
.ConnectionString = dataConnectionString
.Open
End With
'*****************************
'*******Data set 1 data*******
'*****************************
'Open server DSET_1_SOURCE_DATA table
Set rsServer = conn.Execute(SQL_DSET1_SERVER)
'Open local DSET_1_LOCAL_DATA table
Set rsLocal = db.OpenRecordset(SQL_DSET1_LOCAL)
'DELETE ALL RECORDS FROM LOCAL TABLE
DoCmd.SetWarnings False
DoCmd.RunSQL ("DELETE * FROM DSET_1_LOCAL_DATA")
DoCmd.SetWarnings True
rsServer.MoveFirst
Do Until rsServer.EOF
rsLocal.AddNew
For Each fField In rsServer.Fields
rsLocal.Fields(fField.Name).Value = rsServer.Fields(fField.Name).Value
Next
recordCount = recordCount + 1
rsLocal.Update
rsServer.MoveNext
Loop
【问题讨论】:
-
有什么理由不简单地链接服务器表,然后运行
INSERT INTO DSET_1_LOCAL_DATA SELECT * FROM DSET_1_SOURCE_DATA? -
如果您需要记录集和逐个字段复制,您必须向我们展示 ConnectionString 以查看使用的服务器和驱动程序。
-
@Andre - 我在链接表格或批量复制表格时遇到了一些问题。我似乎无法执行打开与服务器的连接,然后将整个源表链接或复制到本地数据库。老实说,几个月前我一直在寻找一个快速的解决方案,并找到了这项工作,然后就去做了,即使它不是最优雅的解决方案。我愿意以另一种方式这样做,但如果我今天有一个可交付成果,我现在只是试图解决截断问题(至少)。
-
这是一个 OLE 连接。具体来说,“提供者”是 SQLOLEDB.1。这是整个(部分编辑)字符串:“Provider=SQLOLEDB.1;Integrated Security=SSPI;PersServerist Security Info=False;Initial Catalog=[redacted];Data Source=[redacted];Use Procedure for Prepare=1;Auto Translate =True;Packet Size=4096;Workstation ID=[redacted];对数据使用加密=False;尽可能使用列排序标记=False;"
-
好的,所以我解决了我的问题。两个问题 - 我的一些查询正在截断备忘录字段,然后一旦我解决了这个问题,导出到 Excel 就会截断那些备忘录字段。但是记录集字段复制按预期工作。不敢相信我昨天没有先确认。
标签: vba ms-access adodb truncate memo