各位高手:
我用ADO+DATAGTID查询数据库中某一张表,现在我想做一个查询窗口,该窗口能够根据用户需要组合表中所有字段进行复合查询,
举例来说,我表中包含A,B,C,D,E.....13个字段,查询窗口由四列字段组成:字段名,关系,字段值,逻辑关系.其中"字段名”、“关系”、“逻辑关系”都支持下拉列表选择,“字段值”由用户录入。
“字段名”下拉列表内容包括表中所有的13个字段名,“关系”包含“>,>=,<,<=,=,<>,包含,不包含,为空值,不为空值”,“逻辑关系”包含“并且,或者”。
如果用户要查询A字段等于1并且B字段大于3的内容,他就可以在查询窗口选择:第一行:"字段名"为A,"关系"为"等于",字段值为"1",逻辑关系为"并且",第二行:"字段名"为B,"关系"为"大于",字段值为"3".然后点击“查询”按钮,执行查询即可.
不知我以上的想法说得是否清楚,求高手赐教.
我用ADO+DATAGTID查询数据库中某一张表,现在我想做一个查询窗口,该窗口能够根据用户需要组合表中所有字段进行复合查询,
举例来说,我表中包含A,B,C,D,E.....13个字段,查询窗口由四列字段组成:字段名,关系,字段值,逻辑关系.其中"字段名”、“关系”、“逻辑关系”都支持下拉列表选择,“字段值”由用户录入。
“字段名”下拉列表内容包括表中所有的13个字段名,“关系”包含“>,>=,<,<=,=,<>,包含,不包含,为空值,不为空值”,“逻辑关系”包含“并且,或者”。
如果用户要查询A字段等于1并且B字段大于3的内容,他就可以在查询窗口选择:第一行:"字段名"为A,"关系"为"等于",字段值为"1",逻辑关系为"并且",第二行:"字段名"为B,"关系"为"大于",字段值为"3".然后点击“查询”按钮,执行查询即可.
不知我以上的想法说得是否清楚,求高手赐教.
你就拼SQL就可以了
在窗口上放5个combo然后分别绑顶表中的所有列名 然后再 一个combo 添加 关系符号 然后是值
然后用 判断combo是不是有内容 如果有拼SQL就可以了 很好作的
Combo2.ListIndex = Combo1.ListIndex
End SubPrivate Sub Combo2_click()
Combo1.ListIndex = Combo2.ListIndex
End Sub
Private Sub Command1_Click()
Dim sql As String
sql = "..."
If rs.State = 1 Then
rs.Close
End If
rs.CursorLocation = adUseClient
rs.Open sql, conn, adOpenKeyset, adLockPessimistic
DataGrid1.AllowAddNew = False
DataGrid1.AllowDelete = False
Set DataGrid1.DataSource = rs
End Sub
是不是这个意思来的?
Dim Rs As New ADODB.Recordset
Dim rsCol As New ADODB.RecordsetPrivate Sub cmdSearch_Click()
Dim strSQL As String
If Rs.State = 1 Then Rs.Close
'开始拼SQL语句
strSQL = "Select * From TTT Where 1=1 "
For I = 0 To 1
If Me.cmbCol(I).Text <> "" Then'如果已经选择了列名
If Me.cmbBool(I).Text = "Like" Then'如果选择的条件判断符号是like要特殊处理
strSQL = strSQL + " And " & Me.cmbCol(I).Text & " " & Me.cmbBool(I).Text & " '%" & Me.txtStr(I).Text & "%' "
Else
strSQL = strSQL + " And " & Me.cmbCol(I).Text & " " & Me.cmbBool(I).Text & " '" & Me.txtStr(I).Text & "' "
End If
End If
Next I
Rs.Open strSQL, Con, adOpenStatic, adLockReadOnly
Set Me.DataGrid1.DataSource = Rs
Me.DataGrid1.Refresh
End SubPrivate Sub Form_Load()
Con.ConnectionString = Me.Adodc1.ConnectionString
Con.Open
Rs.Open "SELECT * FROM TTT", Con, adOpenStatic, adLockReadOnly'读取ttt的内容
Set Me.DataGrid1.DataSource = Rs
Me.DataGrid1.Refresh
rsCol.Open "Select name From syscolumns Where id=Object_Id('TTT')", Con, adOpenStatic, adLockReadOnly'读取系统表syscolumns 获得表ttt的字段
'向Combox的列选择里面 添加列名
While Not rsCol.EOF
For I = 0 To 1
Me.cmbCol(I).AddItem rsCol!Name
Next I
rsCol.MoveNext
Wend
'向combox条件选择中添加条件判断符
For I = 0 To 1
With Me.cmbBool(I)
.AddItem "<>"
.AddItem "="
.AddItem ">"
.AddItem "<"
.AddItem "Like"
End With
Next I
End Sub
cmbBool 装载条件判断符 TextBox控件数组(含两个) 判断的依据 一个cmdSearch的Command控件
同一行的控件数组的index是一一对应的