我似乎无法找到一种简单的方法,只需从ACCESS SQL View访问SQL并手动完成。是否有一些神奇的方法可以使用下面的代码并执行此操作?
值得指出的是,我正试图从Excel的VBA中做到这一点。
'filmtimes' => array(self::HAS_MANY, 'FilmsTimesRecord', 'film_id')
答案 0 :(得分:1)
只需使用初始化的ADO记录集对象,调用查询,然后运行Range.CopyFromRecordset方法(指定最左边的工作表单元格以放置结果)。
另外,请使用正确的连接字符串查看已更改的连接打开例程。并且因为记录集不会自动引入列标题而只引入数据,所以包含了一个添加的循环,它遍历记录集的字段名称。
Private Sub tryagain()
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strConnection As String
Dim i as Integer, fld As Object
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source='C:\Users\Ashleysaurus\Desktop\xyzmanu3.accdb';"
con.Open strConnection
rs.Open "SELECT * FROM [Invoice Query]", con
' column headers
i = 0
Sheets(1).Range("A1").Activate
For Each fld In rs.Fields
ActiveCell.Offset(0, i) = fld.Name
i = i + 1
Next fld
' data rows
Sheets(1).Range("A2").CopyFromRecordset rs
rs.Close
cn.Close
End Sub
顺便说一下,上面这个设置甚至可以查询Excel工作簿,因为Jet / ACE SQL引擎是一种可用于所有Office或Windows程序的Windows技术(.dll文件)。
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source='C:\Path\To\Workbook.xlsm';" _
& "Extended Properties=""Excel 8.0;HDR=YES;"";"
strSQL = "SELECT * FROM [Sheet1$]"