问题

最近在工作中遇到使用VB6判断是否ACCESS 2010数据库中是否存在指定表格的问题。对于早期ACCESS数据库(应当主要是ACCESS 2003及以前版本),使用DAO引擎操作是没有问题的。主要相关代码如下:

1
2
3
For Each mytable In mydatabase.TableDefs
     print mytable.name
Next

但是,DAO技术已经不适用于ACCESS 2010了。为此,我使用BAIDU搜索,初步得到的一个方法如下:

1
2
3
4
5
6
7
8
9
10
11
cn2.Open  "Provider=MSDASQL.1;Persist Security Info=False;Data Source=MS Access Database;Initial Catalog="  + App.Path +  "\data\object.accdb"
             
             Debug.Print cn2.ConnectionString
             
             ' 1 , 先判断表格是否存在
            cn2.Execute  "select * from Single"
             If Err.Number <>  0  Then
'
                 MsgBox  "目标数据库中表格Single不存在!"
                 GoTo end1
             End If

注意,我使用VB6访问ACCESS2010时使用的不是Microsoft.Jet.OLEDB.4.0技术,我发现使用它访问高版本的ACCESS(INCLUDING 2007)是不行的,这个你相信就是了,是没有问题的。我们看到,上面代码使用了陷阱技术来分析数据库中是否存在指定表格。但可怜的是,上述技术对于ACCESS 2010是没有用的(我亲自试验的)。

解答

正确的方法(之一)是,使用ADO对象的OpenSchema方法。相关代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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



















本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/1439714,如需转载请自行联系原作者