begin
            s :='select * from 收入明细表 where shouruxiangmu in';
            for i :=0  to ListBox2.Items.Count-1 do
            if str='' then
              str:=str+''''+ListBox2.Items.Strings[i]+''''
            else
              str:=str+','''+ListBox2.Items.Strings[i]+'''';
            str:=s+'('+str+')';            with dataa.ADOQuery1 do
            begin
            close;
            strs:=('select * from'+'('+str+')'+'where zhichushijian>=:c and zhichushijian<= :b');
            Parameters.ParamByName('c').Value := Trunc(DateTimePicker1.Date) ;
            Parameters.ParamByName('b').Value := Trunc(DateTimePicker2.Date);
            sql.Text:=strs;
            open;
            end;
             if dataa.ADOQuery1.RecordCount>0 then
           DataSource1.DataSet := Dataa.ADOQuery1;
         end;
编译能通过,但是执行该代码时候出现:“ADOQuery1:paramter 'c' not found。”

解决方案 »

  1.   

    Parameters.ParamByName('c').Value := Trunc(DateTimePicker1.Date) ; 
    Parameters.ParamByName('b').Value := Trunc(DateTimePicker2.Date); 
    sql.Text:=strs; 次序调一下,调成这样:
    close;
    sql.clear;  //----这句最好要加上strs:=.....sql.Text:=strs;
    Parameters.ParamByName('c').Value := Trunc(DateTimePicker1.Date) ; 
    Parameters.ParamByName('b').Value := Trunc(DateTimePicker2.Date); 
     
      

  2.   

    要么在ADOQuery的属性那里看看参数是不是被认出来了
    要么用CreateParameters()
      

  3.   

    strs:=('select * from'+'('+str+')'+'where zhichushijian>=:c and zhichushijian <= :b'); 这条好象也有错误!!
      

  4.   

    改成这样
    strs:=('select * from['+str+'] where zhichushijian>=:c1 and zhichushijian <= :b1'); 
    'c'这个字符最好不要单独用,后面加个数字就Ok了
      

  5.   

                sql.Text:=strs; 
                Parameters.ParamByName('c').Value := Trunc(DateTimePicker1.Date) ;
                Parameters.ParamByName('b').Value := Trunc(DateTimePicker2.Date);
      

  6.   

    楼上说的对,clear一下,使用Parameters[0].value应该是可以了。