根据内容的条件将多个字段的内容附加到一个字段中

时间:2015-08-08 22:46:32

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

我正在设计一个Access 2013数据库来记录我们收到的卡车底盘的各种属性,以便为我们的客户提供机身。有几个字段记录机箱某些部分的条件(BUMPER,LEFT_ FENDER,TIRES,WINDSHIELD等)。这些字段的默认值是“GOOD”,即没有发现问题。但是,如果这些字段中的一个或多个的值不同(DENTED,CHIPPED,CRACKED等),我想将所有这些“非好”字段的总和合并到一个名为“COMMENTS”的字段中。对于每条记录。我尝试过使用追加查询,但是在满足每个条件后立即检查多个字段的多个条件(将字段内容添加到CONTENTS字段)超出了我的编码能力范围。我需要执行几个“If [FIELDX]<>”GOOD“然后[评论] = [评论]& [FIELDX]“计算。有关如何在SQL视图,VBA,宏或表达式构建器中执行此操作的任何想法吗?

4 个答案:

答案 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:]))