sql.add('');
sql.add(' iif( (2008-year(sj))>60,'老人'.....) as aaa ');
像这个语句中2008如果要以变量的值传入,不知道该怎么写啊?parameters.ParamByName('y1').Value:=2008;那么sql里怎么写?:y1也不对啊?

解决方案 »

  1.   

    嘿嘿,你用vfp的iif呀,sql能通过不?
      

  2.   

    delphi里sql.add(' if( (:y1-year(sj))>60,'老人'.....) as aaa '); 
    parameters.ParamByName('y1').Value:=2008;sql里declare @y1 int
    select @y1=2008
    if if( (@y1-year(sj))>60,'老人'.....) as aaa 
    主要是不太明白你究竟想表达什么意思,不知道这样回答是否合适
      

  3.   

    delphi里 Delphi(Pascal) code
    sql.add(' iif( (:y1-year(sj))>60,'老人'.....) as aaa '); 
    parameters.ParamByName('y1').Value:=2008;sql里 SQL code
    declare @y1 int
    select @y1=2008
    iif( (@y1-year(sj))>60,'老人'.....) as aaa 
      

  4.   

    我用的是access库支持jet-sql, 似乎不支持t-sql,declare如果
    eidt1.text:=2008;
    sql.add(' iif( ('+edit1.text+'-year(sj))>60,'老人'.....) as aaa '),这样也是可以通过的。
    我的意思是可否这样
    parameters.ParamByName('y1').Value:=strtoint(edit1.text);再把y1这个变量通过某种写法传递到sql语句中去?
      

  5.   

    我希望这样写就是希望如果以后edit1.text的赋值发生什么变化, sql语句不怎么变动,只要改动
    parameters.ParamByName('y1').Value:=(改这里);就可以了。
    不知道可否做到?
      

  6.   

    Delphi(Pascal) code
    sql.add(' iif( (:y1-year(sj))>60,'老人'.....) as aaa ');
    parameters.ParamByName('y1').Value:=2008;
    这种方法我试过了,通不过阿,编译通过,但在程序中执行时提示‘y1 not found’
      

  7.   

    sql.add('case when (2008-year(sj))>60 then ''老人'' else ''年轻人'' end as aaaa');在SQL中,可以使用CASE
      

  8.   

    晕了,我要把2008作为变量传到sql里面阿
    和iif没关系的阿
      

  9.   

        close;
        sql.Clear;
        sql.Add(' SELECT * FROM a  WHERE (2008-year(sj))>60 ');
        open;实际上就是这样一个简单的查询阿...
    现在想把2008这个以变量的形式传入,比如
        parameters.ParamByName('y1').Value:=2008; 
    如果这样写的话,那么sql里怎么写呢?
    sql.Add(' SELECT * FROM a  WHERE (:y1-year(sj))>60 ');
    parameters.ParamByName('y1').Value:=2008; 
    这种方式通不过阿
      

  10.   

        Adoquery1.close; 
        Adoquery1.sql.Clear; 
        Adoquery1.sql.Text := ' SELECT * FROM a  WHERE (:y1-year(sj))>60 ' ;
        Adoquery1.open; 
        Adoquery1.parameters.ParamByName('y1').Value:=2008; 
      

  11.   

    已测试,写成如下格式,ok
        Adoquery1.close; 
        Adoquery1.sql.Clear; 
        Adoquery1.sql.Text := 'SELECT * FROM a  WHERE ((:y1)-year(sj))>60' ; 
        Adoquery1.parameters.ParamByName('y1').Value:=2008; 
      //或者    Adoquery1.parameters.Item[0].Value:=2008; 
        Adoquery1.open;