各位高手:
我用ADO+DATAGTID查询数据库中某一张表,现在我想做一个查询窗口,该窗口能够根据用户需要组合表中所有字段进行复合查询,
举例来说,我表中包含A,B,C,D,E.....13个字段,查询窗口由四列字段组成:字段名,关系,字段值,逻辑关系.其中"字段名”、“关系”、“逻辑关系”都支持下拉列表选择,“字段值”由用户录入。
“字段名”下拉列表内容包括表中所有的13个字段名,“关系”包含“>,>=,<,<=,=,<>,包含,不包含,为空值,不为空值”,“逻辑关系”包含“并且,或者”。
如果用户要查询A字段等于1并且B字段大于3的内容,他就可以在查询窗口选择:第一行:"字段名"为A,"关系"为"等于",字段值为"1",逻辑关系为"并且",第二行:"字段名"为B,"关系"为"大于",字段值为"3".然后点击“查询”按钮,执行查询即可.
不知我以上的想法说得是否清楚,求高手赐教.

解决方案 »

  1.   

    可以
    你就拼SQL就可以了
    在窗口上放5个combo然后分别绑顶表中的所有列名 然后再 一个combo 添加 关系符号 然后是值
    然后用 判断combo是不是有内容 如果有拼SQL就可以了 很好作的
      

  2.   

    把字段和判斷符列出來讓用戶選擇,然後拼成SQL語句就成。寫過。很簡單。
      

  3.   

    Private Sub Combo1_click()
    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
    是不是这个意思来的?
      

  4.   

    Dim Con As New ADODB.Connection
        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
      

  5.   

    我的画面上面有adodc,DataGrid,ComBox控件数组(都是含两个)cmbCol 装载 表包含的列名
    cmbBool 装载条件判断符 TextBox控件数组(含两个) 判断的依据 一个cmdSearch的Command控件
    同一行的控件数组的index是一一对应的