VBA数据库解决方案第12讲:如何判断数据库中某个数据表是否存在

论坛 期权论坛 期权     
VBA语言专家   2019-6-16 04:31   2052   0
点蓝字关注,回复“VBA”获取专业资料

《VBA代码解决方案》系列书作者
头条百家平台 VBA资深创作者
_______________________________

大家好,今天给继续讲解VBA与数据库解决方案,今天讲第12讲:如何判断数据库中的表是否存在。为什么要讲这讲的内容呢?如我在上一讲讲的内容中有这段代码:
Set catADO =CreateObject("ADOX.Catalog")
   strPath = ThisWorkbook.Path & "\mydata2.accdb" '此处是一个完整的路径
   strTable = "员工记录" '表名称
   If Dir(strPath)  "" Then Kill strPath '如果有一个名称相同的表,那么删除
   catADO.Create "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="& strPath '创建数据库并连接。
当我要创建一个数据库的时候,要首先判断一下这个数据库是否是存在,如果没有存在才能创建,如果已经存在,那么先要删除这个数据库才能创建,不然会出错的。对于关系表也是如此,如果我们要新建一个表,那么判断这个表是否存在是必须的。如何做到呢?我们看下面的代码:
Sub mynaTables()'判断数据表是否存在
    Dim cnADO As Object
    Dim strPath As String
    Set cnADO =CreateObject("ADODB.Connection")
    strPath = ThisWorkbook.Path &"\mydata2.accdb"
    cnADO.Open"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath
    If cnADO.OpenSchema(20, Array(Empty, Empty,"员工记录",Empty)).EOF Then
        MsgBox "[员工记录] 表" & "不存在"
    Else
        MsgBox "[员工记录] 表" & "已存在"
    End If
End Sub
代码截图:


代码讲解:
①Set cnADO = CreateObject("ADODB.Connection")
    strPath = ThisWorkbook.Path &"\mydata2.accdb"
    cnADO.Open"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath
   上面的语句是建立ADO对象,及打开连接,就不再过多的讲解了
②If cnADO.OpenSchema(20, Array(Empty, Empty, "员工记录", Empty)).EOF Then
上面的语句中用到了cnADO.OpenSchema()
OpenSchema 方法意思是从提供者获取数据库模式信息,返回包含模式信息的 Recordset 对象。
语法:OpenSchema(QueryType, Criteria, SchemaID)
参数,QueryType 所要运行的模式查询类型,可以选择的常量,由于值较多,我们只是给出文中所用到的值 adSchemaTables = 20 表示请求有关表的信息
Criteria  可选。每个QueryType 选项的查询限制条件数组,比如 QueryType是adSchemaTables也就是20的话,Criteria可用的就是TABLE_CATALOG(表的目录),TABLE_SCHEMA(表的模型),TABLE_NAME(表的名字),TABLE_TYPE(表的类型),由于在我们的代码中我们要求的是表明是“员工记录”,所以我们给出的数组是:Array(Empty, Empty, "员工记录", Empty))
第三个参数SchemaID极少用到。如果 QueryType 设置为 adSchemaProviderSpecific = -1请求提供者特定的信息,则需要该参数,否则不使用它.
EOF它是endoffile(EndofFile就是文件的结束,也即EOF,通常用来判断文件的操作是否结束的标志)的缩写,表示"文字流"(stream)的结尾。
这样,代码IfcnADO.OpenSchema(20, Array(Empty, Empty, "员工记录", Empty)).EOF then 代表的意思:如果到了文件的操作结束,意思是说也没有找到表名称为“员工记录”的表,那么就是没有找到。


好了,我们运行一下上面的代码:


今日内容回向:
1.  如何判断一个数据表是否存在?
2  对OpenSchema的语法,是否了解呢?

_____________________________

觉得有启发,点个“在看”,转给朋友们
欢迎你“留言”,和作者直接交流

更多关联阅读








  





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:200
帖子:40
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP