ADOQuery4.Close;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('select max(s0+s1+s2) as ST from jp_yxm inner join JP_DHFXJL on     jp_yxm.wid=JP_DHFXJL.wid where js<=:YXJS and js>=:YXJSB and jp_yxm.wid=:LogName');
ADOQuery4.Parameters.ParamByName('YXJS').Value:=yxjs;
ADOQuery4.Parameters.ParamByName('YXJSB').value:=yxjsb;
ADOQuery4.Parameters.ParamByName('LogName').Value:=LogName;
ADOQuery4.Open;
ss:=ADOquery4.fieldbyname('ST').AsFloat;    //求出ST的值经过测试,如果在sql语句中直接对YXJS,YXJSB,LogName赋值,则ADOquery4.fieldbyname('ST').AsFloat可以取到值。
但按照上面的语句,ADOquery4.fieldbyname('ST').AsFloat取到的值为空,为什么呢
感觉好像是sql中的yxjs,yxjsb,LogName变量没有被赋值

解决方案 »

  1.   

    用SQL的跟踪,看一下发往数据库的真实SQL语句.
    或者试一下:
    ADOQuery4.Parameters.ParamValues['YXJS']:=yxjs;
    ADOQuery4.Parameters.ParamValues['YXJSB']:=yxjsb;
    ADOQuery4.Parameters.ParamValues['LogName']:=LogName;
      

  2.   

    如果SQL中的某个为空,那么ST为空很正常
    简单说就是只要S0、S1、S2中的某条记录中的任意一个为空,那么ST就得到空值要解决可以用以下方法max(s0+s1+s2) as ST
    --->>>
    max(ISNULL(s0,0)+ISNULL(s1,0)+ISNULL(s2,0)) as ST
      

  3.   

    看看数据类型有没有什么问题,不要用value,用asstring,asfloat什么的试试