创建表并将数据写入表是MS Access

时间:2011-11-30 20:17:17

标签: ms-access vba

编辑:因为我对同一代码有不同的问题而改变了

第二次编辑:添加似乎正在解决问题的其他代码

我在访问中创建了一个vba程序,它聚合来自多个外部源的数据并将结果写入新表。理想情况下,当我运行程序时,我想要清除表中当前的所有数据,并将其替换为我的新数据。我目前正在删除表格中的所有数据...然后编写我的新数据

以下是参考代码

Function getTestFixtures(FixtureName As String) As Recordset
Dim db As Database

Set db = OpenDatabase(GetDBPath & "TestFixtures.xlsx", False, False, "Excel 12.0;HDR=Yes;")

If db Is Nothing Then
     MsgBox "Can't find the file!", vbExclamation, ThisWorkbook.Name
     Exit Function
End If

Set getTestFixtures = db.OpenRecordset("Select * from [" & FixtureName & "$]")

End Function

修改上面创建的记录集,输出数据放在字典中并传递给此函数。

Sub Write_OTDC_Data(POlist As Dictionary)
Dim Rst As Recordset


DoCmd.SetWarnings False
DoCmd.runsql "Delete * from [OTDC Results]"
DoCmd.SetWarnings True


Set Rst = CurrentDb.OpenRecordset("OTDC Results")

With Rst

  For Each key In POlist.Keys
    .AddNew
    For i = 0 To 9
        .Fields(i).value = POlist(key)(i)
    Next
    .Update
  Next
.Close
End With
End Sub

我的问题是,如果我在运行上述两个程序后尝试更改任何内容,则会出现以下错误。

Error Message

单独运行不会产生错误。

1 个答案:

答案 0 :(得分:0)

我不确定这个问题是否仍未得到解决。如果不是,我有一些建议让你尝试,但不是很有信心他们会解决问题。

尝试DoCmd.TransferSpreadsheet将工作表的数据导入临时表,而不是将OpenDatabase与工作簿一起使用。

MsgBox中,我想知道ThisWorkbook.Name对Access应用程序是否意味着什么。除此之外,我会检查工作簿是否存在,然后只有找到文件才打开它(或从中导入工作表)。

If Len(Dir(GetDBPath & "TestFixtures.xlsx")) = 0 Then
    'not found
Else
    'use it
End If

实际上,我不清楚如果工作簿文件不存在,为什么不从OpenDatabase收到错误。这使我怀疑DoCmd.SetWarnings False永远不会关闭SetWarnings。这样做会抑制重要信息。这完全没必要。将DAO.Database对象变量设置为CurrentDB(),然后使用此变量:

dbObjectVariable.Execute "Delete from [OTDC Results]", dbFailOnError 

添加错误处理程序以处理dbFailOnError公开的任何问题。

最后,这一点值得重复,因为它非常重要。 从不关闭SetWarnings。