DBGird1显示选择的图书
DBGird1连DataSource1连ADOQuery1
ADOQuery1的SQL
select * from 图书DBEdit1用来显示选择图书的总价格
DBEdit1连DataSource2连ADOQuery2
ADOQuery2的SQL
select sum(价格) from 图书图书的价格为smallint类型Button1用来添加添加图书到图书列表
我想当选择图书的总价格超过30的时候提示
就在Button1里加了一段
........
if DBEdit1.Text>'30' then
........
Application.MessageBox('所选图书总价格超过30!','注意',MB_OK);
........
第一次添加的时候
图书价格为2的或者为16的都能添加
价格为4的或者为8的都说所选图书总价格超过30!
居然按照最高位进行判断......继续添加
比如说先填了2或16,之后填2,4,8都行
直到总数超过30会提示所选图书总价格超过30!
这个是正常的但为什么第一次添加的时候是从最高位判断啊?
有什么办法修正么?

解决方案 »

  1.   

    直接
    if DBEdit1.Text>30 then
    么?它说
    [Error] Main.pas(451): Incompatible types: 'String' and 'Integer'
      

  2.   


    if strtoint(dbedit1.text)>30 then
    begin
     do something;
    end;
      

  3.   

    嗯嗯,楼上的说法不错。偶就遇上一个double使用的问题:
      var
        dTemp : double;
      begin
        dTemp := strtofloat(edit1.text);
        //edit1.text为'30'
        if dTemp  = 30 then
          showmessage('等于');
        else
          showmessage('不等于');
      end;
      按正常判断,应该执行if段的程序,但实际运行时执行得却是else段的内容。后来我用watch看了一下,发现在strtofloat的时候,dtemp得值后面有.000000000002。后来我把dTemp改称cardinal类型才执行if段内容。问题解决了,但是没搞明白为什么?难道是double精度的问题?
      

  4.   

    你可以把Edit中的内容转换成Extended或者Integer型的在比较就不会出现错误了