类似这样!自己改改 Option ExplicitPrivate Const strConnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Public conn As ADODB.ConnectionPrivate DBPath As String Private Sub Command1_Click() If init() = False Then Exit Sub End If
Dim a As Boolean
a = IsExistTable("E0102")
End Sub'CONN Private Function ConnToAccess(ByVal DBStr As String) As Boolean ConnToAccess = True
'EXIST DB If Dir(DBStr) = "" Then MsgBox DBStr & " IS NOT EXIST", vbCritical, "DB Exists" Exit Function End If
Set conn = New ADODB.Connection conn.ConnectionString = strConnstr & DBStr conn.Open conn.BeginTrans
ConnToAccess = False End Function Private Function init() As Boolean init = False
DBPath = "D:\Mytest\MEDB.mdb" 'CONN DB If ConnToAccess(DBPath) Then Exit Function End If
init = True End Function Private Function IsExistTable(ByVal table As String) As Boolean Dim Rs As ADODB.Recordset Set Rs = CreateObject("ADODB.RECORDSET") Set Rs = conn.OpenSchema(adSchemaTables) Do Until (Rs.EOF) If (UCase(Rs!TABLE_NAME) = UCase(table)) Then IsExistTable = True Exit Function End If Rs.MoveNext Loop IsExistTable = False End Function
'************************************************** 方法 1 '要引用Microsoft DAO 3.6Public Sub enumdatabase(dbpath As String) Dim db As Database Set db = dbengine.OpenDatabase(dbpath) Dim Tables As TableDef, fld For Each Tables In db.tabledefs '这里可以取得表名Tables.name 'For Each fld In Tables.Fields If Left(Tables.Name, 4) <> "MSys" Then Print Tables.Name '& "---" & fld.Name '这里可以取得字段名fld.name 'Next fld Next Tables db.Close Set db = Nothing End Sub'************************************************** 方法 2 ADODB '引用 Microsoft ADO Ext 2.5 for ddl and security '引用 Microsoft ActiveX Data Objects 2.5 LibraryPrivate Sub Command1_Click() call OpenConnection End SubSub OpenConnection() Dim cnn As New ADODB.Connection Dim cat As New ADOX.Catalog cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= c:\bwscale.mdb;" Set cat.ActiveConnection = cnn For i = 0 To cat.Tables.Count - 1 If Left(cat.Tables(i).Name, 4) <> "MSys" Then Print cat.Tables(i).Name Next i End Sub '******************************************************* 方法 3 ADODC '引用 Microsoft ADO Ext 2.5 for ddl and security '部件 Microsoft Ado Data Control 6.0(OLEDB)Private Sub Command1_Click() call OpenConnection End SubSub OpenConnection() Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\bwscale.mdb;Persist Security Info=False" Dim cat As New ADOX.Catalog cat.ActiveConnection = Adodc1.ConnectionString For i = 0 To cat.Tables.Count - 1 If Left(cat.Tables(i).Name, 4) <> "MSys" Then Print cat.Tables(i).Name Next i Adodc1.RecordSource = "select * from bwmain" Set DataGrid1.DataSource = Adodc1 End Sub
是不是没有一个像oracle里面一样能直接取得userTable的方法?
方法 1 复制不全 补上Private Sub Command1_Click() Call enumdatabase("c:\bwscale.mdb") End Sub
Dim cn As Adodb.Connection Dim rs As Adodb.Recordset Dim n As Long Dim sql
Set cn = New Adodb.Connection cn.Open "......" Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE")) While Not rs.EOF Debug.Print rs!TABLE_NAME rs.MoveNext Wend Set rs = Nothing Set cn = Nothing
楼上这个很牛啊!估计可以达到效果,请教一下OpenSchema 的第二个可选参数的作用是什么?
这个最好查下ADO手册,参数常数太多,这儿贴的格式全不对,大概:OpenSchema方法,从提供者获取数据库模式信息。语法:Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)返回值:返回包含模式信息的 Recordset 对象。Recordset 将以只读、静态游标打开。参数 QueryType 所要运行的模式查询类型,可以为下列任意常量。Criteria 可选。每个 QueryType 选项的查询限制条件数组,如下所列: (格式不对,省略了...)SchemaID OLE DB 规范没有定义用于提供者模式查询的 GUID。如果 QueryType 设置为 adSchemaProviderSpecific,则需要该参数,否则不使用它。 说明OpenSchema 方法返回与数据源有关的信息,例如关于服务器上的表以及表中的列等信息。Criteria 参数是可用于限制模式查询结果的值数组。每个模式查询有它支持的不同参数集。实际模式由 IDBSchemaRowset 接口下的 OLE DB 规范定义。ADO 中所支持的参数集已在上面列出。如果提供者定义未在上面列出的非标准模式查询,则常量 adSchemaProviderSpecific 将用于 QueryType 参数。在使用该常量时需要 SchemaID 参数传递模式查询的 GUID 以用于执行。如果 QueryType 设置为 adSchemaProviderSpecific 但是没有提供 SchemaID,将导致错误。提供者不需要支持所有的 OLE DB 标准模式查询,只有 adSchemaTables、adSchemaColumns 和 adSchemaProviderTypes 是 OLE DB 规范需要的。但是对于这些模式查询,提供者不需要支持上面列出的 Criteria 条件约束。远程数据服务用法 OpenSchema 方法在客户端 Connection 对象上无效。注意 在 Visual Basic 中,在由 Connection 对象的 OpenSchema 方法所返回的 Recordset 中有 4 字节无符号整型 (DBTYPE UI4) 的列无法与其他变量比较。有关 OLE DB 数据类型的详细信息,请参阅“Microsoft OLE DB 程序员参考”的第十章和附录 A。
Option ExplicitPrivate Const strConnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
Public conn As ADODB.ConnectionPrivate DBPath As String
Private Sub Command1_Click()
If init() = False Then
Exit Sub
End If
Dim a As Boolean
a = IsExistTable("E0102")
End Sub'CONN
Private Function ConnToAccess(ByVal DBStr As String) As Boolean
ConnToAccess = True
'EXIST DB
If Dir(DBStr) = "" Then
MsgBox DBStr & " IS NOT EXIST", vbCritical, "DB Exists"
Exit Function
End If
Set conn = New ADODB.Connection
conn.ConnectionString = strConnstr & DBStr
conn.Open
conn.BeginTrans
ConnToAccess = False
End Function
Private Function init() As Boolean
init = False
DBPath = "D:\Mytest\MEDB.mdb"
'CONN DB
If ConnToAccess(DBPath) Then
Exit Function
End If
init = True
End Function
Private Function IsExistTable(ByVal table As String) As Boolean
Dim Rs As ADODB.Recordset
Set Rs = CreateObject("ADODB.RECORDSET")
Set Rs = conn.OpenSchema(adSchemaTables)
Do Until (Rs.EOF)
If (UCase(Rs!TABLE_NAME) = UCase(table)) Then
IsExistTable = True
Exit Function
End If
Rs.MoveNext
Loop
IsExistTable = False
End Function
'要引用Microsoft DAO 3.6Public Sub enumdatabase(dbpath As String)
Dim db As Database
Set db = dbengine.OpenDatabase(dbpath)
Dim Tables As TableDef, fld
For Each Tables In db.tabledefs
'这里可以取得表名Tables.name
'For Each fld In Tables.Fields
If Left(Tables.Name, 4) <> "MSys" Then Print Tables.Name '& "---" & fld.Name
'这里可以取得字段名fld.name
'Next fld
Next Tables
db.Close
Set db = Nothing
End Sub'************************************************** 方法 2 ADODB
'引用 Microsoft ADO Ext 2.5 for ddl and security
'引用 Microsoft ActiveX Data Objects 2.5 LibraryPrivate Sub Command1_Click()
call OpenConnection
End SubSub OpenConnection()
Dim cnn As New ADODB.Connection
Dim cat As New ADOX.Catalog
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= c:\bwscale.mdb;"
Set cat.ActiveConnection = cnn
For i = 0 To cat.Tables.Count - 1
If Left(cat.Tables(i).Name, 4) <> "MSys" Then Print cat.Tables(i).Name
Next i
End Sub
'******************************************************* 方法 3 ADODC
'引用 Microsoft ADO Ext 2.5 for ddl and security
'部件 Microsoft Ado Data Control 6.0(OLEDB)Private Sub Command1_Click()
call OpenConnection
End SubSub OpenConnection()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\bwscale.mdb;Persist Security Info=False"
Dim cat As New ADOX.Catalog
cat.ActiveConnection = Adodc1.ConnectionString
For i = 0 To cat.Tables.Count - 1
If Left(cat.Tables(i).Name, 4) <> "MSys" Then Print cat.Tables(i).Name
Next i
Adodc1.RecordSource = "select * from bwmain"
Set DataGrid1.DataSource = Adodc1
End Sub
Call enumdatabase("c:\bwscale.mdb")
End Sub
Dim rs As Adodb.Recordset
Dim n As Long
Dim sql
Set cn = New Adodb.Connection
cn.Open "......"
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))
While Not rs.EOF
Debug.Print rs!TABLE_NAME
rs.MoveNext
Wend
Set rs = Nothing
Set cn = Nothing
这个最好查下ADO手册,参数常数太多,这儿贴的格式全不对,大概:OpenSchema方法,从提供者获取数据库模式信息。语法:Set recordset = connection.OpenSchema (QueryType, Criteria, SchemaID)返回值:返回包含模式信息的 Recordset 对象。Recordset 将以只读、静态游标打开。参数
QueryType 所要运行的模式查询类型,可以为下列任意常量。Criteria 可选。每个 QueryType 选项的查询限制条件数组,如下所列:
(格式不对,省略了...)SchemaID OLE DB 规范没有定义用于提供者模式查询的 GUID。如果 QueryType 设置为 adSchemaProviderSpecific,则需要该参数,否则不使用它。
说明OpenSchema 方法返回与数据源有关的信息,例如关于服务器上的表以及表中的列等信息。Criteria 参数是可用于限制模式查询结果的值数组。每个模式查询有它支持的不同参数集。实际模式由 IDBSchemaRowset 接口下的 OLE DB 规范定义。ADO 中所支持的参数集已在上面列出。如果提供者定义未在上面列出的非标准模式查询,则常量 adSchemaProviderSpecific 将用于 QueryType 参数。在使用该常量时需要 SchemaID 参数传递模式查询的 GUID 以用于执行。如果 QueryType 设置为 adSchemaProviderSpecific 但是没有提供 SchemaID,将导致错误。提供者不需要支持所有的 OLE DB 标准模式查询,只有 adSchemaTables、adSchemaColumns 和 adSchemaProviderTypes 是 OLE DB 规范需要的。但是对于这些模式查询,提供者不需要支持上面列出的 Criteria 条件约束。远程数据服务用法 OpenSchema 方法在客户端 Connection 对象上无效。注意 在 Visual Basic 中,在由 Connection 对象的 OpenSchema 方法所返回的 Recordset 中有 4 字节无符号整型 (DBTYPE UI4) 的列无法与其他变量比较。有关 OLE DB 数据类型的详细信息,请参阅“Microsoft OLE DB 程序员参考”的第十章和附录 A。