Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access VBA从多个源更新表-保存的数据不正确_Ms Access_Vba - Fatal编程技术网

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

Ms access VBA从多个源更新表-保存的数据不正确,ms-access,vba,Ms Access,Vba,我的数据库需要能够从多个源大量导入数据,如果存在,则合并到现有记录中,如果不存在,则添加新记录 问题在于源数据,许多字段类型与数据库中相同字段的值不匹配。(示例excel文档中的所有“位置”均为文本,数据库中的“位置”为数字) 为了解决这个问题,我基本上制作了两张新桌子。”进口商和清洁 导入器被加载到一个连续的表单中,表单中的字段控件然后执行一些魔术,将文本值转换为数字。我遇到的问题是让我的代码运行并将所需的数据输入到数据库中 我在新的记录行上尝试了以下各种迭代 myR2![EventID] =

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

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

为了解决这个问题,我基本上制作了两张新桌子。”进口商和清洁

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

我在新的记录行上尝试了以下各种迭代

myR2![EventID] = Me.EventIDUpdater.Value
这些都没有达到预期的效果

我使用断点逐行检查了代码,没有任何结果

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

在子文件结束之前,我确实收到了msgbox行的确认“更新完成-暂存表已清除”。数据保存到表中,但我注意到保存的数据不正确(很可能是因为我获取所述数据的方式,因为所有记录都以重复形式保存第一个字段的数据)


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

我选择了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

如果在
myR.MoveNext
之前将
myR2.Update
添加到行中,然后运行修改后的代码,会发生什么情况?这就解决了它为什么不保存任何数据的问题。真不敢相信我错过了这么愚蠢的事情。谢谢
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
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