我一直在處理一個問題,最近卡住了。一個特定的程序(一個編譯後的.p)有代碼編寫,試圖將值保存到數據庫中的特定字段。VALIDATE語句導致一個值不會被存儲在數據庫中
在此表下有一個VAILDATE語句。這導致該值在執行更新操作時恢復。我在VALIDATE之前和之後發送消息,並且可以在VALIDATE之前看到更新的值,並在VALIDATE之後恢復。請有人可以幫我解決這個問題。提前謝謝了。
我一直在處理一個問題,最近卡住了。一個特定的程序(一個編譯後的.p)有代碼編寫,試圖將值保存到數據庫中的特定字段。VALIDATE語句導致一個值不會被存儲在數據庫中
在此表下有一個VAILDATE語句。這導致該值在執行更新操作時恢復。我在VALIDATE之前和之後發送消息,並且可以在VALIDATE之前看到更新的值,並在VALIDATE之後恢復。請有人可以幫我解決這個問題。提前謝謝了。
從文檔:
VALIDATE statement:
Verifies that a record complies with mandatory field and unique index definitions.
所以,如果你的更新VALIDATE後恢復就意味着至少一個的申請值不按限制。查看您的表格架構和字段值。檢查他們是否可以。您的問題不清楚您是否有權訪問代碼。如果您有權訪問該代碼並且如果VALIDATE語句具有無錯誤,請嘗試刪除無錯誤。如果你刪除了NO-ERROR,你可以看到錯誤信息,它可能有一些線索。
謝謝奧斯汀。我有權訪問代碼,並且沒有錯誤。我仍然看不到任何錯誤。嘗試錯誤:狀態錯誤,但仍然沒有erros顯示。這對我來說很奇怪。 –
我的確模擬了你的問題。 最有可能的是,分配違反了索引以及更改您正在監視的字段的值。當OE解析VALIDATE並且不通過時,整個事務失敗。然後將記錄恢復(回滾)到最後一個有效值,以及舊值到您正在查看的字段。據我所知,這是預期的。
要解決這種行爲,我相信你應該
一)重寫塊只改變獨特的領域(雖然這並不能真正解決問題後驗證記錄。它只是把你從做業務稍後將被撤銷);或
b)將舊值保存到臨時表記錄,並在VALIDATE失敗時仍然需要時複製它們。
希望這給你一些想法,至少。
感謝您的幫助。我很感謝能成爲這樣一個偉大社區的一部分。
我現在發現是什麼導致了這一點。文件「https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/validate-statement.html」最後有答案。我不知道VALIDATE語句的這種行爲。
再次感謝所有。
對於這個誰不在乎追逐鏈接......最後一點是什麼? –
嗨湯姆,我很新成爲一名成員的stackoverflow。我加入的一個理由是,我是你的職位的忠實粉絲。我沒有按照一些程序,然後請讓我知道,我會遵循。 –
編輯你的答案並告訴我們導致你的問題的「最後一點」是什麼。很多人沒有跟着一個鏈接,通過長文檔閱讀並砌出你在想什麼「最後點」是再弄清楚它是否適用於他們的情況的時間和精力。除非有人專門尋找鏈接,否則該鏈接應被視爲支持腳註 - 不是實際的答案。答案應該是獨立的,不要求讀者繼續挖掘。恕我直言。 –
好的。所以,問題是「VALIDATE語句一個.P文件,是導致價值rolledback的根本原因是按下面的鏈接中提到的最後一點:
導火索之一有一個代碼,有意回滾值。
正如上面提到的,原因是VALIDATE語句大火把所有的相關的觸發器。
這將有助於顯示VALIDATE語句 –
另外要注意的是,'validate'將調用創建或寫入觸發器,如果您有任何定義的t能夠看看那裏發生了什麼。 – xander