如何知道数据库中包括哪些表和字段 当你打开Database对象以后,Database对象包括TableDefs集合。这个集合包括数据库中所有表的定义。表的个数为TableDefs.Count。你可以使用TableDefs(0),......,TableDefs(TableDefs.Count - 1)来依次获得各个表的定义(TableDef对象)。你也可以利用For Each ... Next来遍历整个集合。每个TableDef对象都表示一个表的结构,其Name属性就是表名。如果打开一个MDB文件,你可能会得到比实际多的表的个数,这是因为Access数据库中还有一些系统表,这些表通常不会被Access和VB显示出来,但你可以使用VB访问它们。如果你不想让这些系统表出现在你的列表中,可以判断TableDef的Attribution属性,如: IF TableDef(i).Attibution And dbSystemObject Then ' 系统表 Else ' 普通的用户表 End If 得到一个TableDef对象,你可以进一步访问TableDef.Fields集合。这个集合表示有多少个字段,它的每个成员为Field对象,代表一个字段。访问的方法类似TableDefs。每个Field对象有若干个属性,包括字段名、字段类型等。 在VB的帮助有相应的例子。另外,我经常象初学者推荐VB的例子VisData(在Samples\VisData目录)。在这个例子中包括很多有用的程序段落。比如在VisData.bas中,GetTableList过程获得所有表名。
参考:http://www.china-askpro.com/msg14/qa13.shtml
Private Sub Command4_Click() '列出所有表,如果省略第二个参数则显示所有表(连同系统表一起显示) Dim Link As New ADODB.Connection Dim Rs As New ADODB.Recordset Link.CursorLocation = adUseClient Link.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False" Link.Open Set Rs = Link.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "Table")) Do Until Rs.EOF MsgBox Rs!TABLE_NAME Rs.MoveNext Loop End Sub
IF TableDef(i).Attibution And dbSystemObject Then
' 系统表
Else
' 普通的用户表
End If
得到一个TableDef对象,你可以进一步访问TableDef.Fields集合。这个集合表示有多少个字段,它的每个成员为Field对象,代表一个字段。访问的方法类似TableDefs。每个Field对象有若干个属性,包括字段名、字段类型等。
在VB的帮助有相应的例子。另外,我经常象初学者推荐VB的例子VisData(在Samples\VisData目录)。在这个例子中包括很多有用的程序段落。比如在VisData.bas中,GetTableList过程获得所有表名。
Dim Link As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Link.CursorLocation = adUseClient
Link.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False"
Link.Open
Set Rs = Link.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "Table"))
Do Until Rs.EOF
MsgBox Rs!TABLE_NAME
Rs.MoveNext
Loop
End Sub