检查访问数据库是不是存在表
Posted
技术标签:
【中文标题】检查访问数据库是不是存在表【英文标题】:Check access database if table exists检查访问数据库是否存在表 【发布时间】:2012-07-27 09:41:57 【问题描述】:有没有办法检查表是否存在于 mdb 文件中?我使用php和ADOdb连接来连接。
这是我的代码
$conn = new COM("ADODB.Connection");
$conn->open("DRIVER=Microsoft Access Driver (*.mdb); PWD=somepassword; DBQ=".dirname(__FILE__)."\filename.MDB;");
if (table exists) \\ where i need the code to check
$createtable = $conn->execute("CREATE TABLE $tblname (fieldsample CHAR(1))");
else
$insertqry = $conn->execute("INSERT INTO $tblname (field) VALUES (value)");
整天都在浏览语法,但到目前为止我看到的都是 VB 和 ASP。
【问题讨论】:
可怕的讨厌的工作,但我不知道你不能尝试INSERT
,如果失败则创建表?
您可以检查架构:***.com/questions/120114/…
【参考方案1】:
在 COM 可用的情况下,您需要添加对 DAO 的引用并检查 TableDefs
collection。既然你不能这样做,你将不得不求助于查询隐藏的MSysObjects
表:
SELECT COUNT(*) FROM MSysObjects WHERE Name = 'myTable' AND Type = 1
(有关此系统表的更多详细信息:Using MSysObjects)
编辑:根据这个问题,您可以使用 ADO 访问 模式数据,这应该可以让您确定表是否存在:
$rs_meta = $conn->OpenSchema(20, array(Null, Null, Null, "TABLE"));
Retrieve catalog, metadata or schema information from MS Access database when connecting with PHP
【讨论】:
MSysObjects 是一项不受支持的功能,并且由于权限问题,该表在 MS Access 之外经常不可用。权限可能是一个真正需要解决的问题。【参考方案2】:在 LIMIT 1 的表上 SELECT * 怎么样,并捕获错误/异常?
(在ACCESS中LIMIT被称为TOP。)
比如:
SELECT TOP 1 * FROM <YOURTABLE>;
在 ACCESS 方面我学会了实用,因为它几乎不是一个数据库。
【讨论】:
真正的 DaveRandom,我自己才发现。是TOP。固定。 我同意...如果是我,我会使用 sqlite,因为我更喜欢它,但你真的不能和老人争论,他们的脑袋像石头一样坚硬。【参考方案3】:$createtable = $conn->execute("CREATE TABLE $tblname (fieldsample CHAR(1))");
您实际上可以修改查询以获得您想要的结果:
$createtable = $conn->execute("CREATE TABLE IF NOT EXISTS $tblname (fieldsample CHAR(1))");
如果该查询不存在,将执行(创建表)。如果它已经存在,则不会执行此查询。
【讨论】:
我猜它只适用于像mysql这样的数据库。我想我会同意 DaveRandom,只需执行一个插入查询,用 try-catch 包围它,如果失败,则创建表,如果没有,则执行您的查询。以上是关于检查访问数据库是不是存在表的主要内容,如果未能解决你的问题,请参考以下文章