0

我有一个 Access 数据库,它需要从 Excel 电子表格中获取每月更新。电子表格具有与数据库表不匹配的有意义的列标题。另外,我需要检查数据是要合并还是追加。所以我想从电子表格中获取一个数据集,我可以循环并让我的代码决定如何处理数据。我可以在 Access 中创建一个与电子表格结构完全匹配的临时表,使用 DoCmd.TransferSpreadsheet acImport 填充它,执行我的操作,然后将其删除。

这是最简单的方法,还是我可以做类似的事情:

strQuery = "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" _
   & Chr(34) & fromFile & Chr(34) & "].[sheet1]"

Set rs = CurrentDb.OpenRecordset(strQuery)

此代码产生错误:无法更新。数据库或对象是只读的

4

2 回答 2

0

我认为您需要使用 ADO,而不是 DOA 记录集。ADO 要求您添加一个引用(除非您使用后期绑定)。ADO 的某些属性和方法与 DAO 不同,例如 ADO 中没有 .Edit 方法。

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\Scripts\Test.xls;" & _
        "Extended Properties=""Excel 8.0;HDR=Yes;"";" 

objRecordset.Open "Select * FROM [Sheet1$]", _
    objConnection, adOpenStatic, adLockOptimistic, adCmdText

Do Until objRecordset.EOF
    Wscript.Echo objRecordset.Fields.Item("Name"), _
        objRecordset.Fields.Item("Number")
    objRecordset.MoveNext
Loop

这是从 MS 的 technet 站点获取的,您可以在其中获取更多详细信息: http ://technet.microsoft.com/en-us/library/ee692882.aspx

于 2013-08-15T17:34:59.807 回答
0

我认为最好在访问中创建新表,然后首先将所有 excel 数据复制到该表,然后一切都会正常运行并且更快

宜兰

于 2013-08-15T20:54:30.187 回答