VBA从多个来源更新表格-保存的数据不正确

时间:2019-04-15 15:30:35

标签: ms-access access-vba

我的数据库需要能够从多个来源批量导入数据,如果存在则合并到现有记录中,如果不存在则添加新记录。

问题在于源数据,许多字段类型与数据库中相同字段具有的值不匹配。 (例如,Excel文档中的所有“位置”都是文本,数据库中的“位置”是数字)

为了解决这个问题,我基本上制作了2个新表。 “进口商”和“清洁”

导入程序被加载到一个连续的表单中,然后表单中的字段控件进行一些魔术操作以将文本值转换为数值。我遇到的问题是让我的代码运行并将所需的数据输入到Cleaned中。

我已经在新记录行中尝试了以下各种迭代

myR2![EventID] = Me.EventIDUpdater.Value
myR2![EventID] = [Forms]![adf_AttendeeImport]![EventIDUpdater]
myR2![EventID] = [Forms]![adf_AttendeeImport]![EventIDUpdater].[Value]

没有一个具有所需的效果。

我使用断点逐行浏览了代码,没有任何结果。

下面是完整的代码(这适用于另一个更高级的现有合并/添加新导入的操作)

Private Sub MergeAttendees_Click()

Dim myR As Recordset
Dim myR2 As Recordset

Set myR = CurrentDb.OpenRecordset("tbl_STG_AttendeeImport", dbOpenDynaset)
Set myR2 = CurrentDb.OpenRecordset("tbl_STG_AttendeeValueUpdater", dbOpenDynaset)

MsgBox prompt:="You are about to convert multiple values, this could take some time. Please allow the process to complete before closing the window/database", buttons:=vbInformation, Title:="Conversion Warning"

Do Until myR.EOF = True
        myR2.AddNew
        myR2![Email] = myR![Email]
        myR2![TicketAmount] = myR![TicketAmount]
        myR2![Price] = myR![Price]
        myR2![Paid] = myR![Paid]
        myR2![EventID] = Me.EventIDUpdater.Value
        myR2![AttendeeTypeID] = Me.AttendeeTypeIDUpdater.Value
        myR2![PackageID] = Me.PackageIDUpdater.Value
        myR2![TicketTypeID] = Me.TicketTypeIDUpdater.Value
        myR2![DiscountID] = Me.DiscountIDUpdater.Value
        myR2![MethodID] = Me.MethodIDUpdater.Value
        myR2![ConfirmationID] = Me.ConfirmationIDUpdater.Value
        myR2.Update
    myR.MoveNext
Loop

DoCmd.SetWarnings False
DoCmd.OpenQuery ("upd_AttendeeImport")
DoCmd.OpenQuery ("del_AttendeeImport")

Me.Requery

DoCmd.SetWarnings True

MsgBox prompt:="Update Complete - Staging Table Cleared", buttons:=vbInformation, Title:="Update Complete"

End Sub

在子结尾之前,我确实会根据msgbox行获得确认“更新完成-登台表已清除”。并将数据保存到表中,但是我注意到保存的数据是不正确的(很可能是由于我获取数据的方式,因为所有记录都以重复形式保存了第一个字段的数据)

我需要做的是正确阅读表单并保存数据。

1 个答案:

答案 0 :(得分:1)

我选择使用VBA和表单控制数据来完成所需的操作,而是在相关表上设置了多个更新查询,以将值更新回登台表,然后使用VBA连续运行查询。

在更新值之后,我使用了最终查询来将正确的值添加/更新到正确的表中,并将其也添加到VBA代码中。

Private Sub ConvertValues_Click()

DoCmd.SetWarnings False
DoCmd.OpenQuery ("upd_AVI_ConfirmID")
DoCmd.OpenQuery ("upd_AVI_DiscountID")
DoCmd.OpenQuery ("upd_AVI_EventID")
DoCmd.OpenQuery ("upd_AVI_GuestID")
DoCmd.OpenQuery ("upd_AVI_MethodID")
DoCmd.OpenQuery ("upd_AVI_PackageID")
DoCmd.OpenQuery ("upd_AVI_TicketID")

Me.Requery

DoCmd.OpenQuery ("upd_AttendeeImport")
DoCmd.OpenQuery ("del_AttendeeImport")

Me.Requery

DoCmd.SetWarnings True

End Sub