我用ADO连接Excel后,再用以下代码取表名时出错(不用ADO连接时不出错),请那位大哥给出用ADO直接取表名的好方法。这是我的代码 Set VBEXCEL = CreateObject("Excel.Application")
VBEXCEL.Workbooks.Open app.path & "\xL.xls"
For i = 1 To VBEXCEL.Worksheets.Count
debug.print VBEXCEL.Worksheets(i).Name
Next
VBEXCEL.Quit
Set VBEXCEL = Nothing
VBEXCEL.Workbooks.Open app.path & "\xL.xls"
For i = 1 To VBEXCEL.Worksheets.Count
debug.print VBEXCEL.Worksheets(i).Name
Next
VBEXCEL.Quit
Set VBEXCEL = Nothing
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnn = New ADODB.Connection
cnn.Open "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\Book1.xls;DefaultDir=C:\"
Set rst = cnn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, Empty))
While Not rst.EOF
Debug.Print rst!TABLE_NAME
rst.MoveNext
Wend
Set rst = Nothing
Set cnn = Nothing
End Sub
cnn.Open "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\Book1.xls;DefaultDir=C:\"
Set rst = cnn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, Empty))
第二句用来获取当前连接的数据库结构信息,具体查看 MSDN 中 OpenSchema 方法的帮助,里面列出了不同的 QueryType 需要不同的 Criteria 参数。这里用 adSchemaTables 表示取数据库中表的信息,MSDN 中 说明需要 4 个 Criteria:TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、TABLE_TYPE,由于我们要取全部表信息,所以不加任何过滤,用 4 个 Empty 就可以了。比如要取表 Sheet1$ 的字段信息,MSDN 中说明需要 4 个 Criteria: TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME。就用:
Set rst = cnn.OpenSchema(adSchemaColumns, Array(Empty, Empty, "Sheet1$", Empty))
set Cnn=CreateObject("Adodb.Connection")
set Rst=CreateObject("Adodb.Recordset")
Cnn.Provider="Microsof.JET.OLEDB.4.0"
Cnn.Open "Data Source=D:\DX.xls;Extended Properties='Excel 8.0'"
Rst.open "Select * From [Sheet1$]",Cnn,1,3