qr4.query1.Close;
qr4.query1.SQL.Clear;
qr4.Query1.SQL.Add('create table tmp as select type_name,calling_nbr,sum(charge/100) charge from imp_call_ticket_total@phs117 a,call_type_info b');
qr4.Query1.SQL.Add('where a.CALLING_NBR between :edit1 and :edit2 and a.ticket_type=b.ticket_type and a.start_time between :datetimepicker3 and :datetimepicker4 ');
qr4.Query1.SQL.Add(' group by calling_nbr,type_name');
qr4.query1.ParamByName('edit1').AsString:=form1.edit1.Text;
qr4.query1.ParamByName('edit2').AsString:=form1.edit2.Text;
qr4.query1.ParamByName('datetimepicker3').AsDate:=form1.datetimepicker3.Date;
qr4.query1.ParamByName('datetimepicker4').AsDate:=form1.datetimepicker4.Date;
qr4.query1.sql.clear;
qr4.Query1.sql.Add('select  calling_nbr,(select charge from tmp where type_name=*) as ch,(select charge from tmp where type_name=*) as sh,');
qr4.Query1.SQL.add('(select charge from tmp where type_name=*) as yz,(select charge from tmp where type_name=*) as qt,');
qr4.Query1.SQL.Add('(select sum(charge) from tmp) as hj from tmp group by calling_nbr');
qr4.query1.sql.clear;
qr4.Query1.SQL.add('drop table tmp');
qr4.query1.Prepare;
qr4.query1.Open;
qr4.query1.Active:=true;
qr4.query1.Open;
qr4.Preview;
我在数据库下直接可以运行,但是
这个运行时报出table or view not exixt,
为什么啊?

解决方案 »

  1.   

    qr4.query1.sql.clear;
    qr4.Query1.sql.Add('select  calling_nbr,(select charge from tmp where type_name=*) as ch,(select charge from tmp where type_name=*) as sh,');
    qr4.Query1.SQL.add('(select charge from tmp where type_name=*) as yz,(select charge from tmp where type_name=*) as qt,');
    qr4.Query1.SQL.Add('(select sum(charge) from tmp) as hj from tmp group by calling_nbr');
    qr4.query1.sql.clear;   //你把sql语句清除了,上面查询没有执行qr4.Query1.SQL.add('drop table tmp');  //你把表tmp删除了
    qr4.query1.Prepare;
    qr4.query1.Open;       
    qr4.query1.Active:=true;
    qr4.query1.Open;
    qr4.Preview;
      

  2.   

    谢谢楼上
    我用的是个临时表,最后是要删除的,
    我是想先建表,再查询,然后再把表tmp删除
    我该怎么做呢?
      

  3.   

    如果是sql server的话,你用表变量比临时表来得爽一些
      

  4.   

    临时表在报表所在的from的onclose事件中删除
      

  5.   

    谢谢大家,
    不知道要使语句全部执行,
    该怎么写代码
    麻烦大家具体帮我指点一下
    我没有用过DELPHI
    一点不通
    谢谢
      

  6.   

    临时表也可以在报表所在的from的销毁事件中删除
    还有你的表如果在程序非法弹出时就会没有被删除
    这样就要求你在产生临时表时查询一下是否这个表已经存在
    如果存在就先清楚表中数据或删除表然后进行操作
    如果你的表在退出后没有被删除
    系统在退出时就会给出一个读内存出错的异常~
    ^_^
      

  7.   

    寫一個存儲過程,然後使用StoreProc組件去觸發他。你這是一個創建臨時表,然後在查詢得語句,在DELPHI得QUERY是不能執行的!
      

  8.   

    qr4.query1.Close;
    qr4.query1.SQL.Clear;
    qr4.Query1.SQL.Add('create table tmp as select type_name,calling_nbr,sum(charge/100) charge from imp_call_ticket_total@phs117 a,call_type_info b');
    qr4.Query1.SQL.Add('where a.CALLING_NBR between :edit1 and :edit2 and a.ticket_type=b.ticket_type and a.start_time between :datetimepicker3 and :datetimepicker4 ');
    qr4.Query1.SQL.Add(' group by calling_nbr,type_name');
    qr4.query1.ParamByName('edit1').AsString:=form1.edit1.Text;
    qr4.query1.ParamByName('edit2').AsString:=form1.edit2.Text;
    qr4.query1.ParamByName('datetimepicker3').AsDate:=form1.datetimepicker3.Date;
    qr4.query1.ParamByName('datetimepicker4').AsDate:=form1.datetimepicker4.Date;
    qr4.query1.execsql;qr4.query1.Close;
    qr4.query1.SQL.Clear;
    qr4.Query1.sql.Add('select  calling_nbr,(select charge from tmp where type_name=*) as ch,(select charge from tmp where type_name=*) as sh,');
    qr4.Query1.SQL.add('(select charge from tmp where type_name=*) as yz,(select charge from tmp where type_name=*) as qt,');
    qr4.Query1.SQL.Add('(select sum(charge) from tmp) as hj from tmp group by calling_nbr');
    qr4.query1.open;
    qr4.Preview;在报表的from的onclose事件中写下面的代码
    qr4.query1.Close;
    qr4.query1.SQL.Clear;
    qr4.Query1.SQL.add('drop table tmp');  //你把表tmp删除了
    qr4.query1.Prepare;
    qr4.query1.execsql;
      

  9.   

    qr4.query1.sql.clear;
    qr4.Query1.sql.Add('select  calling_nbr,(select charge from tmp where type_name=*) as ch,(select charge from tmp where type_name=*) as sh,');
    qr4.Query1.SQL.add('(select charge from tmp where type_name=*) as yz,(select charge from tmp where type_name=*) as qt,');
    qr4.Query1.SQL.Add('(select sum(charge) from tmp) as hj from tmp group by calling_nbr');
    qr4.query1.sql.clear;   //你把sql语句清除了,上面查询没有执行qr4.Query1.SQL.add('drop table tmp');  //你把表tmp删除了
    qr4.query1.Prepare;
    qr4.query1.Open;       
    qr4.query1.Active:=true;
    qr4.query1.Open;
    qr4.Preview;
    你最好用两个QUERY控件来做,这样比较不会出问题
      

  10.   

    我试了楼上的还是通过不了,
    555555
    同时请问execsql是什么意思
      

  11.   

    错误讯息是什么
    execsql  
    用来执行如:insert ,update,delete 等无需返回数据集的 sql语句
      

  12.   

    execsql执行SQL语句,不返回
    接个分!