访问 VBA DoCmd.TransferText CSV 导入 - 错误数据类型检测删除必要的字符串信息

Posted

技术标签:

【中文标题】访问 VBA DoCmd.TransferText CSV 导入 - 错误数据类型检测删除必要的字符串信息【英文标题】:Access VBA DoCmd.TransferText CSV Import - False datatype detection removing necessary string info 【发布时间】:2021-07-30 14:05:30 【问题描述】:

使用DoCmd.TransferText TransferType:=acLinkDelim 将 CSV 文件导入 Access 通过 VBA 可以正常工作,但是我在 CSV 文件中有一个必填字段,其中包含我想作为短文本导入的值,例如“2024061.023.1733.1937”,但它作为货币自动进口。因此,它会在第一个“。”之后删除所有内容。部分并在表格中显示 $2,024,061.023。

我试图找到答案并找到了一些方法,例如将数据传输到一个新表中,该表已经将字段设置为我开始实施的短文本,但是从最初导入的数据中,主要的必填字段已经丢失了我需要的字符串的“.1733.1937”部分。

想知道是否有人可以解决这个问题。

Dim db As DAO.Database
Set db = CurrentDb
On Error Resume Next:   db.TableDefs.Delete "tblImport":   On Error GoTo Err_Field_Import
db.TableDefs.Refresh
DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tblImport", _
    FileName:="results.csv", HasFieldNames:=True
db.TableDefs.Refresh

对于我的测试,results.csv 如下所示,但最终它将包含大约 72 列各种数据类型,这个 Project 字段是最重要的。

Project
20245061.023.1733.1937

编辑:手动链接是可能的,但是让 VBA 通过在表单中​​单击按钮来填写一些表单信息,从而简化了非技术用户的流程。这种导入也将每天或每天多次进行,因此让 VBA 执行它对他们来说更容易。

【问题讨论】:

“但是从最初导入的数据中,主要必填字段已经丢失”是什么意思 - 导入到现有表仍然会丢失字符?也许您应该建立一个导入规范。通过使用外部数据向导手动执行导入并保存来做到这一点。为什么需要 VBA 来设置链接?为什么这是一个重复的过程?为什么不手动设置一次链接就完成了? @June7 这主要是关于从货币中将其设为短文本,但由于它在导入时自动输入为货币,因此最后一部分会立即被删除,这使得任何货币到文本的转换都毫无意义。也使用 VBA,因为我只想为必须使用它的主要用户提供一个按钮解决方案。不过,我已经玩了一段时间,似乎使用 TransferSpreadsheet 而不是 TransferText 完全符合我的需要,所以我将使用它。 我仍然不清楚为什么需要对这个链接进行编程。可以为您自己的问题写一个答案并将其标记为已接受。 【参考方案1】:

据我所知,使用DoCmd.TransferText 定义字段数据类型是不可能的。我从一个单独的来源获得的数据可以选择导出为 CSV 或 Excel,所以我最终尝试了 Excel 导出选项,然后通过DoCmd.TransferSpreadsheet 导入访问,它使用 Excel 的数据类型完美地工作字段。所以这就是我要采用的解决方案。

【讨论】:

以上是关于访问 VBA DoCmd.TransferText CSV 导入 - 错误数据类型检测删除必要的字符串信息的主要内容,如果未能解决你的问题,请参考以下文章

MS Access VBA DoCmd.TransferText 如何分隔列?

VBA + TransferText + SpecificationName

Docmd.TransferText 问题

具有非美国区域设置的 DoCmd.TransferText

访问 VBA - 导入 *.CSV 时出现运行时错误 31519。您无法导入此文件

导入带分隔符的文本