临时表的奇怪现象(30分)

  • 主题发起人 主题发起人 Hecules
  • 开始时间 开始时间
H

Hecules

Unregistered / Unconfirmed
GUEST, unregistred user!
临时表的奇怪现象:
我在一个窗口(ShowModal方式打开)
在窗口的Create中创建临时表
Close中删除临时表

代码如下:
OnCreate(Sender);
begin
...
with ADOQuery_tmp do
begin
close;
with sql do
begin
clear;
Text := ' if exists(select name from tempdb..sysobjects where name like ' + '''' + '#temp123%' + '''' + ')';
Text := Text + ' drop table #temp123 ';
end;
ExecSql;
end;
with ADOQuery_tmp do
begin
close;
with sql do
begin
clear;
Text := 'create table #temp123(';
Text := Text + ' hpbh varchar(12) PRIMARY KEY, ';
Text := Text + ' hpmc varchar(22), ';
Text := Text + ' dj numeric(18,2), ';
Text := Text + ' js numeric(18,1), ';
Text := Text + ' je numeric(18,2), ';
Text := Text + ' ckm varchar(16))';
end;
ExecSql;
end;
...
end;

OnClose(Sender);
begin
...
with ADOQuery_tmp do
begin
close;
with sql do
begin
clear;
Text := ' if exists(select name from tempdb..sysobjects where name like ' + '''' + '#temp123%' + '''' + ')';
Text := Text + ' drop table #temp123 ';
end;
ExecSql;
end;
...
end;

但,我在使用:临时表时,却发现一个怪事:
本窗口,第一次:创建时,运行下面代码(无论运行多少次),正常。
但,关闭本窗口后,再打开时,再:运行下面代码,就提示:临时表无效。
请教:错误出在哪?如何改?谢谢

...
ttt := ' insert into #temp123 ';
ttt := ttt + ' select hpbh,hpmc,dj,js,(dj * js),ckm ';
ttt := ttt + ' from table_kc where (0=0)';
with ADOQuery_tmp do
begin
Close;
Sql.Clear;
Sql.Add('delete from #temp123');
Prepared := True;
Execsql;
end;
with ADOQuery_tmp do
begin
Close;
Sql.Clear;
Sql.Add(ttt);
Prepared := True;
Execsql;
end;
...

 
呵呵
OnCreate 是在窗体创建时的事件,对应于 OnDestroy

OnClose 只是窗口关闭,不一定销毁的,对应于 OnShow

从你的代码来看,把OnCreate中的代码移到OnShow中即可解决问题
 
if exists(select name from tempdb..sysobjects where name like ' + ''''
+ '#temp123%' + '''' + ')';
//改为
if (select object_id(name) from from tempdb..sysobjects where name like #temp123%' )>0 then
//exist 不好用
临时表不用删除
 
To:青萍
我把:OnCreate的代码,移到:Onshow中,
执行,还是一样,不行。
请再支支招。
 
谢谢:ugvanxk
按,你的:改了代码,一切正常了。非常感谢。
 
多人接受答案了。
 
后退
顶部