with ADOQuery2 do
begin
FieldByName('je').Value:=strtofloat(formatfloat('0.##',FieldByName('sl').Value*FieldByName('dj').Value));
dd:=FieldByName('zk').Value;
FieldByName('zkdj').Value:=strtofloat(formatfloat(SYS_DJXS_FORMAT,dd*FieldByName('dj').Value));
FieldByName('zkje').Value:=strtofloat(formatfloat('0.##',FieldByName('sl').Value*FieldByName('zkdj').Value));
FieldByName('sj').Value:=strtofloat(formatfloat('0.##',(FieldByName('sll').Value/100)*FieldByName('zkje').Value));
FieldByName('hsje').Value:=FieldByName('sj').Value+FieldByName('zkje').Value;
dd:=FieldByName('sll').Value;
FieldByName('hsdj').Value:=strtofloat(formatfloat(SYS_DJXS_FORMAT,(dd/100)*FieldByName('zkdj').Value))+FieldByName('zkdj').Value;
end;这是先输单价产生金额的源码,如果是先输金额再产生单价的话需不需要数据库中设置一个字段告诉程序是哪种输入方式,或者怎样设计比较合理
begin
FieldByName('je').Value:=strtofloat(formatfloat('0.##',FieldByName('sl').Value*FieldByName('dj').Value));
dd:=FieldByName('zk').Value;
FieldByName('zkdj').Value:=strtofloat(formatfloat(SYS_DJXS_FORMAT,dd*FieldByName('dj').Value));
FieldByName('zkje').Value:=strtofloat(formatfloat('0.##',FieldByName('sl').Value*FieldByName('zkdj').Value));
FieldByName('sj').Value:=strtofloat(formatfloat('0.##',(FieldByName('sll').Value/100)*FieldByName('zkje').Value));
FieldByName('hsje').Value:=FieldByName('sj').Value+FieldByName('zkje').Value;
dd:=FieldByName('sll').Value;
FieldByName('hsdj').Value:=strtofloat(formatfloat(SYS_DJXS_FORMAT,(dd/100)*FieldByName('zkdj').Value))+FieldByName('zkdj').Value;
end;这是先输单价产生金额的源码,如果是先输金额再产生单价的话需不需要数据库中设置一个字段告诉程序是哪种输入方式,或者怎样设计比较合理
我用的dbgrideh,没有onchange事件呀我在dbgridheh1.columns[12]的onupdatedata事件中处理
if text='' then text:='0';
if ADOQuery2.FieldByName('spbm').Value='' then
begin
text:='0';
exit;
end
else
begin
text:=formatfloat('0.######',strtofloat(text)) ;
ADOQuery2.FieldByName('dj').Value:=text;
re_calc;(这里就是上述的代码)
end;
不是GRID的問題,而是數據集的字段的ONCHANGE裏處理的。 就像的ADOQUERY2
是datasouce2的ondatachange事件吗
adoquery2没有ONCHANGE事件