我正在尝试编写一个显示用户友好消息的异常处理程序。我不知道如何获取导致TDBGridInplaceEdit错误的“ 新输入的 ”数据值。
例如:
我有一个DBGrid加载数据。当我故意将第#行的 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”值来格式化我自己的消息。你怎么得到这个值?
答案 0 :(得分:5)
如果要保留数据集的字段,则可以在字段上定义OnSetText方法。(双击数据集并选择添加字段)。
方法可能如下所示:
procedure TForm1.ADataSetAFloatFieldSetText(Sender: TField; const Text: string);
var
f:Double;
begin
if not TryStrToFloat(Text,f) then
begin
raise Exception.Create(
'Error on: '
+ #13#10'Dataset: ' + Sender.DataSet.Name
+ #13#10'Field: ' + Sender.FieldName
+ #13#10'Old Value: ' + Sender.AsString
+ #13#10'New Value: ' + Text
);
end;
end;
如果您想避免保留字段,可以动态地将字段分配到字段,例如打开数据集后。
procedure TForm1.ADataSetAfterOpen(DataSet: TDataSet);
Var
i:Integer;
begin
for I := 0 to Dataset.FieldCount - 1 do
begin
if Dataset.Fields[i].DataType in [ftFloat, ftCurrency, ftBCD] then
Dataset.Fields[i].OnSetText := ADataSetAFloatFieldSetText;
end;
end;