在访问引用表时使用vba sql更新表记录

nfzehxib  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(284)

我正在从tblimport记录更新tblmain记录。tblimport上的数据需要从其他表中提取引用,以匹配tblmain上的实际预期记录。其他表是tblemployees和tbltaxrates。我们试着通过sql查询来实现,但似乎不能完全正确地进行查询。我们都不知道如何正确地构造这个,因为帮助我的人是webdev,使用mysql,他的查询与msaccess所期望的不太一样。
tblimport上导入的数据与tblmain的信息不完全相同,因此必须引用tbleemployees和tbltaxrates才能找到匹配的信息,例如:
tblimport有[empid],它相当于tbleemployees上的[seqnumid],在这里我们需要提取tblmain中需要的[employee name]。
同样,tblimport只有[taxregion],但我们需要将其与tbltaxrates上相应的[gst percent]、[pst percent]、[hst percent]和[iscompound]对齐,tbltaxrates是tblmain所需的。
下面是我们写的:

' Update Main Entry Table from Imported Content
DoCmd.RunSQL "UPDATE tblMAIN t " & _
                "INNER JOIN tblIMPORT x ON x.[IsDeleted] IS NULL AND x.[EntryID] = t.[EntryID] " & _
                "LEFT JOIN tblEMPLOYEES e ON x.[EmpID] = e.[SeqNumID] " & _
                "LEFT JOIN tblTAXRATES r ON x.[TaxRegion] = r.[TaxRegion] " & _
                "SET t.[Employee Name] = e.[Employee Name],t.[TaxRegion] = x.[TaxRegion],t.[EntryID] = x.[EntryID],t.[EntryDate] = x.[EntryDate],t.[GST percent] = r.[GST percent],t.[PST percent] = r.[PST percent],t.[HST percent] = r.[HST percent],t.[IsCompound] = r.[IsCompound];"
xv8emn3q

xv8emn3q1#

对于我在这里读到的内容,您很可能需要不止一个查询,因此我强烈建议您不要创建一个大型更新查询,而是执行以下操作
1-)使用tblimport中的数据创建一个select查询,并将所有表都连接到那里。2-)将步骤#1中的数据插入tblmain 3-)在tblmain中运行更新查询,并与需要添加信息的任何其他表合并。
它将简化过程并帮助你组织你的想法。到最后,您很可能能够将上述3个步骤放在1或2个查询中,但开始时很简单。

brtdzjyr

brtdzjyr2#

实际上,msaccess和mysql可能只是两个主要的rdbms,它们共享相同的支持 UPDATE...JOIN (与其他支持 UPDATE...FROM 像sql server和postgres或者 UPDATE 使用子查询(如oracle、db2和sqlite)。
然而,ms-access要求新用户使用令人沮丧的特性,将连接括在括号中,括号中有多个连接 JOIN 已使用。还有一些 ON 子句表达式可能需要在中运行 WHERE 就像 IS NULL . 希望access团队在一个建议的、未来的版本中对其进行修改,使之符合ansi-1992。
因此,只需调整查询即可。还可以考虑将sql保存为存储查询,并在vba中使用 DoCmd.OpenQuery 由于各种原因:1)语法错误的查询无法保存;2) 编译器保存了最佳的执行计划,以便有效地运行复杂的查询,例如多个连接;3)避免vba中引用字符串的串联。
sql(另存为新查询对象)

UPDATE ((tblMAIN t INNER JOIN tblIMPORT x ON x.[EntryID] = t.[EntryID])
        LEFT JOIN tblEMPLOYEES e ON x.[EmpID] = e.[SeqNumID])
        LEFT JOIN tblTAXRATES r ON x.[TaxRegion] = r.[TaxRegion]
SET t.[Employee Name] = e.[Employee Name],
    t.[TaxRegion]     = x.[TaxRegion],
    t.[EntryID]       = x.[EntryID],
    t.[EntryDate]     = x.[EntryDate],
    t.[GST percent]   = r.[GST percent],
    t.[PST percent]   = r.[PST percent],
    t.[HST percent]   = r.[HST percent],
    t.[IsCompound]    = r.[IsCompound]
WHERE x.[IsDeleted] IS NULL;

vba(无需关闭操作查询)

DoCmd.OpenQuery "mySavedUpdateQuery"

相关问题