根据Select Case Instruction创建数据模型

时间:2014-01-04 13:17:11

标签: sql database vba excel-vba excel

这个问题可能对你来说有点奇怪,但我会试着解释一下。 在我们公司的生产部门,我们正在跟踪机器数据。该数据还用于评估生产过程的质量。 在下文中,我将参考这些属性:

  • 的productId

  • componentOfProduct - >受错误影响的组件

  • routeStepOfError

  • causeOfError

问题是,机器生成的数据不是管理层希望将其用于评估的顺序。 所以我们必须进行数据匹配。大多数情况下,这是一个简单的关系,例如将多个productId编号与1个产品名称/组匹配。 但是在routeStepOfError的情况下它是不同的。对于某些情况,生产线正在记录的routeStep可以与routeStep匹配,用于管理报告,如上面用productIds描述的那样。 但是对于某些routeSteps来说,完成了更复杂的匹配。到目前为止,它是在VBA应用程序中实现的,它匹配数据库输出并将数据写入电子表格。匹配是通过Select Case Instructions完成的,如下所示:

Select Case routeStep
  Case EOL
    Select Case productId
       Case 1111, 1112, 1113
          Select Case causeOfError
             Case A1:   
                 Select Case componentOfProduct
                    Case "be1": routeStepReport = "final optical test"
                    Case Else: routeStepReport = "end of line"
                 End Select   
             Case Else: routeStepReport = "end of line"
          End Select
       Case Else: routeStepReport = "end of line"
    End Select
  Case...
End Select

...我知道语法可能不正确,但我希望你得到我想说的内容:有时从routeStep到routeStepReport的东西(即我们管理报告所需的值)取决于routeStepproductIdcomponentOfProductcauseOfError。 ......而且这些Select Case声明非常长,因为我们的生产过程中有许多产品和许多routeSteps。因此,每次生产程序/流程都有变化,这必须在VBA代码中保持,这远远不是完美的,因为我们公司中只有一个人真正知道在代码中寻找这个和如何维护它。

因此,我建议在SQL数据库中实现整个匹配,只需在机器的值和管理层想要拥有的值之间创建正确的关系。用PHP中的界面或任何人可以很容易地进行匹配。 好吧,对于像productIds这样的产品组这样的简单匹配,这个工作非常好,但对于如上所述的routeSteps,这可能是一个问题。 我会创建一个具有以下属性的表:

| ----------------- | ----------------- | ---------- ------- | ----------------- | ----------------- |

| routeSTepofError | productId | componentOfProd | causeOfError | routeStepReport |

| ----------------- | ----------------- | ---------- ------- | ----------------- | ----------------- |

但是,我们说,我们有大约20个routeSteps,50个productIds,每个包含大约4个组件和10个错误原因,这个表可能也是无穷无尽的,并且很难维护。

也许我之前应该告诉过,对于大多数的routeSTepofErrors,无论是productIds,组件还是原因,都有一个简单的路由,从routeSTepofError到routeStepReport ....但如果有些数学依赖于所有4个标准,我有完全填写上面的表格,不是吗?

也许有一个更简单的解决方案来实现这一点,但我却看不到它。

所以我会非常高兴你可以给我解决这个问题的每一个提示(我无法改变匹配方式;他们仍然希望拥有“他们的”众所周知的数字:-))。< / p>

提前多多感谢!

此致

1 个答案:

答案 0 :(得分:1)

您可以使用两个表,tblRouteStepErrorMatch和tblRouteStepErrorException。

tblRouteStepErrorMatch
    routeStepofError
    routeStepReport
tblRouteStepErrorException
    routeStepError
    productID
    componentOfProd
    causeOfError
    routeStepReport

然后在您的代码中,检查Exception表。如果不匹配,请转到匹配表。

ExcRecordset = SELECT * FROM tblRouteStepErrorException WHERE ...
If BOF(ExcRecordset) and EOF(ExcRecordset) Then 'No match in exception table
    MatchRecordset = SELECT * FROM tblRouteStepErrorMatch WHERE ... 'go get from match table
    get result from MatchRecordset
Else
    get result from ExcRecordset
End if

现在你的异常更容易维护,因为它们的数量要少得多,匹配表成为未找到特殊情况时的后备。