如何确定SQL的数据库是否存在?(100分)

  • 主题发起人 主题发起人 jony123
  • 开始时间 开始时间
J

jony123

Unregistered / Unconfirmed
GUEST, unregistred user!
我要动态建立一个表,但在建表前必须先确定所在的库是否存在databases中
,如何去确定它呢?
jony
 
先尝试连接,连上了就有,否则就没有,用try...except...end
 
Function TableExist(const TableName:string):string;
const
sql='select * from %s where 1<>1 ';
begin
try
with query1 do
begin
close;
sql.clear;
sql.add(format(sql,[tableName]));
open;
result:=true;
end;
except
result:=False;
end;
end;
 
用BDE函数:

function TDatabase.TableExists(TableName:string):boolean;
var
Cursor: HDBICur;
WildCard: PChar;
SPattern: array[0..127] of Char;
Desc: TBLBaseDesc;
begin
WildCard := nil;
if TableName<>'' then
begin
if ExtractFileExt(TableName)='' then
TableName:=ChangeFileExt(TableName, '.*');
WildCard := AnsiToNative(Locale, TableName, SPattern, SizeOf(SPattern) - 1);
end;
try
Check(DbiOpenTableList(Handle, True, True, WildCard, Cursor));
Result:=DbiGetNextRecord(Cursor, dbiNOLOCK, @Desc, nil) = 0;
finally
DbiCloseCursor(Cursor);
end;
end;

 
不对,我是想create database "test‘前知道有无test的存在,最好不要用try
 
不知道你要建库还是建表,其实都一样:
用 Session ,通过调用 GetAlisaParms 方法获取在BDE中定义的数据库别名
调用 GetTableNames 可以指定数据库中全部的表名
如果仅是判断表是否存在,还可以用 ADOConnection, 具体用法见帮助
或参考书!对了,Session 是全局的,不必显式声明!
 
连上数据库,读出库中的所有表,如果你的表不在其中,那么就建一个表,如果在那就操作它
BTW:呵呵…!在DELPHI里怎么做我不知道,我只试过在ASP里做过,不过思想都是一样
 
USE Master
SELECT Name FROM sysdatabases|sysobjects where name=数据库名称
可行否?如果结果NULL,不存在,否则存在。
 
try this:
select tablename from sysobjects where name=tablename
如果有返回的结果,表存在否则不存在
 
to zqmagic:
是否应该加上对 对象类型的限制:
select tablename from sysobjects where name=tablename and type='U'
 
多人接受答案了。
 
后退
顶部