delphi中计算字段问题 35

请教个问题,我dbgrid有3列字段A,B,C。其中C列为可编辑列,我在C列中输入数量以后,B列的值等于A列减去C列,同时当输入的值大于A列时,提示警告不允许大于A列,这... 请教个问题,我dbgrid有3列字段A,B,C。其中C列为可编辑列,我在C列中输入数量以后,B列的值等于A列减去C列,同时当输入的值大于A列时,提示警告不允许大于A列,这个是写什么事件?

现在是在ADOQuery的BeforePost事件中实现的警告,但是在应用中发现在警告跳出以后,焦点不在警告的这一行,而是转向下一行。
另,当C列的值自动变化时,我要写什么事件实现B列的值自动更新为A-当前C列的值?

谢谢各位。
我在C列的onchange事件写了以后,为什么我的C列只能输入个位数了?只能输入0到9了

代码如下:
Form1.ADOQuery5.First;
Form1.ADOQuery5.DisableControls;
try
while not Form1.ADOQuery5.Eof do
begin
form1.adoquery5.Edit;
Form1.ADOQuery5.FieldByName('B').AsInteger:=
Form1.ADOQuery5.FieldByName('A').AsInteger-
Form1.ADOQuery5.FieldByName('C').AsInteger;
Form1.ADOQuery5.Post;
Form1.ADOQuery5.Next;
end;
finally
Form1.ADOQuery5.EnableControls;
end;
展开
 我来答
百度网友b29952e2e
2014-09-12 · TA获得超过131个赞
知道答主
回答量:109
采纳率:80%
帮助的人:15.5万
展开全部
1、写到BeforePost事件中没有错,但是发现错误的时候要放弃post,焦点才不会下移。
2、onchange事件中不要遍历所有记录,不要edit,post,next,只要简单的计算赋值就好:

Form1.ADOQuery5.FieldByName('B').AsInteger:=
Form1.ADOQuery5.FieldByName('A').AsInteger-
Form1.ADOQuery5.FieldByName('C').AsInteger;
不需要每次onchange都把所有记录都计算一遍。
我觉得BeforePost事件中的判断可以写到onchange事件中。最好设置dbgrid自动post。
追问
您好,我用的是ADO连接数据库,您回答的第二个问题,直接B=A-C我之前也试过,这样应该是不可以的?我这样写了以后C列是可以修改,但是我修改后的值不会提交到数据库,我修改之后,按回车或者点鼠标后,他的值又变回修改前的值了
手机用户05341
2014-09-11 · TA获得超过106个赞
知道答主
回答量:109
采纳率:0%
帮助的人:42.2万
展开全部
方法1:设置table 的 AutoCalcFields的值为false即可不自动计算,等你数据完毕后再设成true;方法2:定义一个全局Bool变量CanCalc,在插入一条数据后,设为False,在table的OncalcFields事件中事先判断beginif not CanCalc then exit; ......//计算代码end;当输入完毕后按回车时把 Cancalc设为true..
追问
我试了你的方法1,不可以呀?下面是我代码,麻烦您看看。
在ADOQuery5CalcFields中
DataSource3.DataSet.AutoCalcFields:=true;
i:=STRTOINT(adoquery5.FieldByName('C').Value);
m:=STRTOINT(adoquery5.FieldByName('B').Value);
....//字数超限了
m:=j-i;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bfmabc123
2014-09-12 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:70
采纳率:0%
帮助的人:77.2万
展开全部
直接用ADOQuery上C列的Onchange事件即可
追问
我在C列的onchange事件写了以后,为什么我的C列只能输入个位数了?只能输入0到9了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式