求教:使用查询语句动态创建一个表,实际上已经成功生成,但却提示“表已存在”。 ( 积分: 50 )

  • 主题发起人 主题发起人 gechengju
  • 开始时间 开始时间
G

gechengju

Unregistered / Unconfirmed
GUEST, unregistred user!
源码如下,请高手解惑啊!
form1.adoquery5.Close;
form1.adoquery5.SQL.clear;
form1.adoquery5.SQL.Text:=asw;
form1.adoquery5.open;
end else
begin
with form1.adoquery5 do
begin
close;
sql.Clear;
sql.Add('create table ftqi');
sql.Add('(里程 float,左高低 float,右高低 float,左轨向 float,右轨向 float,');
sql.Add('水平 float,轨距 float,三角坑 float,TQI总和 float,速度 float,日期 string)');
execsql;
end;
end;
form1.adoquery5.Close;
form1.adoquery5.open;
 
最好是在创建表之前先行判断一下表名是否已存在,若存在则先删除再创建
这样做更安全一些,也是个良好的习惯
 
代码本身看不出问题.
如果是第二次执行, 当然会有表存在.
如果不是想创建永久表, 可以使用临时表. 在创建前也还是要判断一下是否存在
 
同楼上.
应是二次执行的问题.
 
用try...except...可以跳过错误弹出
 
你把最后一句form1.adoquery5.open去掉试试?
 
adoquery5的SQLTEXT已经是创建那张表了,后面再OPEN当然出问题了
 
眼力比较差, 这里又执行了一次
form1.adoquery5.Close;
form1.adoquery5.open;
 
同意楼上说法,,另外一定要加判断表存在的语句
form1.adoquery5.Close;
form1.adoquery5.SQL.clear;
form1.adoquery5.SQL.Text:=asw;
form1.adoquery5.open;
end else
begin
with form1.adoquery5 do
begin
close;
sql.Clear;
SQL.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[ftqi]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)');//判断表是否存在如果存在则删除,,
SQL.add(' drop table [dbo].[ftqi]');
sql.Add('create table ftqi');
sql.Add('(里程 float,左高低 float,右高低 float,左轨向 float,右轨向 float,');
sql.Add('水平 float,轨距 float,三角坑 float,TQI总和 float,速度 float,日期 string)');
execsql;
end;
end;
form1.adoquery5.Close;
form1.adoquery5.SQL.clear;
form1.adoquery5.SQL.Text:=asw; //加查询的语句..这样才能够打开表
form1.adoquery5.open;
 
用try...except...可以跳过错误弹出

如果多次运行此过程,先判断该表是否存在
 
[:D],汗,这么多高手
 
TO 楼主:
form1.adoquery5.Close;
form1.adoquery5.SQL.clear;
form1.adoquery5.SQL.Text:=asw;
form1.adoquery5.open;
end else
begin
with form1.adoquery5 do
begin
close;
sql.Clear;
sql.Add('if not Exists(select * from Information_Schema.Tables where Table_Name = ''ftqi'')');
sql.Add('Begin');
sql.Add('create table ftqi');
sql.Add('(里程 float,左高低 float,右高低 float,左轨向 float,右轨向 float,');
sql.Add('水平 float,轨距 float,三角坑 float,TQI总和 float,速度 float,日期 string)');
sql.Add('End');
execsql;
end;
end;
form1.adoquery5.Close;
form1.adoquery5.open;
 
同意 3868474 。。
 
感谢各位帮忙,问题已解决,现在散分。
 
后退
顶部