0

私のアプリケーションは、データ ソースとして 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
4

2 に答える 2

1

cxGrid で列の "Properties" プロパティを設定する必要があります。ここで CurrencyEdit を割り当てて、ユーザーが数字のみを入力できるようにすることができます。また、"Properties" を設定した後、OnValidate イベントを使用してユーザー エントリを検証できます。

于 2011-08-11T13:25:04.013 に答える
1

あなたの例では、イベント OnBeforePost には実際には到達していません。

あなたはcxGridについて言及していますが、実際には、あなたの問題は簡単に再現できます。

TFloatField にリンクされた単純な TDBEdit を取り、値「7.7.7.7.7.7.7.7」を入力してみます。浮動小数点フィールドは小数点記号を受け入れますが、1 しか存在しないことを検証しません。したがって、これを入力すると、フィールドを終了するとき、または投稿中に、そうすることができるショートカットがある場合は、同様の方法でエラーが発生します。

「途中で」それを傍受したい場合は、おそらく TField.OnSetText が最善の策です。

于 2012-02-03T22:28:49.630 に答える