Either us ADOX (ADO extension library) or use the OpenSchema method of the Connection Object. Here is an example:
Private Sub DisplayInfo()
Dim cn as ADODB.Connection
Dim rsTables As ADODB.Recordset
Dim rsFields As ADODB.Recordset
Set cn = new ADODB.connection
cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DataBaseName;Data Source=ServerName"
cn.Open
Set rsTables = cn.OpenSchema(adSchemaTables)
Do While Not rsTables.EOF
If oRsTables("TABLE_TYPE").Value = "TABLE" Then
Debug.Print "Table: " & rsTables("TABLE_NAME").Value
Set oRsFields = cn.OpenSchema(adSchemaColumns, _ Array(Empty, Empty,
oRsTables("TABLE_NAME").Value, Empty))
Do While Not rsFields.EOF
Debug.Print " Column: " & oRsFields("COLUMN_NAME").Value rsFields.MoveNext
Loop
Debug.Print
End If
rsTables.MoveNext
Loop
End Sub