【问题标题】:Copying from server and local recordsets (Access VBA) - fields truncating after 255 characters?从服务器和本地记录集复制(Access VBA) - 字段在 255 个字符后截断?
【发布时间】: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


【解决方案1】:

也许你应该试试这个代码用于 MEMO 字段

rsLocal.Fields(fField.Name).AppendChunk(rsServer.Fields(fField.Name).GetChunk(rsServer.Fields(fField.Name).ActualSize))

【讨论】:

  • 谢谢 - 虽然这并没有解决我的问题(因为我实际上什至没有我认为的问题)我对此进行了一些研究并发现它很有趣。因此,如果没有别的,即使它与我的解决方案无关,你也帮助教了我一些东西。
【解决方案2】:

我解决了自己的问题。这不是我认为的问题。

数据正在从我的服务器记录集中复制到我的本地记录集中。它也很好地更新了适当的表格。我没有意识到从 SELECT 查询直接导出到 EXCEL 会截断 255 个字符后的备注字段。将最终查询放入表中,然后导出 that 解决了我的问题。

感谢所有回复并提供帮助的人。

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 2016-06-09
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多