查找记录,基于多个字段

Looking Up Record, based on Multiple Fields

我是 MS Access 的新手,目前正在处理一个工作项目,运行 遇到了麻烦。我不确定我这样做是否正确,我犯了一个错误,即制作一个简单的访问数据库来跟踪我的工作量,突​​然间我 "The database guy"

所以我们最近在公司内部成立了一个新产品审查小组,我设计的数据库将帮助管理新零件的引入过程。

我已经设计了我们的评论 sheet,每当评论一个部分时都会调用它。我没有与此 table 建立任何关系,因为我们审查过的顶级部件在任何时候都可能是新套件的组件。所以做 master/child 部分并不是一个很好的选择。 (至少从我能看到的)

我是如何调用这个 sheet 的,如下所示。我们在主表单 (frmDPARTOP) 中输入一些关于评论、客户、修订、PO 等的顶级信息。在子表单 (frmDPARPARTS 子表单) 我们列出了与此相关的每个部分,包括它本身。

我 运行 在让下一部分工作时遇到了一些问题

我在子表单上有一个未绑定的文本框 (Text14),它应该在 table (tDPARSHEETS) 基于适当的 CustomerPart_NumberRevision。如果它在文件中找到与这三个字段匹配的记录,则其值设置为 "On Record" 或 "Needs Review"(如果无法找到文件)。但是,它始终指示 "Needs Review" .LocalPartNumberLocalRevision 在 table tDPARSHEETS,我尝试了几种变体,以不同的方式寻找不同的项目。我已经调试打印了这些值,它们是正确的。

If DLookup("LocalPartNumber", "tDPARSHEET", "[LocalPartNumber]="" & Me.Part_Number & ""AND [LocalRevision]='" & Me.Revision & "'") Then
Text14.Value = "On Record"
Else
Text14.Value = "Need Review"
End If

我遇到的另一个问题是基于同样的情况。我希望能够双击子表单中列出的项目,如果有的话,可以拉出文件记录,如果没有,我想创建一个,并填写已经提供的信息。我已经填写客户、部件号和修订版本的测试条目。 MsgBox Fires 告诉我记录在文件中,但是,OpenForm 命令打开一个空白表单。

Private Sub Customer_DblClick(Cancel As Integer)
If DLookup("LocalPartNumber", "tDPARSHEET", "LocalRevision ='" & Me.Revision & "'") Then
MsgBox "Record Found"
DoCmd.OpenForm "frmDPARSHEET", , , "[LocalPartNumber]="" & Me.Part_Number & ""AND [LocalRevision]='" & Me.Revision & "'"
Else
MsgBox "No Luck"

如果

结束

我使用的所有字段都是文本字段,因为我们的零件号和修订版通常包含字母和数字

我确信总体上有更好的方法来完成整个过程,但我们将在 5 月份推出全新的 ERP 系统,我的印象是这会阻碍我们的发展直到那时。我希望它构建得足够好,可以无限期地工作(因为我们很难放手),但实际上这可能会在 6-8 个月内全部扔掉

我很感激任何 Advice/Help

请记住,"not found" 的 DLookup returns 为空。另外,注意空格。因此:

If IsNull(DLookup("LocalPartNumber", "tDPARSHEET", "[LocalPartNumber]=" & Me.Part_Number & " AND [LocalRevision]='" & Me.Revision & "'")) Then
    Text14.Value = "Need Review"
Else
    Text14.Value = "On Record"
End If

如果部件号是文本,您还需要将其用引号引起来:

If IsNull(DLookup("LocalPartNumber", "tDPARSHEET", "[LocalPartNumber]='" & Me.Part_Number & "' AND [LocalRevision]='" & Me.Revision & "'")) Then
    Text14.Value = "Need Review"
Else
    Text14.Value = "On Record"
End If