我对SQL的不熟练,请帮我将以下两句commandtext整合成一句,使得假如临时表list2存在的话,先将它删除,再通过语句select f4,f5,f6,f7,sum(f8) as f20,smu(f9) as f30,sum(f10) as f40 into #list2 from list1 group f4,f5,f6,f7建立新的表。procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  F_DM2.ClientDataSet1.Close;
 F_DM2.ClientDataSet1.CommandText:='if exists (select * from sysobjects where [name]='#list2' and tybe='U') drop table #list2';
  F_DM2.ClientDataSet1.CommandText:='select f4,f5,f6,f7,sum(f8) as f20,smu(f9) as f30,sum(f10) as f40 into #list2 from list1 group f4,f5,f6,f7';
  F_DM2.ClientDataSet1.Execute;
  F_DM2.ClientDataSet1.Open;
  F_DM2.ClientDataSet1.Refresh;
  end;
end.
非常感谢!

解决方案 »

  1.   

    如果是SQL SERVER库的话
    用adoquery最方便了:
    adoquery1.close;
    adoquery1.sql.text := 'exec('if exists (select * from sysobjects where [name]= :Name and tybe='U') drop table #list2 ') select f4,f5,f6,f7,sum(f8) as f20,smu(f9) as f30,sum(f10) as f40 into #list2 from list1 group f4,f5,f6,f7'
    adoquery.execsql;
    没有处理引号
      

  2.   

    我做的是三层,不能用adoquery.就想在clientDataSet的commandtext用SQL语句。
      

  3.   

    3层的啊,要么写成存储过程,要么把我的SQL作为字符串传到业务层去,在业务层处理
    不记得CLIENTDATASET能否处理这方面的东西了,好长时间没用了!!! :)
      

  4.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      F_DM2.ClientDataSet1.Close;
     F_DM2.ClientDataSet1.CommandText:='if exists (select * from sysobjects where [name]='#list2' and tybe='U') drop table #list2';
      F_DM2.ClientDataSet1.Execute;
      F_DM2.ClientDataSet1.CommandText:='select f4,f5,f6,f7,sum(f8) as f20,smu(f9) as f30,sum(f10) as f40 into #list2 from list1 group f4,f5,f6,f7';
      F_DM2.ClientDataSet1.Open;
      F_DM2.ClientDataSet1.Refresh;
      end;
    end.
    改成这样,行不行?
      

  5.   

    照楼上的兄弟做还是不行啊。
      出错提示:Constant expression expected
                Missing operator or semicolon
                Statement expected,but expression of type 'String' found 请高手继续指点。