VB操作ACCESS数据库的问题,麻烦大家帮忙看看

苏克贝塔03 2012-10-22 01:31:38

Set getrsp = cnn.Execute("SELECT * FROM gpsdata where cisu ='" & cisu & "' and Datediff(d,startdate,'" & tmpdate & " ') = 0 ORDER BY 时间")

数据库中startdate字段位DATE型,tmpdate定义的也为DATE型,断点运行时值为"2012-10-19"也是对的,怎么SQL还是查询不到呢?
...全文
192 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏克贝塔03 2012-10-27
  • 打赏
  • 举报
回复
还有一个问题:(我没有分,发不了贴了)(我每次都是有问题了,才想到咱们的论坛,有时间的时候就跑去上网了,哎,罪过)
有一个ACCESS数据表data,假如data里有数据
9999999.9983
9999999.9988
9999999.9949
9999999.9987
9999345.4567
9999999.9952
9999999.9991
9999999.9991
9999999.9965
我想遍历一遍把9999945.4567给删除掉(9999345.4567认为是跳点),然后在显示,这样描绘的曲线就更清楚了。
删除点的方法是,For i=beginning+1 To ending-1
delt=0.5*((i-1).value+(i+1).value)
i.value>10*delt
delete i
Next
但是这个在AEECSS里怎么表示啊?谢谢大家了,
h808123 2012-10-27
  • 打赏
  • 举报
回复
sql语句的问题,也就是 说类型转换的问题。顶of123
苏克贝塔03 2012-10-27
  • 打赏
  • 举报
回复
2、就是我想写个函数
Public Function getrst(cnn As ADODB.Connection) As ADODB.Recordset
然后在下次可以供其他函数调用,比如disp_rst(rst As ADODB.Connection),这样可不可以呢?
因为我现在的代码都是每次要显示的时候都要执行sql语句
Set rs = cnn.Execute("SELECT count(*) FROM gps where Year(startdate) =" & date_Y & " and Month(startdate)=" & date_M & " and Day(startdate)=" & date_D & " and num = " & NumId & "and cisu ='" & cisu & "' "),我想既然都有记录集rst了,就应该可以用函数把它显示出来了吧。
谢谢
苏克贝塔03 2012-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

需要理解的是,VB 中的日期类型实际上是作为 Double 类型存储的。(当你在界面上读取时,VB 会因为它是日期类型,自动转换出日期字符串。)而 SQL 命令,实际上是以字符串形式传送到数据库引擎的。但你将日期变量拼接到字符串时,它会直接接入数值。你将 SQL 语句打印出来就看到了。

对于日期字符串,如果是 Access 数据库,需要加 # 号括起来,以表示运算时应转为日期数值。如果是 ……
[/Quote]
of123 总是回复的切中要害,让我想起一句话,知其然,知其所以然。呵呵
对了有两个问题,要请教您:
1、我用的这种方法,即把startdate拆成数字来查询的,这种查询比startdate = #" & Format(tmpdate, "yyyy-mm-dd")是不是效率要慢一点呢,影响查询效率的因素主要是什么呢?(因为我觉得sql语句越长效率越低,呵呵)
Set getrsp = cnn.Execute("SELECT * FROM gpsdata where Year(startdate) =" & date_Y & " and Month(startdate)=" & date_M & " and Day(startdate)=" & date_D & "and cisu ='" & cisu & "' ORDER BY 时间")
of123 2012-10-23
  • 打赏
  • 举报
回复
需要理解的是,VB 中的日期类型实际上是作为 Double 类型存储的。(当你在界面上读取时,VB 会因为它是日期类型,自动转换出日期字符串。)而 SQL 命令,实际上是以字符串形式传送到数据库引擎的。但你将日期变量拼接到字符串时,它会直接接入数值。你将 SQL 语句打印出来就看到了。

对于日期字符串,如果是 Access 数据库,需要加 # 号括起来,以表示运算时应转为日期数值。如果是 SQL 数据库,则用单引号。

另外 Datediff() = 0 可以直接用两日期相等的表达式。

Set getrsp = cnn.Execute("SELECT * FROM gpsdata where cisu ='" & cisu & "' and startdate = #" & Format(tmpdate, "yyyy-mm-dd") & "# ORDER BY 时间")
vnking 2012-10-22
  • 打赏
  • 举报
回复
先在access里面操练SQL语句,跟MS-SQL还是有点差别的,这个跟VB无关。
饮水需思源 2012-10-22
  • 打赏
  • 举报
回复
查一下access中有没有datediff函数

7,763

社区成员

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

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