**********************************************
Private Sub Command1_Click()
Dim SQL As String
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim MsgString As String
 conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb"
            SQL = "SELECT * FROM 报告 WHERE "
If (Check1.Value = 1 And Check2.Value = 1) Or (Check1.Value = 1 And Check3.Value = 1) Or (Check1.Value = 1 And Check4.Value = 1) Or (Check2.Value = 1 And Check3.Value = 1) Or (Check2.Value = 1 And Check4.Value = 1) Or (Check3.Value = 1 And Check4.Value = 1) Then
             MsgBox "对不起,你只能用一种查询方式"
End If
If Check1.Value <> 1 And Check2.Value <> 1 And Check3.Value <> 1 And Check4.Value <> 1 Then
             MsgBox "你忘记了选择"
End If
If Check1.Value = 1 And Check2.Value <> 1 And Check3.Value <> 1 And Check4.Value <> 1 Then
    If Trim(Text1.Text) = "" Then
            MsgBox "空输入!", vbOKOnly
            Text1.SetFocus
    End If
    SQL = SQL & "学号='" & Trim(Text1.Text) & "'"
End If
If Check1.Value <> 1 And Check2.Value = 1 And Check3.Value <> 1 And Check4.Value <> 1 Then
    If Trim(Text2.Text) = "" Then
            MsgBox "空输入!", vbOKOnly
            Text2.SetFocus
    End If
    SQL = SQL & "班号='" & Trim(Text2.Text) & "'"
End If
If Check1.Value <> 1 And Check2.Value <> 1 And Check3.Value = 1 And Check4.Value <> 1 Then
    If Trim(Text3.Text) = "" Then
            MsgBox "空输入!", vbOKOnly
            Text3.SetFocus
    End If
    SQL = SQL & "姓名='" & Trim(Text3.Text) & "'"
End If
If Check1.Value <> 1 And Check2.Value <> 1 And Check3.Value <> 1 And Check4.Value = 1 Then
    If Trim(Text4.Text) = "" Then
            MsgBox "输入年空", vbOKOnly
            Text4.SetFocus
            Else
                If Trim(Text5.Text) = "" Then
                        MsgBox "输入月空", vbOKOnly
                        Text5.SetFocus
                        Else
                                If Trim(Text6.Text) = "" Then
                                        MsgBox "输入日空", vbOKOnly
                                        Text6.SetFocus
                                End If
                 End If
    End If
        SQL = SQL & "年='" & Trim(Text4.Text) & "'"
        SQL = SQL & "AND 月='" & Trim(Text5.Text) & "'"
        SQL = SQL & "AND 日='" & Trim(Text6.Text) & "'"
End If
'conn.Execute SQL
rs.Open SQL ,conn, adOpenDynamic, adLockOptimistic////出错地方
With myflexgrid
    .Rows = 2
    .CellAlignment = 4
    .TextMatrix(1, 0) = "姓名"
    .TextMatrix(1, 1) = "性别"
    .TextMatrix(1, 2) = "年龄"
    .TextMatrix(1, 3) = "门诊号"
    .TextMatrix(1, 4) = "住院号"
    .TextMatrix(1, 5) = "检查年"
    .TextMatrix(1, 6) = "检查月"
    .TextMatrix(1, 7) = "检查日"
    .TextMatrix(1, 8) = "检查部位"
    .TextMatrix(1, 9) = "检查预诊"
    .TextMatrix(1, 10) = "X所见及解释"
Do While Not rs.EOF
    .Rows = .Rows + 1
    .CellAlignment = 4
    .TextMatrix(.Rows - 1, 0) = rs.Fields(0)
    .TextMatrix(.Rows - 1, 1) = rs.Fields(1)
    .TextMatrix(.Rows - 1, 2) = rs.Fields(2)
    .TextMatrix(.Rows - 1, 3) = rs.Fields(3)
    .TextMatrix(.Rows - 1, 4) = rs.Fields(4)
    .TextMatrix(.Rows - 1, 5) = rs.Fields(5)
    .TextMatrix(.Rows - 1, 6) = rs.Fields(6)
    .TextMatrix(.Rows - 1, 7) = rs.Fields(7)
    .TextMatrix(.Rows - 1, 8) = rs.Fields(8)
    .TextMatrix(.Rows - 1, 9) = rs.Fields(9)
    .TextMatrix(.Rows - 1, 10) = rs.Fields(10)
    rs.MoveNext
Loop
End With
conn.Close
rs.Close
End Sub
Private Sub Command2_Click()
Form2.Show
Me.Hide
End Sub出错说明:查询字句标准表达式数据类型不匹配而当我把where后的 空格去掉后,提示错误:From字句错误而当我在rs.Open后面不用SQL,而用"select * from 报表 "时,则提示错误:错误用valid
**********************************************

解决方案 »

  1.   

    能否告訴我出錯在那句?查询字句标准表达式数据类型不匹配
    ///通常數字"& &" ,字符'"&&"'
      

  2.   

    SQL = "SELECT * FROM 报告 WHERE "空格去掉后,sql构造成这样的,所以报错
    SQL = "SELECT * FROM 报告 WHERE班号='" & Trim(Text2.Text) & "'"//rs.Open SQL ,conn, adOpenDynamic, adLockOptimistic////出错地方
    跟踪一下sql的值就知道了
      

  3.   

    我暈第一,把你的sql改變成Dim strSQL As String第二,rs.Open strSQL ,conn, adOpenDynamic, adLockOptimistic////出錯地方
    在這裡設置斷掉。
    debug.print strsql這句話.
      

  4.   

    To  online(龙卷风V2.0--再战江湖)
    跟踪sql的值?
    但是我不知怎么跟踪
    用form1.caption=SQL吗?
      

  5.   

    将你的查询语句直接放到access中执行一下,看看有没有问题。
      

  6.   


    但是我不知怎么跟踪
    ///設置斷點呀,就是單擊把rs.Open strSQL ,conn, adOpenDynamic, adLockOptimistic////出錯地方這裡面變紅色然後msgbox sql  我是建議你不要用sql,你不信隨便你
      

  7.   

    同意以上各位的意见,还有,你用的是ACCESS数据库,所以有关时间的查询语句要用#号
      SQL = SQL & "年=#" & Format(Text4.Text,"yy") & "#"
        SQL = SQL & "AND 月=#" & Format(Text5.Text,"mm") & "#"
        SQL = SQL & "AND 日=#" & Format(Text6.Text,"dd") & "#"
      

  8.   

    恩我知道了,不用SQL
    先前没有刷新,没有看到
      

  9.   

    简化说法
    就是说我把SQL完全不考虑了
    现在程序变成
    Private Sub Command1_Click()
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim MsgString As String
     conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb"
     conn.Execute SQL
    rs.Open "select * from 报表",conn, adOpenDynamic, adLockOptimistic
    end sub
    就这么简单也会出错
    提示:valid use NUll
    请问时怎么回事?
      

  10.   

    conn.Execute SQL 
    //當然錯了sql都沒有嗎Option Explicit
    Public conn As New ADODB.Connection
    Public rs As New ADODB.RecordsetPrivate Sub Form_Load()
     Dim strconn As String
     strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\test.mdb;Persist Security Info=False;Jet OLEDB:DataBase Password='123'"
     conn.CursorLocation = adUseClient
     conn.Open strconn
     
     If rs.State = 1 Then rs.Close
     rs.Open "select * from Phonebook", conn, 3, 3
     
     Set Me.DataGrid1.DataSource = rs
    End Sub