我的数据库需要能够从多个源批量导入数据,并在存在时合并到现有记录中,如果不存在则添加新数据。
问题在于源数据,许多字段类型与数据库中相同字段的值不匹配。 (例如,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行中获得了“更新完成 - 暂存表已清除”的确认。并且数据保存到表中但是我注意到保存的数据不正确(很可能是由于我获取所述数据的方式,因为所有记录都以重复的形式保存了第一个字段的数据)
我需要它做的是正确读取表单并保存数据。
我选择了VBA并形成控制数据来完成所需的操作,而是在相关表上设置多个更新查询以将值更新回到临时表,然后使用VBA连续运行查询。
更新值后,我使用最终的upend查询将正确的值添加/更新到右表中,并将其添加到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