在Delphi编写的程序中,如何判断Access数据库中是否存在一张指定的表?如果这个问题解决了,我将总结一下我学Access的经验。/踢踏

踢踏 2002-01-24 10:09:37
给定数据集、一个数据库的路径和表名,如果数据库不存在,则建立数据库。如果表不存在,则删除,重新建立一张表。这张表根据传入的数据集建立。现在的问题是如何判断这张表是否存在。以下是我的办法:
procedure TFShowProc.ExportAccess(const pDataSet: TAdoQuery; tFileType: T_FILETYPE;
sPathNameStr,sTableName: String);
var
cat: OleVariant;
StrTemp: String;
i,j: Integer;
aQuery: TADOQuery;
begin
//如果不存在这个数据库文件,则建立这个数据库文件
if not FileExists(sPathNameStr) then
begin
cat := CreateOleObject('ADOX.Catalog');
cat.Create(Format(AdoString,[sPathNameStr]));
end;

aQuery:=TADOQuery.Create(nil);
try
aQuery.ConnectionString := Format(AdoString,[sPathNameStr]);
with aQuery do
try
Close;
//表名相同而表结构不同很难识别,故把以前的表相删除,然后重建指定的表
Sql.Clear;
Sql.Add('select * from '+sTableName+' where 1=0');
Active:=true;

close;
Sql.Clear;
Sql.Add('DROP TABLE '+sTableName);
ExecSql;
finally
StrTemp:=GetDataType(pDataSet,tFileType);//得到数据类型
Close;
Sql.Clear;
SQL.Add('CREATE TABLE '+sTableName+' ('+StrTemp+' )');
ExecSql; //如果指定的表不存在,则这儿出错“Exception EOleException in module EXPORT.DLL at 000714B7” ,EXPORT.DLL是这段程序所在的名称。
close;
Sql.Clear;
Sql.Add('select * from '+sTableName+' where 1=0');
Active:=true;
end;
.
.
.
finally
aQuery.Free;
end;
end;

谁有好的方法??
...全文
433 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
踢踏 2002-01-24
  • 打赏
  • 举报
回复
已经使用AdoConnection解决了问题,结贴。
同时谢谢kuangning(郎之间)(穷人)(其实什么都不是)和各位的帮助
踢踏 2002-01-24
  • 打赏
  • 举报
回复
feng_zi(风子):我现在学习的只是Access的皮毛,对远程管理知之甚少,所有不能确切的回答你的问题。
另外,你可以多看帮助,帮助文件可是学习的好东西。
抱朴守拙 2002-01-24
  • 打赏
  • 举报
回复
关注
feng_zi 2002-01-24
  • 打赏
  • 举报
回复
是的,希望能在internet上对库进行操作,
我想做一个客户端的软件,在本地对库远程管理,这能实现吗?
踢踏 2002-01-24
  • 打赏
  • 举报
回复
feng_zi(风子):
Internet上的Access数据库吗?
feng_zi 2002-01-24
  • 打赏
  • 举报
回复
xxmmmx(踢踏),
我的问题已经解决了,不过还有个问题想问,就网站上的access数据,如何能用delphi对其进行操作?
踢踏 2002-01-24
  • 打赏
  • 举报
回复
这是我在Sql Server里面使用的语句,可以执行,而且不出错,但是放在Access环境中出错。请问要如何使用呢?有类似的语句吗
with tmpQuery do
begin
StrTemp:='IF EXISTS(SELECT name FROM sysobjects where name='''+
sTableName+''')DROP TABLE '+ sTableName;
Sql.Add(StrTemp);
Active:=true;
end;
kuangning 2002-01-24
  • 打赏
  • 举报
回复
用一个ADOConnection有什么不好?
feng_zi 2002-01-24
  • 打赏
  • 举报
回复
OK,thanks!
踢踏 2002-01-24
  • 打赏
  • 举报
回复
to :feng_zi(风子)
那是定义的一个常数:
const
ADOString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'+
'Jet OLEDB:Database Password=''''';
humer 2002-01-24
  • 打赏
  • 举报
回复
有,但我不知你想怎样?
踢踏 2002-01-24
  • 打赏
  • 举报
回复
我不想创建ADOConnection,还有别的方法吗?
如果不行,只好创建了。在说创建它并不费事,
feng_zi 2002-01-24
  • 打赏
  • 举报
回复
if not FileExists(sPathNameStr) then
begin
cat := CreateOleObject('ADOX.Catalog');
cat.Create(Format(AdoString,[sPathNameStr]));
end;
是用来创建一个新的库?
AdoString是从哪来的叱?
踢踏 2002-01-24
  • 打赏
  • 举报
回复
有人感兴趣吗?
humer 2002-01-24
  • 打赏
  • 举报
回复
?
kuangning 2002-01-24
  • 打赏
  • 举报
回复
用ADOConnection1.GetTableNames(alist,true);可以得到数据库中表名的列表,当然知道什么表存不存在了。

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧