office交流網(wǎng)--QQ交流群號及微信交流群

Access培訓(xùn)群:792054000         Excel免費(fèi)交流群群:686050929          Outlook交流群:221378704    

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

微信交流群(請用微信掃碼)

        

微軟更新重大Bug,造成access更新查詢中,提示查詢‘’中斷(查詢失?。┑慕鉀Q方案

2019-11-19 09:26:00
tmtony8
原創(chuàng)
13119

有網(wǎng)友反饋平臺運(yùn)行出錯,后面發(fā)現(xiàn)是微軟補(bǔ)丁更新導(dǎo)致的。
不光是Access通用平臺,其它使用Access更新查詢的數(shù)據(jù)庫在微軟自動更新補(bǔ)丁后都有可能出現(xiàn)這個錯誤。而且微軟暫時(shí)還沒有修復(fù)的補(bǔ)丁,所以只能按照本篇技巧中下面的相關(guān)方法來處理。

先確保您出現(xiàn)的是以下錯誤:
1.查詢 '' 中斷

2.Query is corrupt 或  Critical Alert: Query is Corrupt, Error 3340


當(dāng)運(yùn)行一個更新查詢時(shí),它可能不運(yùn)行并顯示錯誤:"Query 'query name' is corrupt". (查詢 中斷)




這個更新查詢錯誤發(fā)生條件:
1.直接更新單個表(即更新表,而不是Select查詢或聯(lián)接的輸出)
2.指定WHERE子句(即在查詢設(shè)計(jì)器的條件行中有條目)


這個問題影響所有支持的access版本

該問題在2019年11月12日通過以下MSI版本的補(bǔ)丁更新被引入:
Office 2010: Office 2010安全更新說明:2019年11月12日(KB4484127)
Office 2013: Office 2013安全更新說明:2019年11月12日(KB4484119)
2016年辦公:2016年辦公安全更新說明:2019年11月12日(KB4484113)
2016辦公室:2019年11月12日,2016辦公室更新(KB3085368)


微軟預(yù)計(jì)修復(fù)的發(fā)布日期


短時(shí)解決方案:

1、卸載更新。

打開系統(tǒng)的“運(yùn)行”或者直接輸入win+r,輸入“appwiz.cpl”,確定打開“添加或刪除程序”(在控制面板打開亦可)

搜索相關(guān)您對應(yīng)版本下載的補(bǔ)丁  卸載/刪除,如office2010 即卸載(KB4484127)


對于Office 365用戶,請遵循以下步驟:
1.打開Office并在“Account”下選擇禁用更新選項(xiàng)。

2.使用此鏈接查找要還原為的Office版本:Update history for Office 365 ProPlus (listed by date),例如,“16.0.12130.20272”
3.下載office Deployment 工具 (Download)
4.按照提示將文件解壓縮到一個容易訪問的文件夾。
在該文件夾中,使用記事本創(chuàng)建一個名為“config”的新文件。xml包含:

<Configuration>
<Updates Enabled="TRUE" TargetVersion="16.0.12130.20272" />
</Configuration>

5.在提升的命令提示符中,將目錄更改為解壓文件的文件夾。然后運(yùn)行以下命令:
setup.exe /configure config.xml

6.打開Office程序,進(jìn)入賬戶頁面,“立即獲取更新”。這返回到更新16.0.12130.20272。



參考微軟資源鏈接:How to revert to an earlier version of Office 2016 Click-to-Run




2、更新查詢,更新另一個查詢的結(jié)果,而不是直接更新表。


例如,如果有一個類似于這樣的查詢:
UPDATE Table1 SET Table1.Field1 = "x" WHERE ([Table1].[Field2]=1);
您可以創(chuàng)建一個新的查詢(Query1)定義為:
SELECT * from Table1;
然后更新你原來的查詢:
UPDATE Query1 SET Query1.Field1 = "x" WHERE ([Query1].[Field2]=1);
用Query1替換Table1 的引用
這可產(chǎn)生相同的結(jié)果,利用查詢避免錯誤。



3、使用代碼和記錄集更新數(shù)據(jù)

在VBA中使用記錄集。使用變量定義ADO或DAO記錄集,編輯它


4、系統(tǒng)還原,此方案有風(fēng)險(xiǎn),謹(jǐn)慎操作




相關(guān)的文章內(nèi)容:


查詢是針對當(dāng)前數(shù)據(jù)庫中的表,鏈接表還是鏈接的SQL Server表都沒有關(guān)系。如果Access數(shù)據(jù)庫引擎正在處理UPDATE查詢,則會發(fā)生錯誤。

在此示例中,查詢qryUpdateEmployee非常好。它以前曾經(jīng)工作過,如果卸載了安全更新,它將再次工作。

受影響的程式
此問題影響:

自2010年以來的所有Microsoft Access版本,包括Access 2010、2013、2016和2019以及Office 365
32和64位版本的Microsoft Access
使用Access數(shù)據(jù)庫引擎(ACE)和ADO連接到Access數(shù)據(jù)庫(ACCDB和MDB)文件并使用查詢更新它們的程序。這可能包括:
用Visual Studio .NET或Visual Basic 6編寫的程序
基于ASP.net,經(jīng)典ASP等構(gòu)建的Web解決方案
在其他主機(jī)(例如Excel,PowerPoint,Word)中運(yùn)行的VBA代碼
使用ACE與Access數(shù)據(jù)庫一起使用的Microsoft程序,例如PowerBI,Power Query和SQL Server Migration Assistant(SSMA)(我們尚未確認(rèn)這些程序正在使用崩潰的更新查詢)


微軟的回應(yīng)
我們與Microsoft Access開發(fā)團(tuán)隊(duì)保持聯(lián)系,并且對于出問題的原因以及如何將如此嚴(yán)重的問題發(fā)布到世界上沒有明確的答案。

我們與您一樣擔(dān)心,這樣的安全更新比它們試圖阻止的病毒或惡意軟件引起的問題更大。

這是他們描述問題的網(wǎng)頁: 訪問錯誤:“查詢已損壞”

Microsoft的修補(bǔ)程序的預(yù)計(jì)發(fā)布日期
Access 2010:內(nèi)部版本7242.5000-2019年12月10日
Access 2013:內(nèi)部版本5197.1000-2019年12月10日
Access 2016 MSI:內(nèi)部版本4939.1000-2019年12月10日
Access 2019批量許可證:內(nèi)部版本10352.20054-2019年12月10日
Access O365 / 2019(1911版):內(nèi)部版本12228.20152-2019年11月24日(估計(jì))
從現(xiàn)在起幾周后,他們宣布的解決方案對于大多數(shù)情況顯然是不可接受的。我們希望他們能夠更快地做出響應(yīng),并且我們將在學(xué)習(xí)過程中提供更多信息。


即時(shí)解決方案:卸載安全更新

解決此問題的最佳方法是卸載此問題的根源Office安全更新。根據(jù)您的Access安裝來自傳統(tǒng)的永久許可證,ACE還是Office 365訂閱,解決方案有所不同。


Office / Access的永久許可證和磁盤安裝以及ACE分發(fā)安裝

如果您通過永久許可證,本地安裝程序/磁盤或分布式Access數(shù)據(jù)庫引擎(ACE)直接在計(jì)算機(jī)上安裝了Access / Office,則安全更新已安裝在Office 365訂閱服務(wù)之外的計(jì)算機(jī)上。請按照以下步驟查找并卸載更新:

  1. 按Windows鍵和R彈出運(yùn)行提示。
  2. 鍵入“ appwiz.cpl”,然后按[確定]啟動控制面板的“程序和功能”程序。
    運(yùn)行命令
  3. 單擊[查看已安裝的更新]。
    查看已安裝的更新
  4. 在搜索欄中,搜索以下KB。
    • Office 2010:KB4484127
    • Office 2013:KB4484119
    • Office 2016:KB4484113
  5. 在此系統(tǒng)上,存在KB4484127。
  6. 右鍵單擊該程序,然后選擇[卸載]。
  7. 單擊[是]開始卸載過程。
  8. 提示將詢問您是否準(zhǔn)備好卸載。單擊[卸載]按鈕繼續(xù)。
  9. 成功卸載更新后,單擊[確定]。

根據(jù)我們的經(jīng)驗(yàn),如果此操作卸載了所有有害的安全更新,則無需重新啟動即可解決問題。

不久我們將獲得有關(guān)Office 365安裝的其他信息。


Microsoft Office 365Office 365訂閱(單擊以運(yùn)行)安裝

對于Office 365用戶,請按照下列步驟操作:

  1. 打開Office,然后在“帳戶”下選擇禁用更新的選項(xiàng)。
  2. 使用此鏈接來查找要還原到的Office版本: Office 365 ProPlus的更新歷史記錄(按日期列出)
    例如,“ 16.0.12130.20272”
  3. 下載Office部署工具(Download
    按照提示將文件解壓縮到易于訪問的文件夾中。
  4. 在該文件夾中,使用記事本創(chuàng)建一個名為“ config.xml”的新文件,其中包含:
    <配置>    
  5. 在提升權(quán)限的命令提示符下,將目錄更改為您解壓縮文件的文件夾。然后運(yùn)行以下命令:
    setup.exe / configure config.xml 
  6. 打開一個Office程序,然后轉(zhuǎn)到“帳戶”頁面,然后“立即獲取更新”。這將還原為更新16.0.12130.20272。

Microsoft資源:如何還原到早期版本的Office 2016即點(diǎn)即用

無法卸載安全更新的替代解決方案

在某些情況下,您可能無法卸載安全更新。也許您或您的用戶無權(quán)更改。或者,您正在將解決方案分發(fā)給不受您控制的機(jī)器的人。如果要確保即使安裝了安全更新,您的Access應(yīng)用程序都可以正常運(yùn)行,則有以下幾種選擇:

  1. 修改所有查詢,以免它們觸發(fā)問題
  2. Microsoft Access 2007使用Access 2007或更早版本部署Access應(yīng)用程序。您可以使用免費(fèi)的Access 2007運(yùn)行時(shí)來這樣做。有關(guān)Microsoft Access Runtime頁面的更多信息,其中包括免費(fèi)下載的運(yùn)行時(shí)程序。這假定您的Microsoft Access數(shù)據(jù)庫在Access 2007中運(yùn)行,并且不包括Access 2010或更高版本中引入的功能。請?jiān)L問Microsoft Access版本功能頁面,以查看版本之間的差異。

修改所有更新查詢

如果決定修改查詢,則需要找到所有觸發(fā)錯誤的更新查詢。這些可以是保存的查詢和在代碼中調(diào)用的SQL查詢。一旦識別出它們,就需要對其進(jìn)行修改,以便它們更新另一個查詢的結(jié)果,而不是直接更新表。這些示例由Microsoft在上面引用的頁面中提供。

例如,如果您有此查詢被標(biāo)記為損壞的查詢:

更新表1 SET Table1.Field1 =“ x”([Table1]。[Field2] = 1);

您可以創(chuàng)建一個新查詢(Query1),其定義為:

SELECT * from Table1;

并將您的原始查詢更新為:

UPDATE Query1 SET Query1.Field1 =“ x”在哪里([Query1]。[Field2] = 1);

通過用Query1替換對Table1的所有引用,這將產(chǎn)生相同的結(jié)果并避免錯誤。



模塊代碼使用代碼和記錄集更新數(shù)據(jù)

到目前為止,在VBA,VB6或Visual Studio.NET代碼中使用記錄集來更新記錄(例如,使用諸如rst之類的變量定義ADO或DAO記錄集,打開記錄并使用諸如rst.Edit和rst.Update)。

這些直接記錄更新與發(fā)出更新查詢不同,并且不受安全更新問題的影響。因此,另一個選擇是用記錄集更新替換“更新”查詢。對于一些記錄的一些簡單更新,或者與此安全更新有一些此類沖突的應(yīng)用程序(也許是單個數(shù)據(jù)輸入表單或網(wǎng)頁),這可能是有意義的。但是,更新查詢?nèi)匀蛔钸m合更新一個表或多個表中的許多記錄,因此不建議將其作為永久解決方案。




    分享
    文章分類
    聯(lián)系我們
    聯(lián)系人: 王先生
    Email: 18449932@qq.com
    QQ: 18449932
    微博: officecn01
    移動訪問