C
croth68
I used the code reference from allenbrowne.com to build a continous form with
pretty good search capability. The problem I am having on this is if I enter
a dealer contact last name it returns a popup box that asks for the value,
you have to retype the dealer contact last name before it will return results.
How do I get it to not bring up the pop up box and use the data that was
entered the first time on the form. Please help, below is the code I have for
the search section. I have other code for the form and can post all the code
for the entire form if needed, other code includes pop up calendar code and
print data to form code. Thanks.
Private Sub cmdFilter_Click()
'Purpose: Build up the criteria string form the non-blank search boxes,
and apply to the form's Filter.
'Notes: 1. We tack " AND " on the end of each condition so you can
easily add more search boxes; _
we remove the trailing " AND " at the end.
' 2. The date range works like this: _
Both dates = only dates between (both inclusive.
_
Start date only = all dates from this one onwards; _
End date only = all dates up to (and including this
one).
Dim strWhere As String 'The criteria string.
Dim lngLen As Long 'Length of the criteria string to
append to.
Const conJetDate = "\#mm\/dd\/yyyy\#" 'The format expected for dates in
a JET query string.
'***********************************************************************
'Look at each search box, and build up the criteria string from the non-
blank ones.
'***********************************************************************
'Text field example. Use quotes around the value in the string.
If Not IsNull(Me.Combo44) Then
strWhere = strWhere & "([Training Aid ID] = " & Me.Combo44 & ") AND "
End If
'Another text field example. Use Like to find anywhere in the field.
If Not IsNull(Me.Text46) Then
strWhere = strWhere & "([Dealer ID] Like ""*" & Me.Text46 & "*"") AND
"
End If
'Number field example. Do not add the extra quotes.
If Not IsNull(Me.Text52) Then
strWhere = strWhere & "([Class Name] = " & Me.Text52 & ") AND "
End If
If Not IsNull(Me.Text62) Then
strWhere = strWhere & " ([Dealer Name] = " & Me.Text62 & ") AND "
End If
If Not IsNull(Me.Text75) Then
strWhere = strWhere & " ([Dealer City] = " & Me.Text75 & ") AND "
End If
If Not IsNull(Me.Text68) Then
strWhere = strWhere & " ([Dealer Zip] = " & Me.Text68 & ") AND "
End If
If Not IsNull(Me.Text64) Then
strWhere = strWhere & " ([Dealer Contact Last Name] = " & Me.Text64 &
") AND "
End If
If Not IsNull(Me.Text66) Then
strWhere = strWhere & " ([Dealer Contact First Name] = " & Me.Text66
& ") AND "
End If
If Not IsNull(Me.Text79) Then
strWhere = strWhere & " ([Check Out] = """ & Me.Text79 & """) AND "
End If
If Not IsNull(Me.Text81) Then
strWhere = strWhere & " ([Check In] = " & Me.Text81 & ") AND "
End If
'Yes/No field and combo example. If combo is blank or contains "ALL", we
do nothing.
'If Me.cboFilterIsCorporate = -1 Then
'strWhere = strWhere & "([IsCorporate] = True) AND "
'ElseIf Me.cboFilterIsCorporate = 0 Then
'strWhere = strWhere & "([IsCorporate] = False) AND "
'End If
'Date field example. Use the format string to add the # delimiters and
get the right international format.
If Not IsNull(Me.Text48) Then
strWhere = strWhere & "([Date Out] >= " & Format(Me.Text48,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.Text50) Then 'Less than the next day.
strWhere = strWhere & "([Date Out] < " & Format(Me.Text50 + 1,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text73) Then
strWhere = strWhere & "([Date Needed] >= " & Format(Me.Text73,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text77) Then
strWhere = strWhere & " ([Date Needed] >= " & Format(Me.Text77,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text97) Then
strWhere = strWhere & "([Date In] >= " & Format(Me.Text97, conJetDate)
& ") AND "
End If
If Not IsNull(Me.Text99) Then 'Less than the next day.
strWhere = strWhere & "([Date In] < " & Format(Me.Text99 + 1,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text101) Then
strWhere = strWhere & "([Return Date] >= " & Format(Me.Text101,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.Text103) Then 'Less than the next day.
strWhere = strWhere & "([Return Date] < " & Format(Me.Text103 + 1,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text93) Then
strWhere = strWhere & "([Class Start Date] >= " & Format(Me.Text93,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.Text107) Then 'Less than the next day.
strWhere = strWhere & "([Class Start Date] < " & Format(Me.Text107 +
1, conJetDate) & ") AND "
End If
If Not IsNull(Me.Text95) Then
strWhere = strWhere & "([Class End Date] >= " & Format(Me.Text95,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.Text105) Then 'Less than the next day.
strWhere = strWhere & "([Class End Date] < " & Format(Me.Text105 + 1,
conJetDate) & ") AND "
End If
'***********************************************************************
'Chop off the trailing " AND ", and use the string as the form's Filter.
'***********************************************************************
'See if the string has more than 5 characters (a trailng " AND ") to
remove.
lngLen = Len(strWhere) - 5
If lngLen <= 0 Then 'Nah: there was nothing in the string.
MsgBox "No criteria", vbInformation, "Nothing to do."
Else 'Yep: there is something there, so remove the "
AND " at the end.
strWhere = Left$(strWhere, lngLen)
'For debugging, remove the leading quote on the next line. Prints to
Immediate Window (Ctrl+G).
Debug.Print strWhere
'Finally, apply the string as the form's Filter.
Me.Filter = strWhere
Me.FilterOn = True
End If
End Sub
Private Sub cmdReset_Click()
'Purpose: Clear all the search boxes in the Form Header, and show all
records again.
Dim ctl As Control
'Clear all the controls in the Form Header section.
For Each ctl In Me.Section(acHeader).Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox
ctl.Value = Null
'Case acCheckBox
' ctl.Value = False
End Select
Next
'Remove the form's filter.
Me.FilterOn = False
End Sub
Private Sub Form_BeforeInsert(Cancel As Integer)
'To avoid problems if the filter returns no records, we did not set its
AllowAdditions to No.
'We prevent new records by cancelling the form's BeforeInsert event
instead.
'The problems are explained at http://allenbrowne.com/bug-06.html
Cancel = True
MsgBox "You cannot add new clients to the search form.", vbInformation,
"Permission denied."
End Sub
Private Sub Form_Open(Cancel As Integer)
'Remove the single quote from these lines if you want to initially show
no records.
'Me.Filter = "(False)"
'Me.FilterOn = True
End Sub
Private Sub txtFormFilter_BeforeUpdate(Cancel As Integer)
End Sub
Private Sub Command58_Click()
On Error GoTo Err_Command58_Click
DoCmd.RunMacro
Exit_Command58_Click:
Exit Sub
Err_Command58_Click:
MsgBox Err.Description
Resume Exit_Command58_Click
End Sub
pretty good search capability. The problem I am having on this is if I enter
a dealer contact last name it returns a popup box that asks for the value,
you have to retype the dealer contact last name before it will return results.
How do I get it to not bring up the pop up box and use the data that was
entered the first time on the form. Please help, below is the code I have for
the search section. I have other code for the form and can post all the code
for the entire form if needed, other code includes pop up calendar code and
print data to form code. Thanks.
Private Sub cmdFilter_Click()
'Purpose: Build up the criteria string form the non-blank search boxes,
and apply to the form's Filter.
'Notes: 1. We tack " AND " on the end of each condition so you can
easily add more search boxes; _
we remove the trailing " AND " at the end.
' 2. The date range works like this: _
Both dates = only dates between (both inclusive.
_
Start date only = all dates from this one onwards; _
End date only = all dates up to (and including this
one).
Dim strWhere As String 'The criteria string.
Dim lngLen As Long 'Length of the criteria string to
append to.
Const conJetDate = "\#mm\/dd\/yyyy\#" 'The format expected for dates in
a JET query string.
'***********************************************************************
'Look at each search box, and build up the criteria string from the non-
blank ones.
'***********************************************************************
'Text field example. Use quotes around the value in the string.
If Not IsNull(Me.Combo44) Then
strWhere = strWhere & "([Training Aid ID] = " & Me.Combo44 & ") AND "
End If
'Another text field example. Use Like to find anywhere in the field.
If Not IsNull(Me.Text46) Then
strWhere = strWhere & "([Dealer ID] Like ""*" & Me.Text46 & "*"") AND
"
End If
'Number field example. Do not add the extra quotes.
If Not IsNull(Me.Text52) Then
strWhere = strWhere & "([Class Name] = " & Me.Text52 & ") AND "
End If
If Not IsNull(Me.Text62) Then
strWhere = strWhere & " ([Dealer Name] = " & Me.Text62 & ") AND "
End If
If Not IsNull(Me.Text75) Then
strWhere = strWhere & " ([Dealer City] = " & Me.Text75 & ") AND "
End If
If Not IsNull(Me.Text68) Then
strWhere = strWhere & " ([Dealer Zip] = " & Me.Text68 & ") AND "
End If
If Not IsNull(Me.Text64) Then
strWhere = strWhere & " ([Dealer Contact Last Name] = " & Me.Text64 &
") AND "
End If
If Not IsNull(Me.Text66) Then
strWhere = strWhere & " ([Dealer Contact First Name] = " & Me.Text66
& ") AND "
End If
If Not IsNull(Me.Text79) Then
strWhere = strWhere & " ([Check Out] = """ & Me.Text79 & """) AND "
End If
If Not IsNull(Me.Text81) Then
strWhere = strWhere & " ([Check In] = " & Me.Text81 & ") AND "
End If
'Yes/No field and combo example. If combo is blank or contains "ALL", we
do nothing.
'If Me.cboFilterIsCorporate = -1 Then
'strWhere = strWhere & "([IsCorporate] = True) AND "
'ElseIf Me.cboFilterIsCorporate = 0 Then
'strWhere = strWhere & "([IsCorporate] = False) AND "
'End If
'Date field example. Use the format string to add the # delimiters and
get the right international format.
If Not IsNull(Me.Text48) Then
strWhere = strWhere & "([Date Out] >= " & Format(Me.Text48,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.Text50) Then 'Less than the next day.
strWhere = strWhere & "([Date Out] < " & Format(Me.Text50 + 1,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text73) Then
strWhere = strWhere & "([Date Needed] >= " & Format(Me.Text73,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text77) Then
strWhere = strWhere & " ([Date Needed] >= " & Format(Me.Text77,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text97) Then
strWhere = strWhere & "([Date In] >= " & Format(Me.Text97, conJetDate)
& ") AND "
End If
If Not IsNull(Me.Text99) Then 'Less than the next day.
strWhere = strWhere & "([Date In] < " & Format(Me.Text99 + 1,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text101) Then
strWhere = strWhere & "([Return Date] >= " & Format(Me.Text101,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.Text103) Then 'Less than the next day.
strWhere = strWhere & "([Return Date] < " & Format(Me.Text103 + 1,
conJetDate) & ") AND "
End If
If Not IsNull(Me.Text93) Then
strWhere = strWhere & "([Class Start Date] >= " & Format(Me.Text93,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.Text107) Then 'Less than the next day.
strWhere = strWhere & "([Class Start Date] < " & Format(Me.Text107 +
1, conJetDate) & ") AND "
End If
If Not IsNull(Me.Text95) Then
strWhere = strWhere & "([Class End Date] >= " & Format(Me.Text95,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.Text105) Then 'Less than the next day.
strWhere = strWhere & "([Class End Date] < " & Format(Me.Text105 + 1,
conJetDate) & ") AND "
End If
'***********************************************************************
'Chop off the trailing " AND ", and use the string as the form's Filter.
'***********************************************************************
'See if the string has more than 5 characters (a trailng " AND ") to
remove.
lngLen = Len(strWhere) - 5
If lngLen <= 0 Then 'Nah: there was nothing in the string.
MsgBox "No criteria", vbInformation, "Nothing to do."
Else 'Yep: there is something there, so remove the "
AND " at the end.
strWhere = Left$(strWhere, lngLen)
'For debugging, remove the leading quote on the next line. Prints to
Immediate Window (Ctrl+G).
Debug.Print strWhere
'Finally, apply the string as the form's Filter.
Me.Filter = strWhere
Me.FilterOn = True
End If
End Sub
Private Sub cmdReset_Click()
'Purpose: Clear all the search boxes in the Form Header, and show all
records again.
Dim ctl As Control
'Clear all the controls in the Form Header section.
For Each ctl In Me.Section(acHeader).Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox
ctl.Value = Null
'Case acCheckBox
' ctl.Value = False
End Select
Next
'Remove the form's filter.
Me.FilterOn = False
End Sub
Private Sub Form_BeforeInsert(Cancel As Integer)
'To avoid problems if the filter returns no records, we did not set its
AllowAdditions to No.
'We prevent new records by cancelling the form's BeforeInsert event
instead.
'The problems are explained at http://allenbrowne.com/bug-06.html
Cancel = True
MsgBox "You cannot add new clients to the search form.", vbInformation,
"Permission denied."
End Sub
Private Sub Form_Open(Cancel As Integer)
'Remove the single quote from these lines if you want to initially show
no records.
'Me.Filter = "(False)"
'Me.FilterOn = True
End Sub
Private Sub txtFormFilter_BeforeUpdate(Cancel As Integer)
End Sub
Private Sub Command58_Click()
On Error GoTo Err_Command58_Click
DoCmd.RunMacro
Exit_Command58_Click:
Exit Sub
Err_Command58_Click:
MsgBox Err.Description
Resume Exit_Command58_Click
End Sub