Commit Graph

4 Commits

Author SHA1 Message Date
Misaka_Company
7c849883e4 修复 Access CSV 导入编码:数据 UTF-8 + schema.ini cp936
- 真数据含 GBK 外字符(如 ø),原 cp936 写 CSV 触发 UnicodeEncodeError
- 数据 CSV 改 UTF-8 + schema.ini CharacterSet=65001(覆盖全部 Unicode)
- schema.ini 列名是中文,Access Text ISAM 按系统 ANSI(cp936) 读 ini,故 ini 仍用 cp936 写(仅数据文件用 UTF-8)
- _schema_type 列宽为 None 时兜底 255(规避 Text Width 0 非法)
- 本地集成测试(真实 sync_access, 35043 行, 含 ø)通过:行数+校验和一致
2026-07-15 16:09:49 +08:00
Misaka_Company
5de1d4ee51 优化 Access 全量写入:executemany 改为 CSV+Text 驱动单语句批量导入
- 根因:ACE/Jet 的 executemany 在网络盘(E:)上逐行落地,每行一次往返,35043 行约 10 分钟
- UNION ALL 参数化受 Jet 查询复杂度上限封死(查询过于复杂 -3071),不可用
- 改用官方 Text 导入路径:写入临时 Tab 分隔 CSV(GBK/cp936) + 动态 schema.ini,单条 INSERT...SELECT FROM [Text;...] 整批写入,往返从 35043 次压成 1 次
- 保留正确性保障:列约束值清洗(截断/夹日期) + 写入后 COUNT(*) 核对 + 不足时逐行回退并精确记录失败行
- 本地集成测试(真实 sync_access,35043 行)通过:行数+校验和完全一致
2026-07-15 16:03:12 +08:00
Misaka_Company
eecea44746 修复 Access 全量同步静默丢行问题
- sync_access 改为事务化(去 autocommit,失败回滚),杜绝前段已提交、错误被吞导致日志谎报完成
- 写入前按 Access 列约束做值清洗:VARCHAR 按列宽截断、DATETIME 夹到合法范围,从根消除驱动拒写
- 写入后强制 SELECT COUNT(*) 核对实际行数;不足则 DELETE 后逐行回退插入并精确记录失败行号
- 修复后两端均落 35043 行,SQL Server 与 Access 校验和一致
2026-07-15 15:31:24 +08:00
Misaka_Company
5ae7acffde 初始化项目:数据同步服务源码与文档
- src: config_loader / source_watcher / excel_parser / sync_writer / runner
- 169 Excel 全量同步至 114 SQL Server + Access 生产库
- 新增 .gitignore(忽略 venv、日志、数据、含凭据的 config.yaml 等)
- 新增 README.md(用途、安装、配置、运行模式、部署说明)
2026-07-15 14:14:39 +08:00