office交流網--QQ交流群號

Access培訓群:792054000         Excel免費交流群群:686050929          Outlook交流群:221378704    

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

錯誤3349 無法記録所做的更改,因爲您輸入的值違反瞭爲此錶或列錶定義的設置(例如,您所輸入的值小於最小值或大於最大值)。請更正錯誤併重試

2020-05-02 08:00:00
zstmtony
原創
6895

在幫客戶定做一箇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文件中的數據所引起的。根據文件
的大小,一次存儲一箇單元的速度仍然可能會非常快。
    分享