【问题标题】:Replacing special characters in recordset替换记录集中的特殊字符
【发布时间】:2018-10-15 21:53:03
【问题描述】:

我在某些字段中有一个带有双引号(“)的 CSV 文件。当我尝试将数据上传到记录集中时,我遇到了崩溃。我在 VBA 中使用了以下代码:

Dim rscsv As ADODB.Recordset
Dim cncsv As ADODB.Connection

Set cncsv = New ADODB.Connection

cncsv.ConnectionString = "Driver=Microsoft Access Text Driver (*.txt, *.csv);Dbq="C:\Test\";Extensions=csv"
cncsv.Open


Set rscsv = New ADODB.Recordset
rscsv.Open "select * from " & fileName, cncsv, adOpenStatic, _
adLockReadOnly, adCmdText

我在记录集中得到不正确的数据,错误“94:无效使用 Null”在“rscsv.Open”select * from ...“行中。数据在双引号和之后所有字段都具有 Null 值。

例如,如果我有以下 CSV 数据

  1            2            3            4
AAAA         BB"BB          123          456

...在我的代码之后,我得到了

  1            2            3            4
AAAA         BB           Null          Null

如何使用替换选项上传数据(即类似这样的内容 替换(' " ', ' ') )?

【问题讨论】:

  • 不确定这是否足以解决您的问题,但是,如果您尝试使用 replace, to target " ,VBA 要求您将它们加倍以显示一组。""""被视为“。然而,显示一个空字符串只是两个双引号"",但使用vbNullString 通常会快一点
  • @Brotato,你能给我提供一个代码示例吗?
  • “我遇到了崩溃”并不是对您所看到的问题的非常有用的描述。有错误信息/在哪一行?
  • @Tim Williams,我在记录集中得到不正确的数据,错误为“94:无效使用 Null”。数据在双引号字段中被修剪,之后所有字段都具有 Null 值。
  • @Kirill 对不起,我认为我没有正确理解这个问题;好像我在这里有点过头了。

标签: excel vba ado adodb


【解决方案1】:

在建立连接时使用 FMT=delimited。这是一个简单的例子:

cncsv.ConnectionString = "Driver=Microsoft Access Text Driver (*.txt, *.csv);" & _ 
                         "Dbq=""C:\Test\"";Extensions=csv" & _
                         "Extended Properties=""text;HDR=YES;FMT=Delimited"""
cncsv.Open

Set rscsv = New ADODB.Recordset
rscsv.Open "SELECT * FROM " & fileName, cncsv, adOpenStatic, _
            adLockReadOnly, adCmdText

注意:不用说,但要突出显示,如果您的 csv 文件有标题,则 HDR=YES,否则 HDR=NO。如果上述解决方案不起作用,那么您可能需要使用Schema.ini

署名:Microsoft Docs & Connection Strings

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 2014-11-03
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多