我有一段程序(如下),是想通过DTPicker控件查询指定日期的记录
Private Sub Command1_Click()
If rs.State = adStateOpen Then rs.Close
    rs.Open "SELECT * FROM 采购表 WHERE 日期 = " & DTPicker1.Value & "", cn, adOpenDynamic, adLockOptimistic
Set MSHFlexGrid1.DataSource = rs
End Sub明明数据库里确实存在符合查询时间的记录,但却在MSHFlexGrid却显示不出来,而如果我把查询语句设为
rs.Open "SELECT * FROM 采购表 ", cn, adOpenDynamic, adLockOptimistic
来查询,就可以查出所有数据,但我看到“日期”字段中显示的时间格式为“2000-7-16 00:00:00”,我在access数据库里设了该字段类型为“短日期”,也在DTPicker控件属性的格式设置为“1--dtpShortdate”
我真的已经没有办法了,麻烦大家帮帮忙。谢谢!

解决方案 »

  1.   

    rs.Open "SELECT * FROM 采购表 WHERE 日期 = #" & DTPicker1.Value & "#", cn, adOpenDynamic, adLockOptimistic
      

  2.   

    sinom(毛毛.小狮子>>苦学ORACLE)
    谢谢你,真的可以了,原因就这么简单。
    但现在还有一个小问题,就是查询结果里显示的日期格式是“2004-7-16 00:00:00”这样的格式,能不能让它不要显示时分秒呢?
      

  3.   

    不知道你用的什么数据库!如果是ACCESS数据库要用#号括起来,其他数据库用单引号括起来,你怎么什么都没有呢!如下:
    ACCESS数据库:rs.Open "SELECT * FROM 采购表 WHERE 日期 = #" & DTPicker1.Value & "#", cn, adOpenDynamic, adLockOptimistic其他数据库
    rs.Open "SELECT * FROM 采购表 WHERE 日期 = '" & DTPicker1.Value & "'", cn, adOpenDynamic, adLockOptimistic
      

  4.   

    你用绑定的要设置格式比较不方便呀。你如果真的在access数据库里设了该字段类型为“短日期”,那应该是没有小时分秒的,你检查一下楼上,楼主已经说了是用ACCESS了。。
      

  5.   

    rs.Open "SELECT * FROM 采购表 WHERE 日期 = #" & CDate(DTPicker1.Value) & "#", cn, adOpenDynamic, adLockOptimistic
      

  6.   

    楼上。。你可以用typename(dtpicker1.value)看看值是什么类型的,不必多此一举。
      

  7.   

    sinom(毛毛.小狮子>>苦学ORACLE) 
    你好,我真的在access里设了它的类型为“短日期”了,在access时看,它也没有时分秒的,但到发MSHFlexGrid里就看得到了:(
      

  8.   

    那我想只能后期修改了:
    for i=1 to fg.rows
     fg.textmatrix(i,col)=format(fg.textmatrix(i,col),"yyyy年MM月dd日")
    next
      

  9.   

    一时没注意~~~~~~~
    不过从楼主的SQL语句里看出来,楼主对数据库中的日期类型不太熟悉,我将不同数据库日期类型的查询都说出来也未尝不可,难道有问题吗?~~~~~~TO:楼主
    如果你数据库中已经设置了短日期,绑定后显示的还是长日期格式的话,看来只有手工修改了!!
    如小狮所说!!!不过还是建议不要用绑定,比较灵活!!!
      

  10.   

    是不是把它加在command_click()里?
    我试了,还是不行!
      

  11.   

    cuizm(射天狼) 和解sinom(毛毛.小狮子>>苦学ORACLE) 
    谢谢你们,对于我这个初学VB的人来讲,是到处碰钉的,程序做着做着就这个问题那个问题的,有很多在书上也难找答案,自从有同学介绍我上这里后,我真是觉得很开心,我觉得这里的人又叻又乐意帮人,每次发贴都能得到回应,所以真的很衷心谢谢大家。
      

  12.   

    我初学VB的,不知道为什么用绑定不好?如果不用绑定,那我应该怎么做呢?怎么样把查询的结果显示在MSHFlexGrid里面呢?
      

  13.   

    我试了一下,是这样的,实际上在ACCESS中小时分秒的值还是存在的,但是你设置成“短日期”格式以后就不显示出来了,但值还是有的。所以你在把日期写入到数据库时,要注意先用format()格式化一下。还有,使用我的代码是可以的,我试了。
      

  14.   

    你的意思是当我写入数据库时就要用format()格式化?还是在显示出来时才格式化?
    我不是很明白,是不是应该把你的代码写在Set MSHFlexGrid1.DataSource = rs之后啊?
      

  15.   

    不用绑定,可以用对象的方式显示,写一个简单的例子给你:
    ...
    dim objCon as new adodb.connection
    dim objRs as new adodb.recordset
    dim lngRow as long,lngCol as long
    ...
    objcon.connectionstring="..."
    objcon.open
    objrs.open "SELECT * FROM 采购表 WHERE 日期 = #" & DTPicker1.Value & "#", cn, adOpenDynamic, adLockOptimistic
    with fg'msflexgrid控件对象
     .cols=objrs.fields.count
     .rows=objrs.recordcount
     for lngrow=1 to .rows
      for lngcol=1 to .cols
       .textmatrix(lngrow,lngcol)=objrs.fields(lngcol-1).value
      next
      objrs.movenext
     next
    end with
    objrs.close
    objcon.close
    set objrs=nothing
    set objcon=nothing
      

  16.   

    是写入的时候要格式化,比如:
    strsql="insert into 采购表 (日期) values (#" & format(日期变量,"yyyy年MM月dd日") & "#)"是要写在那句之后的
      

  17.   

    好的,非常感谢大家,特别是版主和sinom(毛毛.小狮子>>苦学ORACLE)
      

  18.   

    不知道你用的什么数据库!如果是ACCESS数据库要用#号括起来,其他数据库用单引号括起来,你怎么什么都没有呢!如下:
    ACCESS数据库:rs.Open "SELECT * FROM 采购表 WHERE 日期 = #" & DTPicker1.Value & "#", cn, adOpenDynamic, adLockOptimistic其他数据库
    rs.Open "SELECT * FROM 采购表 WHERE 日期 = '" & DTPicker1.Value & "'", cn, adOpenDynamic, adLockOptimistic
    谢谢