请问这个条件的修改SQL语句怎样写,还是搞不懂里面的单引号的应用
with datamodule1.ADOSavelist do
     begin
        close;
        sql.Clear;
        updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='+quotedstr(ChanelNo);
        sql.Text:=updatestr;
        ExecSQL;
     end;
上面是可以的,现在要改成下面的要添加一个两数据相减之后如果大于2才执行修改的条件,外部变量为kwhstr(字符串)减去内部的一个字段kwhdata(也为字符串)我把他写成这样但不通过:不知应当怎样写
with datamodule1.ADOSavelist do
     begin
        close;
        sql.Clear;
        updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='+quotedstr(ChanelNo) and  '''((strtofloat(kwhstr)-strtofloat(kwhdata))>2)'''';
        sql.Text:=updatestr;
        ExecSQL;
     end;

解决方案 »

  1.   

    ((strtofloat(kwhstr)-strtofloat(kwhdata))>2)   你这是啥意思 strtofloat是delphi的函数 你传到数据库 当然不行
      

  2.   

    updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='+quotedstr(ChanelNo)+' and  (('+'kwhstr'+'-'+kwhdata'+')>2)'这样试试 
      

  3.   

    select t.*, t.rowid from test_table t where t.vcolumn - t.lcolumn > 2 
    oracle里面这样写就成,她会自己转化类型
    Sqlserver的话你就自己试试吧 
    如果不行你自己找一下sqlserver中对应的转化函数
      

  4.   

    updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='+quotedstr(ChanelNo)+' and  (('+'strtofloat(kwhstr)'+'-'+strtofloat(kwhdata)'+')>2)' chao3428这样是不是可能解决函数不能在SQL中用的问题这样试试 
      

  5.   

    updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='''+quotedstr(ChanelNo)+''' and  ''+strtofloat(kwhstr)+'' - ''+strtofloat(kwhdata)+'' >2 '; 
      

  6.   

    varick_zhong也不对测试了一下,strtofloat函数这样用单引号引起来还是有问题
      

  7.   

    updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='+quotedstr(ChanelNo)+' and  '''((strtofloat(kwhstr)-strtofloat(kwhdata))>2)''''; 
      

  8.   

    也不对header230放进去连编译都编译不过
      

  9.   

    这里要注意的是kwhdata是字段名来的,而kwhstr又是外部的一个字符串,所以放在一个引号对中应当是不对的
      

  10.   

     'update savelist set Kwhdata="'+Ekwh+'",Writedate="'+datetimetostr(now)+'" where ChanelNO="'+quotedstr(ChanelNo)+'" and '+((strtofloat(kwhstr)-strtofloat(kwhdata))>2)+''; 
     应该是这样 你试试..
      

  11.   

    不行还是卡在kwhdata这里编译不过去,很明显,你这样就把kwhdata当成了一个delphi中的变量了,而不是数据表中的一个字段值了,
      

  12.   

    你的意思是 kwhstr 是变量  而 这个kwhdata 是表里的字段?
      

  13.   

    是啊,所以不能放在一个引号内,而且还有一个难的就是怎样让strtofloat这个delphi函数能对于kwhdata这个字段起作用(因为这个字段设置时是字符串类型,而不是浮点数值类型,不知SQL里这个转换函数是什么)
      

  14.   

    如果是的话 kwhdata  你这个值不能用 strtofloat 去转化 
     strtofloat 是用来转化变量,常量的..
      应该是你的 kwhdata  值应该在数据库里面的类型应该就用SQL 语句 去转化!
      

  15.   

      用这个函数  convert 
      

  16.   

    'kwhdata'<strtofloat(kwhstr)-2
    前面的你查下在SQL里面转换成你需要的.
      

  17.   

    'update savelist set Kwhdata="'+Ekwh+'",Writedate="'+datetimetostr(now)+'" where ChanelNO="'+quotedstr(ChanelNo)+'" and "'+(strtofloat(kwhstr)+'"-convert(float,kwhdata)>2'
    应该是这样..我没有编译过 你试试看.
      

  18.   

    编译不过,在'''-convert(float,kwhdata)>2' 这里单引号有问题
      

  19.   

     白痴错误..我晕  
      你把"'+(strtofloat(kwhstr)+'" 的双引号去了..应该没问题了..在有问题  我估计会吐血
      

  20.   

    还是编译不过,错误提示"Incompatible types:'String' and  'Extended'
      

  21.   

    .....吐了一口血..
      你这样测试下..'update savelist set Kwhdata="'+Ekwh+'",Writedate="'+datetimetostr(now)+'" where ChanelNO="'+quotedstr(ChanelNo)+'" and convert(float,kwhdata)>2'
     先看看这样能不能过..
       'update savelist set Kwhdata="'+Ekwh+'",Writedate="'+datetimetostr(now)+'" where ChanelNO="'+quotedstr(ChanelNo)+'" and '+(strtofloat(kwhstr)+'>0'
     在看看这样能不能过..
      

  22.   

    updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='+quotedstr(ChanelNo)+' and  ((convert(float,'+kwhstr+')-kwhdata)>2)' 
      

  23.   

    都不行,这下编译是过了,但提示convert这个SQL里面用的函数没有定义的错误
      

  24.   

    updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='+quotedstr(ChanelNo)+' and  ((cast('+kwhstr+' as float)-kwhdata)>2)' 
      

  25.   

    还是有问题显示cast表达式错误,可以编译过,这种sql语句写起的太复杂了,要把引号弄透还真不是容易的事情
      

  26.   

    updatestr:='update savelist set Kwhdata='''+Ekwh+''',Writedate='''+datetimetostr(now)+''' where ChanelNO='+quotedstr(ChanelNo)+' and  ((CDbl('+kwhstr+')-kwhdata)>2)'  
    这样试下..ACCESS 数据库 的语言 和其他的不大一样.转化函数也不一样.
      

  27.   

    先在Access里写好sql语句,在Access里测试通过后,再移植到Delphi里,一步一步来!
      

  28.   

    ACCESS 太难用了.. 我一般都是直接在D 里面直接测试的!
      楼主的表也有点奇怪 既然是拿去运算的列为什么要去其他类型呢.