根据多个字段查找记录

时间:2015-11-02 13:08:17

标签: vba ms-access access-vba ms-access-2010

我是MS Access的新手,我目前正致力于一个项目工作,并遇到了麻烦。我不确定我是否正确行事,我犯了一个错误,就是创建一个简单的访问数据库来跟踪我的工作量,然后我突然想到了数据库人员&#34; < / p>

所以我们最近在公司内部开设了一个新的产品评审团队,数据库设计将帮助管理新的部分介绍流程。

我已经设计了我们的评论表,只要审核了部件,就会调用它。我没有与此表建立任何关系,因为我们在任何时候审核过的顶级部分都可能是新工具包的组成部分。因此,做主/子零件并不是一个很好的选择。 (至少从我能看到的)

我如何调用这张表如下。我们在主要表单( frmDPARTOP )中输入一些有关审核,客户,修订版,采购订单等的顶级信息。在子表单( frmDPARPARTS子表单)中,我们列出与此相关的每个部分,包括其本身。

我遇到了让下一部分工作的问题

我在子表单上有一个未绑定的文本框( Text14 ),该文本框应该根据相应的客户在表中查找记录( tDPARSHEETS Part_Number 修订版。如果它在文件中找到与这三个字段匹配的记录,则其值设置为更改为&#34; On Record&#34;或者&#34;需要评论&#34;如果它无法找到文件。但是,它总是表明&#34;需要评论&#34; 。 LocalPartNumber LocalRevision 在表 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

我遇到的其他问题是基于相同的情况。我希望能够双击子窗体中列出的项目并在文件中提取记录(如果有的话),如果没有,我想创建一个,已填写的信息已填写。我&#39 ;已填写测试条目,并填写了客户,部件号和修订版。 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"

结束如果

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

我确信总体而言有更好的方法可以完成整个过程,但是我们正在推出一个全新的ERP系统,而且我的印象是这意味着要保留我们一直到那时。我希望它的构建能够无限期地工作(因为我们很难放弃),但实际上这可能会在6-8个月内被抛弃

我感谢任何建议/帮助

1 个答案:

答案 0 :(得分:0)

请记住,DLookup为“未找到”返回Null。另外,要小心空格。因此:

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

如果partnumber是文本,您还需要将其包装在引号中:

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