Dim cnn As New ADODB.Connection Dim cat As New ADOX.Catalog Dim i As Integer cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source= c:\Biblio.mdb;" Set cat.ActiveConnection = cnn For i = 1 To cat.Tables.Count - 1 Debug.Print cat.Tables(i).Name Next 上面的代码可 得到所有的表名。 ADOX 库简介: Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and SecurityCatalog 表示一个数据库Dim cat as new Catalog Catalog.ActiveConnection = "OLEDB 数据源连接串..."Catalog.Tables 属性表示数据库中表集合. 你可以搜索这个表集合以确定是否存在指定的表Catalog.Views 属属性表示数据库中视图集合. 你可以搜索这个视图集合以确定是否存在指定的视图Table.Columns 属性表示列集合, 你可以搜索这个列集合以确定是否存在指定的列还有 Catalog.Procedures 性性表示存储过程集合, Table.Indexes 表示 索引集合等等 .Absoluteposition 指示 Recordset 对象的当前记录的序号位置。
我的办法是访问库和表,拦截错误。例如(判断表的存在):On Error Goto ErrHandler '建立连接和访问数据库表 '...... Exit SubErrHandler: If Err.Number = 库不存在引起的错误号 Then '建立数据库 '...... End If If Err.Number = 表不存在引起的错误号 Then '建立数据库表 '...... End If Resume
如果是SQL Server,你可以在SysObject表里查询新建的对象是否存在。
SQL中判断一个表存在: 'Connect_P 是一个连接 Connect_P.Execute "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Ut_Code]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) " Connect_P.Execute "IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'KFGL')"
例: '======================================================================= 'ALTER TABLE 表结构修改过程,判断如果不存在SBPB或ZXPB字段就增加这两个字段,有就不添加。 '=======================================================================Connect_P.Execute "if not exists (SELECT a.name as Tab,b.name as ZD FROM syscolumns b,sysobjects a where a.id=b.id and a.name='Tab_PM' and b.name='SBPB') ALTER TABLE Tab_PM ADD SBPB bit DEFAULT 0 WITH VALUES " Connect_P.Execute "if not exists (SELECT a.name as Tab,b.name as ZD FROM syscolumns b,sysobjects a where a.id=b.id and a.name='Tab_PM' and b.name='ZXPB') ALTER TABLE Tab_PM ADD ZXPB bit DEFAULT 0 WITH VALUES "
判断一个库存在 Connect_P.Execute "IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'KFGL')"
Connect_P.Execute "IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'KFGL')"语句在http://search.csdn.net/Expert/topic/2527/2527544.xml?temp=.9001886 这个上头有详细的说明
Dim cat As New ADOX.Catalog
Dim i As Integer
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= c:\Biblio.mdb;"
Set cat.ActiveConnection = cnn
For i = 1 To cat.Tables.Count - 1
Debug.Print cat.Tables(i).Name
Next
上面的代码可 得到所有的表名。 ADOX 库简介: Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and SecurityCatalog 表示一个数据库Dim cat as new Catalog
Catalog.ActiveConnection = "OLEDB 数据源连接串..."Catalog.Tables 属性表示数据库中表集合. 你可以搜索这个表集合以确定是否存在指定的表Catalog.Views 属属性表示数据库中视图集合. 你可以搜索这个视图集合以确定是否存在指定的视图Table.Columns 属性表示列集合, 你可以搜索这个列集合以确定是否存在指定的列还有 Catalog.Procedures 性性表示存储过程集合, Table.Indexes 表示 索引集合等等
.Absoluteposition
指示 Recordset 对象的当前记录的序号位置。
如果是SQL Server,你可以在SysObject表里查询新建的对象是否存在。
'建立连接和访问数据库表
'......
Exit SubErrHandler:
If Err.Number = 库不存在引起的错误号 Then
'建立数据库
'......
End If
If Err.Number = 表不存在引起的错误号 Then
'建立数据库表
'......
End If
Resume
'Connect_P 是一个连接
Connect_P.Execute "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Ut_Code]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) "
Connect_P.Execute "IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'KFGL')"
例:
'=======================================================================
'ALTER TABLE 表结构修改过程,判断如果不存在SBPB或ZXPB字段就增加这两个字段,有就不添加。
'=======================================================================Connect_P.Execute "if not exists (SELECT a.name as Tab,b.name as ZD FROM syscolumns b,sysobjects a where a.id=b.id and a.name='Tab_PM' and b.name='SBPB') ALTER TABLE Tab_PM ADD SBPB bit DEFAULT 0 WITH VALUES "
Connect_P.Execute "if not exists (SELECT a.name as Tab,b.name as ZD FROM syscolumns b,sysobjects a where a.id=b.id and a.name='Tab_PM' and b.name='ZXPB') ALTER TABLE Tab_PM ADD ZXPB bit DEFAULT 0 WITH VALUES "
Connect_P.Execute "IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'KFGL')"
这个上头有详细的说明