2017-05-21 31 views
0
`Option Compare Database 

Option Explicit 
Dim argcount As Integer 
Dim mysql As String, msg As String, mysource As String, mycriteria As String,     mysource1 As String, mysql1 As String 

Private Sub AddtoWhere(FieldValue As Variant, FieldName As String, mycriteria As String, argcount As Integer) 

' Create criteria for WHERE clause. 
If FieldValue <> "" Then 
    ' Add "and" if other criterion exists. 
    If argcount > 0 Then 
     mycriteria = mycriteria & " and " 
    End If 

    ' Append criterion to existing criteria. 
    ' Enclose FieldValue and asterisk in quotation marks. 
    mycriteria = (mycriteria & FieldName & " Like " & Chr(34) & FieldValue & Chr(42) & Chr(34)) 

    ' Increase argument count. 
    argcount = argcount + 1 
End If 

End Sub 

Private Sub Search_Click() 

Dim Search As String 

here: 
argcount = 0 

' Initialize SELECT statement. 
mysql = "SELECT * FROM tbltab WHERE " 
mycriteria = "" 
mysql1 = "SELECT * FROM tblTemp WHERE " 
    mycriteria = "" 
' Use values entered in text boxes in form header to create criteria for   WHERE clause. 

AddtoWhere cboProduct, "ABC1", mycriteria, argcount 
AddtoWhere cboSource, "ABC2", mycriteria, argcount 
AddtoWhere cboPType, "ABC3", mycriteria, argcount 

'If no criterion specifed, stop the search. 
'you'll be glad you did if there are thousands of Persons maybe. 
If mycriteria = "" Then 
mycriteria = True 

End If 


' Create SELECT statement. 

mysource = mysql & mycriteria 

mysource1 = mysql1 & mycriteria 

Dim strval As String 

    'set the recordsource of the subform to the resultset 

Me!sfrmCap.Form.RecordSource = mysource 

Me!sfrmCapTemp.Form.RecordSource = mysource1 

Exit_cmdsearch_Click: 
Exit Sub 
Err_cmdsearch_Click: 

DoCmd.Hourglass False 

DoCmd.Echo True 

MsgBox Err.Description & " Person Search Command Cancelled", vbInformation,  "Person Search Command Cancelled" 

Resume Exit_cmdsearch_Click 

End Sub 

`我有一个窗体中有2个子窗体。我有一个搜索按钮,当点击搜索记录时使用组合框的值,但在一个组合框中,它显示的只是相关的记录,而不是完整的搜索。女士访问形式 - 如何使用搜索按钮完全过滤文本

任何人都可以帮助我。

谢谢。

+0

“[...]在一个组合框中显示的只是相关的记录而不是完整的搜索。” - 我不明白这是什么意思。我认为组合框被用来为搜索提供输入参数,但是这听起来好像他们应该显示搜索结果一样。你能详细说明吗? – Leviathan

+0

对不起,如果我没有解释清楚,组合框用于选择值或文本,然后文本应该用于过滤下面的数据表。组合框为搜索提供输入参数。正如你在图片中看到的,它没有显示完整的结果,而是显示相关的记录,我希望它应该搜索完整的文本。 – Beginner

+0

由一个组合框我的意思是,你可以看到图像我有5个组合框,其余工作正常,它只是源组合框不能正常工作,我无法找出问题。 – Beginner

回答

1

AddtoWhere()您汇编WHERE子句,增加新的条件是这样的:

mycriteria = (mycriteria & FieldName & " Like " & Chr(34) & FieldValue & Chr(42) & Chr(34)) 

如果你不确定这是什么实际上做了,你可以把上线断点(双击在保证金在行的前面)并且在执行程序时看到自己。

如果你这样做,你会发现,像这样的新条件将添加:

Source Like "Pre 2017 Source1*" 

*(在你的代码Chr(42)编码)作为任何字符匹配一个小丑,所以这条件返回以Pre 2017 Source1开头的所有内容 - 正如您在搜索结果中看到的一样。

如果您不想要这种行为,只需从SQL代码中删除星号,只返回完全匹配。

顺便说一句:你应该改进的代码行是这样的:

mycriteria = mycriteria & FieldName & " LIKE '" & Replace(FieldValue, "'", "''") & "'" 

这消除了Chr()不必要的使用,因为它是推荐的单引号的SQL字符串分隔符代替双引号,并使代码处理包含引号的值,否则会导致运行时错误。

+0

谢谢@Leviathan :)它的工作。 – Beginner