我正在设计一个Access 2013数据库来记录我们收到的卡车底盘的各种属性,以便为我们的客户提供机身。有几个字段记录机箱某些部分的条件(BUMPER,LEFT_ FENDER,TIRES,WINDSHIELD等)。这些字段的默认值是“GOOD”,即没有发现问题。但是,如果这些字段中的一个或多个的值不同(DENTED,CHIPPED,CRACKED等),我想将所有这些“非好”字段的总和合并到一个名为“COMMENTS”的字段中。对于每条记录。我尝试过使用追加查询,但是在满足每个条件后立即检查多个字段的多个条件(将字段内容添加到CONTENTS字段)超出了我的编码能力范围。我需要执行几个“If [FIELDX]<>”GOOD“然后[评论] = [评论]& [FIELDX]“计算。有关如何在SQL视图,VBA,宏或表达式构建器中执行此操作的任何想法吗?
答案 0 :(得分:0)
我假设您正在输入表单中的值。将有几个文本框链接到各个机箱部件,一个用于注释(Say Text123)。对于每个机箱部件文本框,编写&#34; On Exit&#34;执行<> "Good"
检查后,将Text123与与给定文本框关联的字段名称连接起来的事件。然后,当您保存记录时,“注释”字段将具有连接值。
答案 1 :(得分:0)
我会在VBA中这样做,Allen Browne的网站是一个开始http://allenbrowne.com/tips.html的好地方。它在2010年没有更新,但很多基本概念保持不变。
答案 2 :(得分:0)
感谢。我决定将代码放在表单的BeforeUpdate事件中。这样,它会在每个CREATE或UPDATE操作中将所有“非GOOD”条目编译到名为COMPILED_COMMENTS的字段中,然后将其与COMMENTS字段合并到名为TOTAL_COMMENTS的最终字段中。最后一个问题......此信息将通过CSV文件导出并导入AS400系统。在每个评论之间添加换行会很好,但由于CSV文件的性质,我看不出它是如何实现的(因此每个评论之间的“|”字符)。我想在AS400系统中进行查找/替换是我唯一的解决方案,对吗?我的代码如下......
Private Sub Form_BeforeUpdate(Cancel As Integer)
Me.COMPILED_COMMENTS = ""
If Me.UPHOLSTERY <> "GOOD" Then
Me.COMPILED_COMMENTS = "[UPHOLSTERY CONDITION] - " & Me.UPHOLSTERY
End If
If Me.REAR_GLASS <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [REAR GLASS CONDITION] - " & Me.REAR_GLASS
End If
If Me.WINDSHIELD <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [WINDSHIELD CONDITION] - " & Me.WINDSHIELD
End If
If Me.FENDERS <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [FENDER CONDITION] - " & Me.FENDERS
End If
If Me.HOOD <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [HOOD CONDITION] - " & Me.HOOD
End If
If Me.REAR_OF_CAB <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [REAR OF CAB CONDITION] - " & Me.REAR_OF_CAB
End If
If Me.DRIVER_DOOR <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [DRIVER DOOR CONDITION] - " & Me.DRIVER_DOOR
End If
If Me.PASSENGER_DOOR <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [PASSENGER DOOR CONDITION] - " & Me.PASSENGER_DOOR
End If
If Me.FRONT_BUMPER <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [FRONT BUMPER CONDITION] - " & Me.FRONT_BUMPER
End If
If Me.TIRES <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [TIRES CONDITION] - " & Me.TIRES
End If
If Me.CAB_INTERIOR <> "GOOD" Then
Me.COMPILED_COMMENTS = Me.COMPILED_COMMENTS & " | [CAB INTERIOR CONDITION] - " & Me.CAB_INTERIOR
End If
Me.TOTAL_COMMENTS = ">>COMMENTS<< - " & Me.COMMENTS & " | >>COMPILED COMMENTS<< - " & Me.COMPILED_COMMENTS
End Sub
答案 3 :(得分:0)
我倾向于使用面向对象的方法,您可以依次访问每个控件,随时收集相关信息。
要测试以下代码,请在表单调用btnRun中添加一个按钮。
您不需要知道文本框名称,您只需添加&#34; X&#34;在text-box标签属性中。
此代码将检查每个文本框Tag属性,以及Tag属性是否包含&#34; X&#34;代码将提取Textbox内容(只要它不包含&#34; Good&#34;)。提取的文本被添加到字符串变量strComment中,然后传递回函数&#34; fMakeCommentFld&#34;。
<强>更新: - 强> 我更新了代码,以便从关联的标签中提取文本框的名称,然后将其添加到例程生成的注释文本中。
>>> for i in sorted_list:
... d.setdefault(i[0],[]).append(iter(i[1:]))