出错提示:标准表达式中数据类型不匹配,出错行:ret.Open local_db, cnn
按昨天好心人教的改了半天..现在程序运行没反映了..晕Private Sub Command1_Click()
Dim cnn As New ADODB.Connection
Dim ret As New ADODB.Recordset
Dim local_db As String
Set cnn = New ADODB.Connection
Set ret = New ADODB.Recordset
ret.CursorLocation = adUseClient
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path & "\车辆管理(含图片).mdb" + ";Persist Security Info=False;"
local_db = "select * from 出入表 where 1=1"
If IsDate(Text2) Then local_db = local_db & " and 出入表.进入时间>=" & CDate(Text2) & ""
If IsDate(Text3) Then local_db = local_db & " and 出入表.进入时间<=" & CDate(Text3) & ""
ret.Open local_db, cnn
If ret.BOF And ret.EOF Then
MsgBox "此时间内无车辆出入", , "警告"
Text2.Text = ""
Text2.SetFocus
Else
Set 查询结果.DataGrid1.DataSource = ret
End If
End Sub

解决方案 »

  1.   

    if 进入时间 的字段类型是 字符型  then  local_db & " and 出入表.进入时间>='" & CDate(Text2) & "'
    if 进入时间 的字段类型是 日期型 并且是SQL SERVER   then  local_db & " and 出入表.进入时间>='" & CDate(Text2) & "'
    if 进入时间 的字段类型是 日期型 并且是ACCESS then  local_db & " and 出入表.进入时间>=#" & CDate(Text2) & "#
      

  2.   

    另外 最好加上 format(CDate(Text2),"yyyy-MM-dd")
      

  3.   

    ret.Open local_db, cnn , 3 , 3
      

  4.   

    找到问题了。最后缺了“查询结果.show”这句。。晕
    if 进入时间 的字段类型是 日期型 并且是ACCESS then  local_db & " and 出入表.进入时间>=" & CDate(Text2) & "" ,不加#也可以的。
    不过又有个小问题。查询结果没有text3这天的记录,如text3输入2008-7-29,显示没有这天的记录。怎么回事?
      

  5.   

    有个小问题。查询结果没有text3这天的记录,如text3输入2008-7-29,显示没有这天的记录。怎么回事?高手帮帮忙啊。没解决怎么结分啊
      

  6.   

    access中,日期不加#能行吗?字段是不是日期类型
      

  7.   

    If IsDate(Text2) Then local_db = local_db & " and 出入表.进入时间>=" & CDate(Text2) & "" 
    改为:If IsDate(Text2) Then local_db = local_db & " and (between 出入表.进入时间 '" & format(Text2,"yyyy-mm-dd") & " 00:00:00' " 
    If IsDate(Text3) Then local_db = local_db & " and 出入表.进入时间 <=" & CDate(Text3) & "" 
    改为:If IsDate(Text3) Then local_db = local_db & " and '" & format(Text3,"yyyy-mm-dd") & " 23:59:59')" 
      

  8.   

    简单点,就是用between and查询
      

  9.   

    If IsDate(Text3) Then local_db = local_db & " and 出入表.进入时间 <=" & CDate(Text3) & "" 
    改为:If IsDate(Text3) Then local_db = local_db & " and '" & format(Text3,"yyyy-mm-dd") & " 23:59:59" & "')" 
      

  10.   

    between and查询的结果是中间的。不包括两边。我试过的
      

  11.   

    Dim strD1 As String, strD2 As String
      strD1 = Text2.text & " 00:00:00" '起始日期
      strD2 = Text3.text & " 23:59:59" '结束日期
      local_db = " and (出入表.进入时间 between '" & Format(strD1, "yyyy-mm-dd hh:mm:ss") & _
      "' and '" & Format(strD2, "yyyy-mm-dd hh:mm:ss") & "') "
      

  12.   

    你数据库中[出入表.进入时间]是不是带有时间呀?如果是有时间,那么就改为"出入表.进入时间 <" & CDate(Text3)+1  "" "
    或者,把数据库中的值取出来格式化成日期格式.
      

  13.   

    十分感谢
    不过你这里有点问题。日期用#,字符用’。另外 strD1 = Text2.text & " 00:00:00"的功能是“从凌晨开始”这个意思吗?
    正确代码:
    local_db = local_db &" and (出入表.进入时间 between #" & Format(strD1, "yyyy-mm-dd hh:mm:ss") & _ 
      "# and #" & Format(strD2, "yyyy-mm-dd hh:mm:ss") & "#) "
      

  14.   

    我自己的程序一直',不用#,至今没有问题,不过我一直用的SQL SERVER 2000,可能SQL SERVER会自动转换类型吧
      

  15.   

    sql用‘,ACCESS用#。高手教我的。。呵呵