You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access 2016通过VBA/SQL导入CSV时RefID字段值丢失/截断问题

问题根因

Access的ACE/Jet文本驱动读取CSV时默认扫描前8~24行自动推断字段类型,你的REFID字段前几行大概率为纯数值格式,驱动因此将该字段识别为双精度数值型:非数值格式的REFID会被判定为无效值返回空,带前导零、后缀星号的数值类REFID也会按照数值规则截断、丢失原始格式。

解决方案

方案1:使用Schema.ini强制指定字段类型(最稳定,无副作用)

该方案是微软官方推荐的文本数据源类型指定方案,操作如下:

  • 进入CSV存放目录V:\Accounting Process Support\Projects\In Work,新建名为Schema.ini的纯文本文件
  • 在文件中写入以下配置:
[Mon Coll Rpt 09072021.csv]
ColNameHeader=True
Format=CSVDelimited
Col4=REFID Text Width 255

说明:Col4对应REFID为查询字段中的第4位,若你的CSV字段顺序有调整可自行修改序号,也可补充所有字段的类型定义,避免其他字段也出现类型推断异常

  • 无需修改原有导入代码,直接执行SQL即可,驱动会自动读取Schema.ini配置,将REFID按文本格式完整导入。

方案2:修改SQL强制转换字段为文本

如果不方便在CSV目录新增文件,可以修改SELECT语句中REFID的取值逻辑,强制驱动按文本处理:
将SELECT段的[REFID]替换为'' & [REFID] AS [REFID],修改后的代码示例:

vSQL = "INSERT INTO [tbl_Stage] ([BATID], [AGNCY_NAM], [CNTRCTNBR], [REFID], [ISSDTE], [ISSUETIME], [VIOLT_CDE], [VIOLT_TYPE], [CTTNAMT], [ERACADMFEE], [RENTINGGPBR]) " & _
"SELECT [BATID], [AGNCY_NAM], [CNTRCTNBR], '' & [REFID] AS [REFID], [ISSDTE], [ISSUETIME], [VIOLT_CDE], [VIOLT_TYPE], [CTTNAMT], [ERACADMFEE], [RENTINGGPBR] " & _
"FROM [text;HDR=Yes;FMT=Delimited(,);Database=V:\Accounting Process Support\Projects\In Work].[Mon Coll Rpt 09072021.csv]"
db.Execute vSQL, dbFailOnError

注意:该方案存在局限性,如果CSV前8行REFID全为纯数值,仍可能出现非数值内容识别为空的问题,优先选择方案1。

内容的提问来源于stack exchange,提问作者Shaves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:06:02