|
自定义个函数,你想点查也可以
同一列多条件并查,多列多条件查。
Public Function 模糊搜索(数据源 As String, Optional 条件 As String, Optional 关系 As Boolean) As String
''=================================================================================
'' 函数说明:
'' 此函数执行成功则返回一个包含全字段模糊查询条件的查询语句,否则返回一个空字符串。
'' 参数说明:
'' 数据源 参数: 必填 可以是表名、查询名、SQL语句
'' 条件 参数: 可选 可以是任何字符,多个条件用空格隔开
'' 关系 参数: 可选 为真假值,确定多个条件之间的关系,为真关系是"or",为假关系是"and"
'' 使用示例:
'' Me.列表框1.RowSource = 模糊搜索("人员表", Me.文本1)
'' Me.子窗体.Form.RecordSource = 模糊搜索("Select * From 人员表", "张小 大力 001",true)
'
'' 设计:t小宝
'' 创建日期:2007-12-27
'' 更新日期:2007-12-30
''==================================================================================
On Error GoTo Err1
Dim dbs As DAO.Database
Dim r字段 As DAO.Recordset
Dim stsql As String
Dim s数组() As String
Dim s字段 As String
Dim s条件 As String
Dim s关系 As String
Dim i条件 As Integer
Dim i As Integer
Dim i1 As Integer
If Len(数据源) = 0 Then ' 不输入数据源,退出
Exit Function
End If
' 转换数据源参数为SQL语句
If InStr(1, 数据源, "select", 1) = 0 Then ' 如果数据源是查询语句
stsql = "Select * From [" & 数据源 & "] "
Else ' 数据源是表名或查询名称
stsql = "Select * From (" & 数据源 & ") As a "
End If
s条件 = Trim(条件)
If Len(s条件) = 0 Then ' 不输入条件
模糊搜索 = stsql
Exit Function
End If
' 清除条件中多余的空格,转换为数组
Do Until InStr(1, s条件, " ", 0) = 0
s条件 = Replace(s条件, " ", " ") ' 用一个空格替换两个空格
Loop
s数组 = Split(s条件)
i条件 = UBound(s数组)
' 循环组合字段条件
Set dbs = CurrentDb
Set r字段 = dbs.OpenRecordset(stsql & " Where False")
With r字段
For i = 0 To .Fields.Count - 1 ' 循环组合条件字段
s字段 = s字段 & "[" & .Fields(i).Name & "] & ' ' & "
Next
.close
End With
s字段 = Left(s字段, Len(s字段) - 8) ' 去掉后面多余的字符
' 关系字符
If 关系 Then
s关系 = "*' or "
Else
s关系 = "*' and "
End If
For i1 = 0 To i条件 ' 循环条件
模糊搜索 = 模糊搜索 & s字段 & "Like'*" & s数组(i1) & s关系 ' 组合字段和条件
Next
模糊搜索 = " Where " & Left(模糊搜索, Len(模糊搜索) - 4) ' 去掉后面多余的字符,加上" Where "
模糊搜索 = stsql & 模糊搜索
Set r字段 = Nothing
Set dbs = Nothing
Exit1:
Exit Function
Err1:
模糊搜索 = ""
MsgBox Err.Description, vbExclamation, "发生错误"
Resume Exit1
End Function |
|