簡體   English   中英

如何在 TDataSet.UpdateRecord 中捕獲錯誤?

[英]How can I catch errors in TDataSet.UpdateRecord?

我的應用程序使用 QuantumGrid (v6.56) 和 TSimpleDataSet 作為其數據源。

問題:如果用戶在數字字段中輸入非數字值,則會引發異常。 代碼未到達 OnBeforePost 處理程序。

如果在 OnBeforePost之前拋出異常,應用程序如何捕獲錯誤(並向用戶顯示消息)?


堆棧跟蹤:

exception class   : EDatabaseError
exception message : '...' is not valid Integer value for Field <somefieldname> 

main thread ($504):
00526c7e +082 EditBooking.exe DB                               DatabaseError
00526d0f +04b EditBooking.exe DB                               DatabaseErrorFmt
0052c428 +07c EditBooking.exe DB                               TIntegerField.SetAsString
0052af30 +00c EditBooking.exe DB                               TField.SetText
0052abf9 +021 EditBooking.exe DB                               TField.SetEditText
007c3a3f +053 EditBooking.exe cxDBData                           
007e14a8 +018 EditBooking.exe cxGridDBDataDefinitions          TcxGridDBDataController.UpdateData
006f8159 +039 EditBooking.exe cxCustomData                     TcxCustomDataProvider.DoUpdateData
007c1c18 +008 EditBooking.exe cxDBData                         TcxDBDataLink.UpdateData
0053325d +021 EditBooking.exe DB                               TDataLink.UpdateRecord
005333f8 +0d8 EditBooking.exe DB                               TDataLink.DataEvent
007c1683 +00f EditBooking.exe cxDBData                         TcxDBDataLink.DataEvent
00533973 +03f EditBooking.exe DB                               TDataSource.NotifyLinkTypes
005339a2 +01e EditBooking.exe DB                               TDataSource.NotifyDataLinks
005339cf +023 EditBooking.exe DB                               TDataSource.DataEvent
005392ad +131 EditBooking.exe DB                               TDataSet.DataEvent
00553d7c +058 EditBooking.exe DBClient                         TCustomClientDataSet.DataEvent
00539396 +042 EditBooking.exe DB                               TDataSet.UpdateRecord
0053a356 +006 EditBooking.exe DB                               TDataSet.Post
0055677c +054 EditBooking.exe DBClient                         TCustomClientDataSet.Post

您需要在 cxGrid 中設置列的“Properties”屬性,在那里您可以分配 CurrencyEdit,以便用戶只能輸入數字,同樣在設置“Properties”后,您可以使用 OnValidate 事件來驗證用戶輸入。

在您的示例中,確實沒有達到 OnBeforePost 事件。

您提到了 cxGrid,但事實是,您的問題很容易重現。

取一個鏈接在 TFloatField 上的簡單 TDBEdit 並嘗試輸入值“7.7.7.7.7.7.7.7”。 浮點字段接受小數分隔符,但不會驗證僅存在 1。 因此,輸入此內容也會導致以類似方式引發錯誤,無論是在您退出該字段時,還是在發布時,如果您有一個允許您這樣做的快捷方式。

如果您想“在途中”攔截它,那么 TField.OnSetText 可能是您最好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM