在delphi中创建sqlserver表格之前如何判断数据库中是否有同名的表格名? ( 积分: 20 )

  • 主题发起人 主题发起人 rgn
  • 开始时间 开始时间
R

rgn

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi中创建sqlserver表格之前如何判断数据库中是否有同名的表格名?有的话则提示是否删除该表格,如果按是则删除该表格然后重新建立该表格,如果按否则不执行。
if exists(select 1 from sysobjects where xtype = 'U' and id = Object_id(N'tablename'))
drop table tablename
go

create table tablename()
这个是在查询分析器中的语句。可是在delphi中怎样写呢?
 
exists 是指取 后面 是否有行存在 ,后面这句表示查到表名为tablename的就返回1
在delphi 就好办了,sqlquery.sql.add('select 1 xxxx');等
然后判定 sqlquery.recordcount >0 或 查第一字段 值= 1 就ok
drop xxx 和 create xxx 就用 sqlquery.execute 这是用来执行不返回结果的语句的
 
在SQL查询分析中写入的SQL语句,在DELPHI中应该都可以
 
if exists(select 1 from sysobjects where xtype = 'U' and id = Object_id(N'tablename'))
drop table tablename

用ADOQuery
execute就行了
 
用session控件可以取出某个库的所有表名;
或者
用adoconnection的GetTableNames方法,得到所有表名
SL := TStringList.Create;
ADOConnection1.GetTableNames(SL, False);
if sl.indexOf('你新建的表名') <> -1 then
showMessage('已经有了');
 
楼上的方法不错,有这个方法,回去试试
 
TmpStr:='select * from sysobjects where name = '''+DD+'''';
Fond:=False;
with IndexQT do
begin
Close;
SQL.Clear ;
SQL.Add(TmpStr);
Open;
if not eof then
begin
Fond:=True;
CurTable:=DD;
end;
end;
if not Fond then
begin
TmpStr:='CREATE TABLE [dbo].['+DD+'] ('+
'[XX1] [char] (14) NOT NULL ,'+
'[XX2] [float] NULL , '+
'[XX3] [float] NULL ,'+
'[YY1] [float] NULL ,'+
'[YY2] [float] NULL ,'+
'[YY3] [float] NULL ,'+
'[ZZ1] [int] NULL ,'+
'[ZZ2] [int] NULL ,'+
'[ZZ3] [datetime] NULL'+
') ON [PRIMARY]' ;
with IndexQT do
begin
Close;
SQL.Clear ;
SQL.Add(TmpStr);
ExecSQL;
end;
end;
按这段代码做,就可以了.
 
DD就是你要查询的表名.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部