从服务器和本地记录集复制 (Access VBA) - 字段在 255 个字符后被截断?
Copying from server and local recordsets (Access VBA) - fields truncating after 255 characters?
长话短说,我正在将大量数据从数据仓库中提取到本地 Access 数据库中。在展示我对第一个源数据集所做的工作之前,我将 post 代码。使用相同的概念引入其余数据集。
本地 table 是预定义的,相关文本字段是本地数据库中的 "memo" 字段。我检查过,加载到数据仓库中的源数据没有截断这些字段。此外,我还可以通过其他应用程序导出数据,而不会截断这些字段。因此,当我将数据从数据仓库导入本地访问数据库时发生了一些事情。
这是我的(非常简单的)代码的相关摘录。我只是匹配字段名称并使用记录集 .value 属性 将数据从服务器复制到本地 table.
有什么想法吗?
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
也许您应该为 MEMO 字段尝试使用此代码
rsLocal.Fields(fField.Name).AppendChunk(rsServer.Fields(fField.Name).GetChunk(rsServer.Fields(fField.Name).ActualSize))
我解决了我自己的问题。这不是我认为的问题。
数据正在从我的服务器记录集中复制到我的本地记录集中。它也正在更新适当的 tables 就好了。我没有意识到的是,从 SELECT 查询直接导出到 EXCEL 会在 255 个字符后截断备注字段。将最终查询变成 table 然后导出 那 解决了我的问题。
感谢所有试图提供帮助的人。
长话短说,我正在将大量数据从数据仓库中提取到本地 Access 数据库中。在展示我对第一个源数据集所做的工作之前,我将 post 代码。使用相同的概念引入其余数据集。
本地 table 是预定义的,相关文本字段是本地数据库中的 "memo" 字段。我检查过,加载到数据仓库中的源数据没有截断这些字段。此外,我还可以通过其他应用程序导出数据,而不会截断这些字段。因此,当我将数据从数据仓库导入本地访问数据库时发生了一些事情。
这是我的(非常简单的)代码的相关摘录。我只是匹配字段名称并使用记录集 .value 属性 将数据从服务器复制到本地 table.
有什么想法吗?
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
也许您应该为 MEMO 字段尝试使用此代码
rsLocal.Fields(fField.Name).AppendChunk(rsServer.Fields(fField.Name).GetChunk(rsServer.Fields(fField.Name).ActualSize))
我解决了我自己的问题。这不是我认为的问题。
数据正在从我的服务器记录集中复制到我的本地记录集中。它也正在更新适当的 tables 就好了。我没有意识到的是,从 SELECT 查询直接导出到 EXCEL 会在 255 个字符后截断备注字段。将最终查询变成 table 然后导出 那 解决了我的问题。
感谢所有试图提供帮助的人。