access,如何判断一个名为“***”的表是否存在?我用的select语句,内有代码 (30分)

Z

zhanghb

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2642640

function tableExist(tablename:string;Query:TADOQuery): boolean;
var
s:string;
begin
result:=True;
s:='select top 1 * from '+ tablename +' where 1=0';
Query.Close;
Query.SQL.Clear;
Query.SQL.Add(s);
try
Query.Open;
except
// on EOleException do
// showmessage('asdfasdfasdf');
result:=false;
end;
end;


这样的结果是: 当表存在时,可以很好的判断出。 当表不存在时,就有异常了,
系统提示,“表*****并不存在”?

是不是那个异常没处理好?

我用的adoconnection连的access数据库,不打算用Tdatabase控件
 
//添加Adotable,连接数据库
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
list:tstringlist;
tablename : string;
begin
tablename := 'table';
try
list:=tstringlist.create;
at.GetIndexNames(list);
for i := 0 to list.Count - 1 do
if tablename = list.Names then
begin
showmessage('表存在');
exit;
end
else
showmessage('表不存在');
finally
list.Free;
list := nil;
end;
end;
 
你可以这样判断:
procedure TForm1.Button1Click(Sender: TObject);
var S:TStrings;
begin
S:TStringList.Create;
ADOConnection1.GetTableNames(S);
if S.IndexOf('****')<0 then //不存在
FreeAndNil(S);
end;
 
to 网事如风, : 多谢

老大,不过那个GetIndexNames找到的是一个表的索引吧? 不是一个库里的所有表名?

delphi 的 help 说:
Retrieves a list of available indexes for a table.
procedure GetIndexNames(List: TStrings);

我用你的思路试了一下,怎么试都是“表不存在”,说明取的不是表名,应该是索引名

 
搞定搞定

最后圆满的代码是:

function tableExist(tablename:string): boolean;
var
i : integer;
list:tstringlist;
begin
try
list:=tstringlist.create;
datamod.ADOConnection1.GetTableNames(list);
for i := 0 to list.Count-1 do
if tablename = list.Strings then
begin
result:=True;
showmessage('表存在');
exit;
end;
result:=False;
showmessage('表不存在');
finally
list.Free;
list := nil;
end;
end;


谢大家指点!!!!
 
楼上:TYZhang大侠的可用,我下来测测!
procedure TForm1.Button1Click(Sender: TObject);
var S:TStrings;
begin
S:TStringList.Create;
ADOConnection1.GetTableNames(S);
if S.IndexOf('****')<0 then //不存在
FreeAndNil(S);
end;
 

Similar threads

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