DBGrid字段中的数据运算(100分)

  • 主题发起人 主题发起人 jake668
  • 开始时间 开始时间
J

jake668

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样在DBGrid的字段进行数值运算.例如:在DBGrid中有三个字段A,B,C ,通过在A字段输入2*5 回车后,输出到B字段=10,也就是在A字段的某个事件写上计算方法:B=A的计算.本人这样写:AdoQuery1.FieldByName('B').AsFloat:=AdoQuery1.FieldByName('A').Value总是提示出错.请教一下各位有什么好的解决方法.谢谢!
 
表达式计算。如果只是这样简单的自己分析下就好了。如果可能有更复杂的表达式 找个表达式计算的类库把。
 
你应该在A回车的时候进行计算,然后把计算的结果再赋给B,<br>不应该这样AdoQuery1.FieldByName('B').AsFloat:=AdoQuery1.FieldByName('A').Value直接赋,AdoQuery1.FieldByName('A').Value的值可能是字符串
 
错误提示是什么,这样怎么帮你
 
提示信息:Could not convert variant of type (String) into type (Double)<br>谢谢各位!
 
类型不对啊!AdoQuery1.FieldByName('B').AsFloat:=AdoQuery1.FieldByName('A').AsFloat?
 
你在delphi 中建立以各 script 对象,让他帮你算
 
類型不一致,轉換下就好了
 
1.字段只能采用字符型;<br>2.在输入字符时需要判断,字符是否在0-9,+,-,*,/,等有效字符;<br>3.在按下回车时再进行转换运行即可.
 
既然用的是dbgrid,想必连接了数据库,在sql里直接使用个计算字段最简单select a,b,a*b as c from ...,然后在dataset.OncalcFields写事件处理<br>dataset.fieldbyname('c').asfloat := dataset.fieldbyname('a').asfloat * dataset.fieldbyname('b').asfloat
 
To:心飞雪<br>请问怎样转换,请给个例子.谢谢!
 
你以为输入到dbgrid 里面的电脑就可以计算的出来的啊,真是服了你啊!<br><br>你那样输进去的只是字符串好不好!<br><br>AdoQuery1.FieldByName('B').AsFloat:=AdoQuery1.FieldByName('A').Value<br>你这样写肯定死啦,不用问都知道会弹什么错误报告给你的了!<br>你想想怎么可能把一个字符串赋值给一个 float 呢!<br><br>你要是想做运算的话,那就麻烦你在这个赋值前,先运算好你输入的那个字符串的运算式,再把一个有效的数字赋值过去!
 
To:nolliman<br>问题是怎样运算字段字符型值呢,字段A中输入的是:2*5,谢谢!
 
AdoQuery1.FieldByName('B').AsFloat:=AdoQuery1.FieldByName('A').Value改为<br>AdoQuery1.FieldByName('B').AsFloat:=AdoQuery1.FieldByName('A').asfloat
 
我做一个简单的演示,也是一个通用的方法:(表达式你自己随便定)<br>uses ComObj;<br><br>{$R *.dfm}<br><br>Function calc(const expression : String):Integer;<br>Var<br>&nbsp; sc : OleVariant;<br>begin<br>&nbsp; sc := CreateOleObject('MSScriptControl.ScriptControl.1');<br>&nbsp; sc.Language :='JavaScript';<br>&nbsp; result := StrToInt(sc.eval(expression));<br>end;<br><br>procedure TForm1.Button1Click(Sender:TObject);<br>begin<br>&nbsp; ShowMessage(IntToStr(calc(Edit1.Text)));<br>end;
 
TO:bbscom<br>你真牛,高手!非常佩服,十分感谢!
 
后退
顶部