十万个为什么之第三问: (问不惊人死不休)(15分)

W

_wxxmlx

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个edit1.text中输入数字。当触发OnExit事件后
edit2.text等于adoquery3的单价字段乘以折扣字段再乘以edit1.text的值
我用的sql sver7.0 单价字段是smallmoney类型,折扣字段是decimal 类型
我现在的代码如下。
procedure Tkfba5.Edit1Exit(Sender: TObject);
begin
edit2.Text := Floattostr(strToint(edit1.Text) * (adoquery1.fieldbyname('danjia').AsInteger) *
(1 +(adoquery1.fieldbyname('zhekou').AsFloat)) );
end;
错误信息:
access vialation at addess 0987f097 in the module. 'coreide60.bpl' read of addess
谢谢帮忙。
 
退出 delphi ,重新进入再执行
 
To jsxjd
我试过了。
错误信息:
access vialation at addess 0f83fef097 in the module. 'project1.exe' read of addess fffffff.
 
注销一次应该可以,第一错误出现后。
要不然重启,你的代码应该没问题。
//
或者是你这个窗体USES的单元文件还没有创建你就引用了,这一条是猜的
 
最好是关机重新启动!
 
你就不能暂时改一下数据库中字段的属性设置吗?都用整型或者实数型的试试看啊
 
不是这段代码的错吧
 
代码应该是这样的:
procedure Tkfba5.Edit1Exit(Sender: TObject);
begin
edit2.Text := Floattostr(strToFloat(edit1.Text) * (adoquery1.fieldbyname('danjia').AsFloat) *
(1 +(adoquery1.fieldbyname('zhekou').AsFloat)) );
end;
 
```````````10万个为什么这么难!代码看不出问题啊,系统的问题吧
 
这个问题比较怪,我也遇到过类似的问题。
在exit事个中,先判断一下是否初始化好adoquery1,再执行你的代码
我觉得好象exit事件在adoquery1设置好之前就触发了,所以这时你用fieldbyname('')当然会
出错。
 
用OnIdle算了。

判断焦点不在EDIT1且EDIT1的修改标志为真就计算。
计算完设修改标志为假。
在EDIT1的ONCHANGE事件中设标志为真。
 
coolsoft的说法好象有一点道理,我也遇到到类似这样的问题。
用了edit处理,有时用户输入 Term(edit1.text) = '' 也会出错的。
 
应该不是这段代码的问题

你再仔细看看其它部分

可能和这段代码有冲突
 
多人接受答案了。
 
顶部