通过表单事件过程

时间:2016-08-03 23:04:37

标签: ms-access

我有一个访问数据库,其中包含一些带有一些文本框和一些复选框的搜索表单。 用户通过输入文本或选中其中一个框来选择要在搜索表单上收集的值。单击搜索按钮时,将打开相应的结果表单。

结果表单的数据源是一个查询,它提供表中与请求的搜索相对应的记录列表。在查询中,我有2个IIf字段,1个将2个复选框组合成一个文本句子,表示在记录中检查的那两个框中的一个或两个,另一个组合了3个复选框。结果表单上有2个文本字段,其数据源是2个IIf查询字段。

结果表单上有第三个(未绑定的)文本字段,我有9个剩余的复选框,我需要将它组合成该字段的句子。我在结果表单的on open事件中尝试过这个函数(Oth)。该函数似乎有效,因为它为每个记录提供了MsgBox(fOther)中的正确句子,但是我无法在结果表单上填充未绑定的文本字段。我已经尝试了几种不同的方式,表格的记录集,查询的表格。我已经尝试在模块中添加(类似)功能,并在表的字段的更新查询中使用该功能。我无法填充那个(其他)字段。我已经尝试在查询该(其他)文本字段时构建一个IIf字段,它是非常令人生畏的9个对象,以及所有可能的组合,我甚至不确定它是否可能。有什么提示可以提供吗?

Private Sub Oth()
  Dim strOthr(9) As String
  Dim Tt As Integer
  Dim fOther As String

  Me.Recordset.MoveFirst

  Do While Not Recordset.EOF
    If Me.[o-180] Then
      strOthr(0) = "180"
    End If

    If Me.[o-e] Then
      strOthr(1) = "Education"
    End If

    If Me.[o-rcb-f] Then
      strOthr(2) = "Flag"
    End If

    If Me.[o-rcb-m] Then
      strOthr(3) = "Medal"
    End If

    If Me.[o-rcb-b] Then
      strOthr(4) = "Burial"
    End If

    If Me.[o-ra-hb] Then
      strOthr(5) = "Health Benefits"
    End If

    If Me.[o-ra-t] Then
      strOthr(6) = "Transportation"
    End If

    If Me.[o-ra-hl] Then
      strOthr(7) = "Home Loans"
    End If

    If Me.[o-ra-il] Then
      strOthr(8) = "Income Letter"
    End If

    For Tt = 0 To 8
      If Len(strOthr(Tt)) > 0 Then
        If Len(fOther) > 0 Then
          fOther = fOther & ", " & strOthr(Tt)
        Else
          fOther = fOther & strOthr(Tt)
        End If
      End If
    Next Tt

    Me.Other = fOther

    MsgBox fOther

    For Tt = 0 To 8
      strOthr(Tt) = ""
    Next Tt
    fOther = ""

    Me.Recordset.MoveNext
  Loop
End Sub

1 个答案:

答案 0 :(得分:0)

我不得不重新阅读。因此,如果其他是结果表单中的字段,那么它不应该是

Me.other = fother

但是

Forms!Resultform.form!other = fother

然后根据您的搜索条件,您可能只想构建一个WHERE子句,您可以将其添加到SQL字符串以设置为结果表单recordsource,或者使用整个表/查询设置为过滤器属性作为结果表单记录来源

dim strfilter as string    
If me.[a-b-c] then 
    strfilter = strfilter & "[fld] = " & Chr(34) & "txtcriteria" & Chr(34) & " AND "
End If
If me.[b-x-y] then
    'repeat 
End if
'repeat if for each expression
strfilter = left(strfilter, len(strfilter) - 5)
With forms!frmResuls.form
    .filter = strfilter
    .filteron = true 
End With 
'or
forms!frmResults.form.recordsource = "SELECT * from tbl WHERE " & strfilter & ";"