6.1 导入与导出


6.1 导入与导出

本节摘要:外部数据进库的标准姿势不是直接导入正式表,而是"暂存区模式":先进独立导入表,体检清洗后用追加查询放行。本节以供应商文本对账单为例走完全流程,并整理一份字段类型映射避坑清单。

华彩的那份供应商对账文件长得面目模糊:第一行是表名而非列名,日期长着"二零二六年三月五日"的脸,数量栏里混着一格"已取消"。这就是现实世界的进口货——没经过检验检疫。若一键直灌正式表,参照完整性会拦下一部分,但漏网之鱼足够让你月底对账翻车。

一、口岸的正确开法:暂存区模式

规则只有一条:外部数据永远先落到一张专用暂存表,一切字段都是短文本,零约束零关系。 数据在暂存区里接受清洗,合格后追加进正式表,暂存表清空待下一批。

为什么这么麻烦?三个理由,每条都来自真实学费:

  • 类型宽松的暂存表什么都装得下——混合类型、超长字段、奇形怪状的编码都不会让导入半路翻车;
  • 清洗逻辑一旦有漏洞,污染范围被隔离在暂存区,正式表的完整性防线完好无损;
  • 出问题时审计清晰:原始货样(暂存表)一直在库里躺着备查,领导问"这批 500 行从哪来的"你三秒答得上来。

图题:暂存区通关流水线全景

图题:暂存区通关流水线全景

二、实操:一份文本对账单的通关全程

按图纸施工。第一步建暂存表"暂存对账",五个字段全部短文本:来源方、商品、日期原文、数量原文、单价原文。第二步走导入向导:外部数据选文本文件 → 选"追加"目标暂存表 → 预览界面里指定分隔符与首行含义 → 完成。这一步向导会把每行拆得整整齐齐,但一格不错不等于内容能用,所以才需要第三步。

第三步是灵魂环节,三条更新查询把原文翻译成规范值:

-- 其一 汉字日期换算成引擎认识的样子 UPDATE 暂存对账 SET 日期标准化 = DateSerial( CInt(Mid(日期原文,1,InStr(日期原文,"年")-1)), CInt(Mid(日期原文,InStr(日期原文,"年")+1,InStr(日期原文,"月")-InStr(日期原文,"年")-1)), CInt(Mid(日期原文,InStr(日期原文,"月")+1,InStr(日期原文,"日")-InStr(日期原文,"月")-1))); -- 其二 数量里的非数字内容现形 UPDATE 暂存对账 SET 状态标记 = IIf(IsNumeric(数量原文), "", "需人工复核"); -- 其三 编号去空格并统一大小写 方便和主档对上 UPDATE 暂存对账 SET 商品 = Trim(UCase(商品));

Mid 与 InStr 的组合是处理非标字段的瑞士军刀:前者负责切段,后者报告关键字的落点位置。这三句一跑,暂存表就从"货柜"变成了"待检合格的净货仓"。第四步主键冲突预检——用查找不匹配项查询比对正式表的单号唯一索引,如有重复先裁决是补录还是跳过;第五步追加查询按列位映射搬进正表;收尾清空暂存表,这一批通关完成。第二次再遇到同格式文件时,中间三步可以直接另存为宏序列一键复演。

三、反向:导出的讲究

出口比入口简单,但同样有三条经验值得白纸黑字:

  • 给谁的报表用带格式导出:Access 能把查询或报表直接输出成 Excel 工作簿且保留分组样式,周报接收方的体验立刻上升;
  • 给程序吃的数据走纯数据导出:不要格式化的花活,表头干净、类型明确,下游系统少猜谜;
  • 敏感信息出口前先瘦身:导出视图只挑业务必需的列,客户手机号这类能脱敏就脱敏——口子开多大是责任问题不是技术问题。

四、Excel 通道专属的三个老贼

Excel 是最高频的进出对象,单独立传。三个经典事故请对号防范:

长数字自动变身科学计数法。 供应商发来的台账里,十二位的物料编号显示成"4.51E+11",后三位已经被 Excel 吃掉且不可恢复。防法在上游:让对方先把该列设成文本格式再填,或改发 CSV;已在库中的就只能找对方补发。反过来导出时同理,纯数字长编码在 Access 里建表时就该是短文本。

日期像日期但不是日期。 表面写着 2026/8/9 的列,混着几个"8月9日""2026.8.9",向导按首行嗅探类型时整列判成文本或干脆报错。应对套路固定:一律以文本身份进暂存表,再用 2.2 讲过的 DateSerial 家族清洗,别信向导的类型猜测。

幽灵区域。 曾经有数据的空单元格带着不可见格式赖着不走,向导宣称"将导入十万行",实际只有四千行有效。开工前先在 Excel 里把尾部空行列删除再保存,或者干脆复制有效区域粘贴进新工作簿。判断是否中招很简单:对比源文件大小与预期行数,差一个数量级就是它在作怪。

一问一答

问:链接到 Excel 让它当在线表格用行不行? 应急可以(外部数据选链接),数据量小、单人维护时尚可;但它没有完整性约束、性能随文件增大骤降,长期方案仍应是真正入库。

问:导入向导能不能记住这次的设置下次直接用? 能,向导收尾处勾选"保存导入步骤",之后在外部数据菜单的一键重演里点一下即可——固定格式的月度文件配合暂存宏,整个流程缩到十秒。

五、定时化:让进口每月自己跑

同一家供应商的固定格式对账单每月一张,人肉点向导很快就会腻。两条自动化的路按投入递增:

轻量路:宏序列加启动参数。 把暂存、清洗、追加、清空四步录成一个宏,再用带命令行参数的方式打开这个库直接运行该宏,交给 Windows 的计划任务每天凌晨执行。全程零代码,一个上午能配好;代价是容错弱——文件格式一变它就停摆等人工。

稳健路:VBA 编排加日志。 用代码模块调度同样的步骤,每一步的结果写进导入流水表(来源、时间、行数、成功与否),出错时给指定邮箱发提醒而不是干等。多花半天开发换来的可观察性,在有四五家定期供货商之后物超所值。

无论哪条路都要保留一条安全底线:自动化入口永远指向【待导】专用文件夹,正式表只认经过放行查询的数据。机器跑得再勤,也不能替人做"要不要入库"的决定。

本节要点打包

  • 暂存区模式三利:全兼容、可回滚、留证备查;正式表防线永不裸奔。
  • 清洗三件套:DateSerial 配 Mid 加 InStr 化解非标日期,IsNumeric 揪异常值,Trim 加 UCase 统一标识。
  • 追加之前必做主键冲突预检;固定格式的文件把流程固化成一键宏。
  • 导出分人看与机器吃两路,格式与纯洁度互斥,敏感列出手前必瘦身。

进口的货有了仓库管理办法。下一节讲怎么把这些货变成 Word 文件、Outlook 邮件——Office 生态才是 Access 真正的主场。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U