1,ADO方式下判断数据表是否存在
面构造两个可重载的函数,用于在ADO方式下判断数据库的数据表是否存在。
函数一:
// ------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
Function TableExist( pAdoCmd: TADOCOMMAND; pcTable : string ) : boolean ; overload ;
varcError : string ;
begin
ADO_COMMAND_EXEC( pAdoCmd, 'Select top 1 from ' + pcTable , cError );
result := ( cError = '' );
end ;
函数二:
// ------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
Function TableExist( pConn:TADOConnection; pcTable : string ) : boolean ; overload ;
vartmpFldList : TStrings ;
nLoop : integer ;
begin
Result := False ;
tmpFldList := TStringList.Create ;
pConn.GetTableNames( tmpFldList, True ); // 包含系统表
for nLoop := 0 to tmpFldList.Count - 1 do
begin
if uppercase( tmpFldList[nLoop] ) = uppercase( pcTable ) then
begin
Result := True ;
break ;
end;
end;
tmpFldList.Free ;
end;
2,sql语句式
select * from sysobjects where name= 表名 and xtype=''u'' '
或者如下更容易看明白:
SQL.Add('select name from sysobjects where name = tmp and type=u');
open;
...
if ADOQuery.IsEmpty then
ShowMessage('表tmp不存在!');
注意:是xtype不是type,
Type是在6.0就有的,XType在7.0才出现:
Type
对象类型。可以是下列值之一:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
FN = 标量函数
IF = 内嵌表函数
K = PRIMARY KEY 或 UNIQUE 约束
L = 日志
P = 存储过程
R = 规则
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
V = 视图
X = 扩展存储过程
XType
对象类型。可以是下列对象类型中的一种:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程
如果是实表可以用
if exists (select * from sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[表名]--如果表存在就删除
如果是临时表可以用
if object_id('tempdb..##temp') is not null
drop table ##temp