年底最后一问:用VB读DBF数据库中SQL语句的如何选择符合时间条件的记录????指教

glc20022003 2006-01-23 05:06:59
我想选出大于符合我条件的所有记录,提示错误:
[Microsoft][ODBC Visual FoxPro Driver]operator/operand type mismatch
没折,估计是时间格式不对.高来帮忙解决一下,年前最后一个问题了!!!!!!!!!!

程序如下:
Option Explicit

Private Sub Form_Load()
'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=main1;UID=;SourceDB=d:\金基翠城\电子巡更\3000;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim connstr As String
connstr = "Provider=MSDASQL.1;Persist Security Info=False;" & _
"Extended Properties=DSN=main1;" & _
"UID=;SourceDB=d:\3000;SourceType=DBF;Exclusive=No;" & _
"BackgroundFetch=Yes;Collate=Machine;"
conn.Open connstr

MsgBox conn.State ←显示等于1,说明数据库连接上了

Dim sql As String
sql = "select * from main"
rs.Open sql, conn, adOpenStatic, adLockReadOnly
MsgBox rs.RecordCount ← 显示等于29
rs.Close

Dim datetime As date
datetime = Format("2003-05-20", "yyyy-mm-dd")
sql = "select * from main where CDATE>'" & datetime & "'" ←这边出错
rs.Open sql, conn, adOpenStatic, adLockReadOnly
MsgBox rs.RecordCount
rs.Close
conn.Close
End Sub

...全文
274 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
glc20022003 2006-01-24
  • 打赏
  • 举报
回复
To:faysky2()
刚在ASP论坛找到了,不过还是要谢谢你.另一个地方的30分也都给你了
datetime = Chr$(34) & "20030519" & Chr$(34)
sql = "select * from main.dbf where dtos(cdate)> " & datetime & ""
真想骂,什么烂格式.
glc20022003 2006-01-24
  • 打赏
  • 举报
回复
我觉得应该是时间的格式不对,刚才看了Delphi论坛上读VFP文件的时间格式是MM/DD/YYYY这样的,不过我这里还是不行哦.
VFP,真是个破数据库.
faysky2 2006-01-24
  • 打赏
  • 举报
回复
表名也改不了,那还是用原来的把,不过查询的时候在表名后面加上.dbf

sql = "select * from main.dbf where [cdate]>'" & datetime & "'"
faysky2 2006-01-24
  • 打赏
  • 举报
回复
再改一次,把文件名改一下,查询语句这样写,还是不正确的话,无语了

sql = "select * from XXX.dbf where [cdate]>'" & datetime & "'"
glc20022003 2006-01-24
  • 打赏
  • 举报
回复
不是我说了算的,读的是别人电脑上的DBF文件.字段也是那里的,我改不了
Wonny 2006-01-23
  • 打赏
  • 举报
回复
为什么要用 dbf?

试试这个:
sql = "select * from main where [cdate]<=#" & Year(datetime) & "-" & month(datetime) & "-" & day(datetime) & "#"
顺便说一句,觉得您的变量命名不太好。至少在需要统改语句时,用查找替换会导致很多问题。

glc20022003 2006-01-23
  • 打赏
  • 举报
回复
表名就是它的文件名main.dbf.查询语句以前读MDB,SQL,DB都是这么写的
faysky2 2006-01-23
  • 打赏
  • 举报
回复
奇怪,重新命名表,查询语句也改一下再看
glc20022003 2006-01-23
  • 打赏
  • 举报
回复
有QQ吗?我加你下好吗?
glc20022003 2006-01-23
  • 打赏
  • 举报
回复
这样的话,有0条记录,奇怪
faysky2 2006-01-23
  • 打赏
  • 举报
回复
改一下条件,看它得出多少条记录;
sql = "select * from main where [cdate]<='" & datetime & "'"

glc20022003 2006-01-23
  • 打赏
  • 举报
回复
Dim datetime As Date
datetime = CDate("2003-05-20")
sql = "select * from main where [cdate]>'" & datetime & "'"
rs.Open sql, conn, adOpenStatic, adLockReadOnly

MsgBox rs.RecordCount

还是29
faysky2 2006-01-23
  • 打赏
  • 举报
回复
把format语句改为
datetime = Cdate("2003-05-20") 再试

glc20022003 2006-01-23
  • 打赏
  • 举报
回复
MsgBox rs.Fields("cdate")后出现的是2003-5-16,斜了门了
glc20022003 2006-01-23
  • 打赏
  • 举报
回复
还是显示29
faysky2 2006-01-23
  • 打赏
  • 举报
回复
想不出是什么原因

试试

sql = "select * from main where Trim([CDATE])>'" & datetime & "'"

glc20022003 2006-01-23
  • 打赏
  • 举报
回复
我用DBF VIEW2000打开看是yyyy-mm-dd格式呀,试了好多次了,#2003-05-20#,2003/05/20都试了,还是这样
faysky2 2006-01-23
  • 打赏
  • 举报
回复
你的数据库里存放的日期是什么格式的?是yyyy-mm-dd还是yyyy-m-d ?

你把format那句注释掉再试试
glc20022003 2006-01-23
  • 打赏
  • 举报
回复
先去吃饭了,6点半来.欢迎高手帮忙解决一下,以前没有搞过.自己顶一下.
glc20022003 2006-01-23
  • 打赏
  • 举报
回复
To:faysky2()
也显示29,应该是满足要求的只有12条记录呀
加载更多回复(1)

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧