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; 展开
现在是在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; 展开
3个回答
展开全部
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。
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列是可以修改,但是我修改后的值不会提交到数据库,我修改之后,按回车或者点鼠标后,他的值又变回修改前的值了
展开全部
方法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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接用ADOQuery上C列的Onchange事件即可
追问
我在C列的onchange事件写了以后,为什么我的C列只能输入个位数了?只能输入0到9了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询