Sqtext :='select bh,xm,xb,nl,nj from #tb1 where bh=:bh and xm=:xm' 
针对这句SQL,只有两个参数bh和xm
当你query2.ParamByName('xb').AsString := xxxxx时,当然要出错了。按你说Sqtext是动态,那你下面这段就要根据所拼接的Sqtext来写,而不是所有的字段都在param列表中。
 for i:=0 to query1.FieldCount-1 do
    begin
      if XXXX then
           query2.ParamByName(query1.Fields[i].FieldName).AsString := query1.Fields[i].AsString ;
    end ;

解决方案 »

  1.   

    Create table #tb1
    (bh  char(10),
     xm  char(30),
     xb  char(10),
     nl  int,
     nj  char(10)
     )
       
    Sqtext :='select bh,xm,xb,nl,nj from #tb1 where bh=:bh and xm=:xm' 
    //上面的Sql语句为自定义的语句不是在程序里固定的 
    //可能是select bh,xm,xb,nl,nj from #tb1 where bh=:bh
    //可能是select bh,xm,xb,nl,nj from #tb1 where bh=:bh and nj=:nj    等等
     
    //我现在准备执行自定义的SQL语句 能够获取需要的para 
    query1.sql.clear ;
    query1.sql.add(select * from #tb1 );
    query1.open ;
     
    query2.sql.clear;
    query2.sql.add(Sqltext)
      for i:=0 to query1.FieldCount-1 do
        begin
          IF ASSIGNED(query2.Parameters.FindParam(query1.Fields[i].FieldName)) THEN
               query2.Parameters.ParamByName(query1.Fields[i].FieldName).AsString := query1.Fields[i].AsString ;
           
        end ;
         
    if query2.open then close ;
    queyr2.open ;