检查访问数据库是不是存在表

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 包围它,如果失败,则创建表,如果没有,则执行您的查询。

以上是关于检查访问数据库是不是存在表的主要内容,如果未能解决你的问题,请参考以下文章

从VB6检查访问中的假期表中是不是存在日期

检查以检查 Django 中是不是存在数据库表?

检查是不是存在 SQL 表

如何检查数据库中是不是存在表或列?

检查数据库中是不是存在表 - PL SQL

当表有0行时如何检查数据库表是不是存在?