office交流网--QQ交流群号

Access培训群:792054000         Excel免费交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

错误3349 无法记录所做的更改,因为您输入的值违反了为此表或列表定义的设置(例如,您所输入的值小于最小值或大于最大值)。请更正错误并重试

2020-05-02 08:00:00
zstmtony
原创
7754

在帮客户定做一个Access系统,需要导入Excel的数据

  使用命令:

  DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "销售数据", strFile, True  'SaleReport 导入Excel数据


但出现以下的错误


错误 #3349:无法记录所做的更改,因为您输入的值违反了为此表或列表定义的设置(例如,您所输入的值小于最小值或大于最大值)。请更正错误并重试


英文出错信息:"3349: You cannot record your changes because a value you entered violates the settings defined for this table or list (for example, a value is less than the minimum or greater than the maximum). Correct the error and try again."



解决办法:

  1.手工导入这个Excel表,发现有异常,提示 产品代码 和产品组 数字类型转换异常  ,因为产品代码 产品组前面 是一些数字类的代码,但导入时 可以后面的些产品代码是文本,但Excel导入时一般会根据列的前几行来确定这个列的数据类型

     因为前面是数字,所以Access以为是数字类型,但后面的内容却是文本,所以导入出错

  2.在excel中将这2列 格式改为文本,再导入就正常了



相关的文章:


我在过去一年中一直运行良好的TransferSpreadsheet函数存在问题。

我正在从每次启动应用程序时都会打开的表单的open事件运行VBA代码。
该代码删除访问暂存表的内容,然后使用transferspreadsheet函数将2个excel文件导入到暂存文件中。
我已逐步完成代码,并且该错误发生在下面的第一个docmd上。
DoCmd.TransferSpreadsheet acImport,“ tblScrtchSO”,_
“ C:\ Users \ mviolet \ My Documents \ OptiTrak2 \ QuarantineTesting \ Internal_Sales_Orders.xls”,
True'- 从内部销售excel文件DoCmd.TransferSpreadcactSrt,导入“,_
“ C:\ Users \ mviolet \我的文档\ OptiTrak2 \ QuarantineTesting \ MK_Sales_Orders.xls”,是'-'从MK_Sales_Orders导入
如果我注释掉第一个docmd,则第二个可以运行。因此,第一个文件中的数据似乎是罪魁祸首,但是数据看起来还可以。我尝试从第一个excel文件中删除数据行,但是即使只有一行excel数据,它仍然会失败。
错误消息是:
“ 3349:您不能记录所做的更改,因为您输入的值违反了为此表或列表定义的设置(例如,值小于最小值或大于最大值)。更正错误并尝试再次。”
暂存表上没有规则。与暂存表没有关系。
excel文件是xls文件,数据库是Access 2010中运行的mdb文件。该应用程序正在使用用户级安全性。
感谢您的任何想法。
标记
丹尼尔·皮诺
2013年12月10日,下午10:24
如果您尝试手动导入会怎样?
excel列数据是否与Access表字段数据类型匹配?
您是否已使用了有效的旧工作簿,并将其与未能看到发生变化的工作簿进行了比较?(假设更改已在Excel中发生,可能不是这种情况,但绝对值得验证)
基思·穆勒(Keith Mueller)
2013年12月10日,下午10:28
马克,
我会检查您的数据类型。excel文件中可能存在“错误”数据。您可能试图将太大的数字放入整数字段,或者可能试图将错误的日期放入日期字段。
我必须使导入暂存表中的字段主要是文本字段,因为导入文件中的数据不良。然后,我可以在ETL的“转换”步骤中“验证”数据。
祝你好运,开心,
基思
市场
2013年12月11日下午04:55
感谢您的建议。
手动将excel文件导入Access暂存表中,并创建一个Access错误表,指示第110行上的Excel错误。当我返回Excel并查看第110行时,它是最后一行之后的第一个“空”记录数据的。我选择并删除了Excel中的行并保存了文件。当我回到Access并再次手动导入时,它现在可以正确导入,现在transferspreadsheet似乎也可以正常工作。
transferspreadsheet函数不会在Excel中查找第一个空行并在此处停止(不导入空记录)吗?在“空”行110中是否有不可见的字符?还是转帐电子表格使用了某种程度上错误的Excel范围?
无论如何,它似乎正在工作。
基思·穆勒(Keith Mueller)
2013年12月11日,下午08:47
...在该行中有东西,一个单元格中可能有空格...如果继续出现该错误,则需要调整表中的数据类型,就像我说过我使用允许空值的文本字段一样,然后“清理”数据。
安尼尔是对的!手动导入引发了错误...
很高兴您找到了它!
dmhzx
2013年12月12日,上午03:53
传输电子表格有其自己的黑暗而神秘的方法来决定要导入多少行以及要导入多少列。
经常会获得65000行以上的空数据(或者说是习惯)
excel中的数据质量通常很差,以至于我最终一次导入一个单元格。
有趣的项目通常是
11月31日这样的
日期,例如
文档长度超过255个字符的“ TBA” Ttiles 日期(顺便说一下,transferspreadshheet会自动截断而不会报告错误。
在数据末尾添加空格。
如果有“序列号”要导入的数字,其中有些数字带有前导零,您最终可能会只输入进来的数字,或者除这些之外的所有东西,或者前导零掉了,具体取决于您设置传输方式的方式
一件事,如果一个excel导入突然停止工作,几乎可以肯定是excel文件中的数据所引起的。根据文件
的大小,一次存储一个单元的速度仍然可能会非常快。
    分享