我想寫一個異常處理程序,顯示用戶友好的消息。我不知道如何獲得導致TDBGridInplaceEdit錯誤的「新輸入的」數據值。如何獲取導致TDBGridInplaceEdit錯誤的值?
例如:
我有一個DBGrid加載數據。當我故意將第1行的PartNo字段更改爲非數字值以導致TDBGridInplaceEdit錯誤...(自:1313.3至:1313..3)...我捕獲錯誤並顯示消息,但我無法弄清楚如何獲得不好的'1313..3'值。
原始PARTNO:1313.3
更改PARTNO:1313..3(兩個小數點)
從應用程序onException的
procedure TMain.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var
str : string;
begin
str := sender.ToString;
str := str + #10;
str := str + RzDBGrid2.SelectedField.FieldName;
str := str + #10;
str := str + VarToStr(RzDBGrid2.SelectedField.Value);
str := str + #10;
str := str + e.Message;
showmessage(str);
//Application.ShowException(E);
end;
顯示的錯誤信息
我想格式化自己的消息使用輸入的錯誤'1313..3'值。你如何得到這個價值?
我在回答之前沒有仔細閱讀(我現在已經刪除了答案)。你會得到一個EConvertError,這是在賦值過程中發生的,因此實際上在RTL本身中失敗了,並且永遠不會達到你通過'NewValue'得到的值。我不知道有什麼辦法可以達到這個價值。最好的方法可能是在字段本身設置一個編輯掩碼,這將防止首先輸入無效值。 –
我想我可以解析e.Message,然後收穫價值:) –
是的,我想。 ;-)我想我會防止無效的輸入,儘管;它不那麼「黑客」。如果你決定走這條路線,你必須測試一個特定的異常類型(EConvertError),然後解析看看什麼樣的轉換(整數,浮點或其他)來知道要分析什麼,並且還爲其他類型的異常(例如,缺少必需的字段,數據截斷錯誤(字符串太長)等)添加處理,並分別處理它們,然後爲您錯過的通用處理程序。 –