我用datagrid控件绑定ADO控件显示Access数据库一故障表中的数据,在表中有若干个字段(比如故障1,故障2,...故障n,日期,星期,时间),对于某一个字段(比如故障1)来说,只要满足我的检索条件(例如故障1=1,1表示发生了故障1),我就将故障1,日期,星期,时间这几个字段在datagrid控件中显示出来,将其他字段(故障2,...故障n)隐藏(DataGrid1.Columns(i).Visible = False),现在我想把所有的故障情况都显示出来,即在故障1所有出现情况显示完之后接着显示故障2所有的情况,以此类推直到所有的故障情况都列出来,但是我现在只能显示最后一种故障的情况(故障n),我的关键代码如下:
           sqlstring = sqlstring & "AND 故障=1" 'sqlstring为各故障通用的select语句
           DataGrid1.Columns.Add(0).Caption = "故障" '标签头
           Call queryrefresh
           For i = 1 To 21
             DataGrid1.Columns(i).Visible = False
           Next
...
sqlstring = sqlstring & "AND 故障=n" 'sqlstring为各故障通用的select语句
           DataGrid1.Columns.Add(0).Caption = "故障" '标签头
           Call queryrefresh
           For i = 0 To n-1
             DataGrid1.Columns(i).Visible = False
           Next子程序queryrefresh    '查找数据库中满足搜索条件的记录
Public Sub queryrefresh()
     With Query
          .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\项目\通信程序\Database\DB_Siv.mdb;Persist Security Info=False"
          .RecordSource = sqlstring
          .Refresh
     End With
End Sub
不知道代码有什么问题,各位大侠帮帮忙!谢谢

解决方案 »

  1.   

    你的问题是多次执行SQL查询语句,执行结果只能以最后一次条件为准,以下提供一段代码是多条件选择查询的:Option Explicit
    Dim db As adodb.Connection
    Dim rs As adodb.Recordset
    Dim a(4) As String
    Dim sql1(3) As String
    Dim sql2 As StringPrivate Sub Form_Load()
    a(0) = "故障1"
    a(1) = "故障2"
    a(2) = "故障3"
    End SubPrivate Sub Command3_Click()
    Dim sql As String
    If Check1.Value = 1 And Check2.Value = 1 And Check3.Value = 1 Then
    sql2 = a(0) & "," & a(1) + "," + a(2)
    ElseIf Check1.Value = 1 And Check2.Value = 1 Then
    sql2 = a(0) + "," + a(1)
    ElseIf Check1.Value = 1 And Check3.Value = 1 Then
    sql2 = a(0) + "," + a(2)
    ElseIf Check2.Value = 1 And Check3.Value = 1 Then
    sql2 = a(1) + "," + a(2)
    ElseIf Check1.Value = 1 Then
    sql2 = a(0)
    ElseIf Check2.Value = 1 Then
    sql2 = a(1)
    ElseIf Check3.Value = 1 Then
    sql2 = a(2)
    Else
    sql2 = "*"
    End If
    sql = "select " & sql2 & " from mdlk_sj" '注意mdlk_sj改为你的数据表名,并增加你需显示的其他字段名
    Text5 = sql
    Set db = New adodb.Connection
    Set rs = New adodb.Recordset
    db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\项目\通信程序\Database\DB_Siv.mdb;Persist Security Info=False"
    db.Open
    rs.CursorLocation = adUseClient
    rs.Open sql, db, adOpenStatic, adLockReadOnly
    Set DataGrid1.DataSource = rs
    End Sub
      

  2.   

    以下代码中的",箱数 from mdlk_sj"应改为需显示的其他字段名和你的数据表名Private Sub Command3_Click()
    Dim sql As String
    If Check1.Value = 1 And Check2.Value = 1 And Check3.Value = 1 Then
    sql2 = a(0) & "," & a(1) + "," + a(2)
    sql = "select " & sql2 & ",箱数 from mdlk_sj"
    ElseIf Check1.Value = 1 And Check2.Value = 1 Then
    sql2 = a(0) + "," + a(1)
    sql = "select " & sql2 & ",箱数 from mdlk_sj"
    ElseIf Check1.Value = 1 And Check3.Value = 1 Then
    sql2 = a(0) + "," + a(2)
    sql = "select " & sql2 & ",箱数 from mdlk_sj"
    ElseIf Check2.Value = 1 And Check3.Value = 1 Then
    sql2 = a(1) + "," + a(2)
    sql = "select " & sql2 & ",箱数 from mdlk_sj"
    ElseIf Check1.Value = 1 Then
    sql2 = a(0)
    sql = "select " & sql2 & ",箱数 from mdlk_sj"
    ElseIf Check2.Value = 1 Then
    sql2 = a(1)
    sql = "select " & sql2 & ",箱数 from mdlk_sj"
    ElseIf Check3.Value = 1 Then
    sql2 = a(2)
    sql = "select " & sql2 & ",箱数 from mdlk_sj"
    Else
    sql = "select * from mdlk_sj"
    End If
    Text5 = sql
    Set db = New adodb.Connection
    Set rs = New adodb.Recordset
    db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\项目\通信程序\Database\DB_Siv.mdb;Persist Security Info=False"
    db.Open
    rs.CursorLocation = adUseClient
    rs.Open sql, db, adOpenStatic, adLockReadOnly
    Set DataGrid1.DataSource = rs
    End Sub