首页 文章

基于智能比较的更新 - Access / VBA

提问于
浏览
0

需要智能地在访问表上执行更新 . 需要专家VBA /智能思维 .

Table1 (For reference only)
CompanyCode     Text
RegionCategory  Number (1-99)
RegionCount     Number(0 - 25000)

Table2
InvoiceNumber       Number
CompanyCode         Text    
NumRows             Number
RegionCode          FourdigitNumber
ConfirmationRemark  Y / N

我们的目标是在'确认备注'栏中加上是或否 . 规则:

1.仅选择那些从Table2和不同RegionCode中恰好有两行的InvoiceNumbers . 这些将具有相同的CompanyCode . RegionCategory是RegionCode的前两位数 .

2.对于这两个发票 - 两个RegionCategory之间的差异必须大于两个 .

3.LookUp来自Table1的RegionCount

决策:我们现在基本上将两个发票与不同的区域代码进行比较 . 想法是,具有较高RegionCount的Invoice是要标记为Yes的Invoice .

  1. RegionCount之间的差异必须相当大 . '相当' - 我试图确定什么是正确的数字 . 我们现在就拿500 .

2.具有较低区域计数的发票 - 应该具有RegionCount - 零(bestCase)或非常非常低 . 如果具有较低区域计数的发票具有> 200的较高RegionCount值,则我们无法成功结束 .

3.NumRows,优选为1或小于1 . 这种比较不是强制性的,因此我们将有一项规定不对此进行检查 . 将其他发票标记为“N”

1 回答

  • 2

    您有很多方法可以处理这种类型的复杂更新 .

    如果幸运的话,您可以制作一个可以包含所有更改的SQL UPDATE 语句,但通常需要使用 SELECT 查询和自定义VBA的组合来根据计算或查找的结果过滤它们 . 其他数据 .

    一些提示

    • 通常,我们倾向于根据'what are the steps to get to the data that match the criteria'来思考问题 .
      但有时候,它有什么步骤才能获得与标准不匹配的数据' .
      因为在您的情况下结果是boolean,true或false,您可以简单地将 ConfirmationRemark 字段设置为 True 用于所有记录,然后更新那些应设置为 False 的字段,而不是相反 .

    • 细分每一步(就像你一样)并尝试找到最简单的 SELECT 查询,该查询只返回该步骤所需的数据 . 如果步骤太复杂,请进一步分解 .

    • 将您细分的 SELECT 语句组合在一起,慢慢构建一个更符合您目标的更复杂的查询 .

    • 一旦你走得太远,要么构造一个 UPDATE Table2 SET ConfirmationRemark=True WHERE InvoiceNumber IN (SELECT InvoiceNumber ....) ,要么使用VBA来完成你的complext SELECT 语句的结果记录集,并在更新代码中的字段之前再做一些检查 .

    一些问题

    不幸的是,尽管您努力记录您的情况,但我们没有足够的细节来帮助您:

    • 你没有提到哪些是主键(从你说的话来看,似乎 Table2 可能有多个记录具有相同的 InvoiceNumber

    • 您正在处理的数据类型并不明显 . 您应该包含一个数据样本,并确定哪些数据应该以 ConfirmationRemark set结束 .

    • 你的问题实际上太局部化了,这意味着它太具体了你不能对别人有 Value ,虽然我认为如果只是为了展示一个如何处理复杂的例子,你的问题可能会引起一些关注Access中的数据更新 .

相关问题