问题
最近在工作中遇到使用VB6判断是否ACCESS 2010数据库中是否存在指定表格的问题。对于早期ACCESS数据库(应当主要是ACCESS 2003及以前版本),使用DAO引擎操作是没有问题的。主要相关代码如下:@H_404_3@@H_404_3@For Each mytable In mydatabase.TableDefs@H_404_3@ print mytable.name@H_404_3@Next@H_404_3@@H_404_3@但是,DAO技术已经不适用于ACCESS 2010了。为此,我使用BAIDU搜索,初步得到的一个方法如下:@H_404_3@@H_404_3@cn2.Open "Provider=MSDAsql.1;Persist Security Info=False;Data Source=MS Access Database;Initial Catalog=" + App.Path + "\data\object.accdb"@H_404_3@ @H_404_3@ Debug.Print cn2.ConnectionString@H_404_3@ @H_404_3@ '1,先判断表格是否存在@H_404_3@ cn2.Execute "select * from Single"@H_404_3@ If Err.Number <> 0 Then@H_404_3@'@H_404_3@ MsgBox "目标数据库中表格Single不存在!"@H_404_3@ GoTo end1@H_404_3@ End If@H_404_3@@H_404_3@注意,我使用VB6访问ACCESS2010时使用的不是Microsoft.Jet.OLEDB.4.0技术,我发现使用它访问高版本的 ACCESS(INCLUDING 2007)是不行的,这个你相信就是了,是没有问题的。我们看到,上面代码使用了陷阱技术来分析数据库中是否存在指定表格。但可怜的是,上述技术对于 ACCESS 2010是没有用的(我亲自试验的)。@H_404_3@@H_404_3@
解答
正确的方法(之一)是,使用ADO对象的OpenSchema方法。相关代码如下: cn2.Open "Provider=MSDAsql.1;Persist Security Info=False;Data Source=MS Access Database;Initial Catalog=" + App.Path + "\data\object.accdb"Dim bYes As Boolean bYes = False Set rs2 = cn2.OpenSchema(adSchemaTables) Do Until rs2.EOF Debug.Print rs2!TABLE_NAME If rs2!TABLE_NAME = "Single" Then bYes = True GoTo cont1 End If rs2.MoveNext Loop cont1: rs2.Close If Not bYes Then GoTo end1 End If