首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TDataSet.UpdateRecord中捕获错误?

如何在TDataSet.UpdateRecord中捕获错误?
EN

Stack Overflow用户
提问于 2011-08-10 10:47:55
回答 2查看 1.1K关注 0票数 0

我的应用程序使用QuantumGrid (v6.56)和TSimpleDataSet作为数据源。

问题:如果用户在数字字段中输入非数字值,则会引发异常。代码没有到达OnBeforePost处理程序。

如果异常在之前抛出,应用程序如何捕获错误(并向用户显示消息)?

堆栈跟踪:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2011-08-11 13:25:04

您需要在cxGrid中设置列的"Properties“属性,在那里您可以分配一个CurrencyEdit,以便用户只能输入数字,在设置”属性“之后,也可以使用OnValidate事件验证用户条目。

票数 1
EN

Stack Overflow用户

发布于 2012-02-03 22:28:49

在您的示例中,事件OnBeforePost实际上没有到达。

您提到了cxGrid,但事实是,您的问题很容易再现。

将一个简单的TDBEdit链接到一个TFloatField上,然后尝试输入"7.7.7.7.7.7.7.7“值。浮点数字段接受十进制分隔符,但不会验证是否存在1。因此,如果您有允许这样做的快捷方式,输入此操作也会以类似的方式引发错误,无论是在退出字段时还是在投递时。

如果你想拦截它“在路上”,那么TField.OnSetText可能是你最好的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7009589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档