当我在SQL INSERT中提供非日期字符串时,EXCEL表强制字段为日期
我在一个工作簿(工作簿A)中使用Excel(2013)表,并使用SQL INSERT INTO将整行数据从工作簿A导入工作簿B中相同的Excel表。在此操作过程中,工作簿B通常会关闭,因此使用数据库连接(读写)和SQL是实现此目的的最佳途径。我在Excel中使用本机SQL引擎,而不是外部db引擎 工作簿A中的Excel表有73个字段,这些字段包含文本、数字和日期(DMYHMS)的混合物,尽管该表主要是为通用格式设置的。工作簿B是连接到它的工作簿a集合的中央数据库。目前,我只测试从工作簿A到工作簿B的一个连接 在工作簿A中,当我执行SQL当我在SQL INSERT中提供非日期字符串时,EXCEL表强制字段为日期,sql,excel,data-formats,vba,Sql,Excel,Data Formats,Vba,我在一个工作簿(工作簿A)中使用Excel(2013)表,并使用SQL INSERT INTO将整行数据从工作簿A导入工作簿B中相同的Excel表。在此操作过程中,工作簿B通常会关闭,因此使用数据库连接(读写)和SQL是实现此目的的最佳途径。我在Excel中使用本机SQL引擎,而不是外部db引擎 工作簿A中的Excel表有73个字段,这些字段包含文本、数字和日期(DMYHMS)的混合物,尽管该表主要是为通用格式设置的。工作簿B是连接到它的工作簿a集合的中央数据库。目前,我只测试从工作簿A到工作簿
INSERT INTO
时,我得到一个错误:
“条件表达式中的数据类型不匹配。”(错误=-2147217913)
经过仔细的消除过程,我现在可以得出结论,工作簿a中有一个字段(第71个字段)导致了问题,这就是“LASTMOD__BY”,它是一个用户ID,即“12345678”,但由于未知原因,工作簿B希望它是一个日期。这尤其奇怪,因为我有一个SUB_BY字段(提交人),它也是一个用户ID“12345678”,并且被接受为文本字符串。为什么Excel表格认为LASTMOD_BY的相同数据应该是日期
阅读这里的许多帖子,大多数用户似乎希望字符串成为日期:我希望字符串保持为字符串
在我的一生中,我一直在研究并尝试各种方法来解决这个问题,但我已经没有想法了
为了记录在案,我尝试了以下方法,但没有成功:
INSERT INTO [CQDB$] (ProductQ, Version, QID_1, QID_2, QID_3, QID_4, QID_5, QID_6, QID_7, QID_8, QID_9, QID_10, QID_11, QID_12, QID_13, QID_14, QID_15, QID_16, QID_17, QID_18, QID_19, QID_20, QID_21, QID_22, QID_23, QID_24, QID_25, QID_26, QID_27, QID_28, QID_29, QID_30, QID_31, QID_32, QID_33, QID_34, QID_35, QID_36, QID_37, QID_38, QID_39, QID_40, QID_41, QID_42, QID_43, QID_44, QID_45, QID_46, QID_47, QID_48, QID_49, QID_50, QID_51, QID_52, QID_53, QID_54, QID_55, QID_56, QID_57, QID_58, QID_59, QID_60, QID_61, QID_62, QID_63, QID_64, QID_65, SUB_DMYHM, SUB_BY, LASTMOD_DMYHM, LASTMOD_BY, RECSTATUS, SubMonth)
VALUES('NonBank', 6, 98765432, ‘Mr Smith',12348765,’My Insurance plan','0',’My Local Branch','0','0','29-Sep-16','30-Dec-09’, '0', '0', 'No', '0', '0', '0', '0', '0', '0', '0', 'No', 'Yes', '0', '0', '0', '0', '0', '0', 'N/A', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 12345678, ‘28-Sep-16 11:09:00', '0', '0', ‘28-Sep-16 11:09:29', 12345678, ‘28-Sep-16 11:09:29', 12345678, 'FAIL: To Follow-up',’01-Sep-16')
仅供参考,SQL是使用VBA构建的。您在上面看到的是我亲手编辑的版本(用于删除任何真实数据)。如果你发现了一个缺少/多余的逗号等,那可能是我手工编辑的,而不是生成的SQL
如果有人能帮我解决这个问题,我真的很感激
干杯第一眼;数据中的分隔符在文本字段周围似乎不一致。。。我还没有进一步查看,但在手动编辑之前,您能否确认它们在SQL中是否一致?谢谢我没有找到这个问题的令人满意的答案,我的意思是没有检测到任何故障,然后进行了纠正。然而,我能够解决这个问题 我的结论是Excel表的一个功能,Excel表中的每个字段都可以根据该表中的大多数值“确定”为数据类型 这篇文章解释了这一点: 我尝试删除表中的所有行并重新插入数据,但EXCEL表似乎拥有以前的“内存”,并将添加的新数据转换为日期格式 然而,我认为这篇文章并不能完全解释我遇到的问题。考虑Excel中的一个“错误”,即Excel将单元格格式化为日期。见本文: 我没有将整个工作簿格式化为date,但是在我的一些SQL更新中有这样的元素。基本上,我所做的一切都不能让Excel“忘记”它为工作簿B中的表自动选择的上一个日期格式 解决方案