每秒更新一次数据库,可是记录下来的时间却顺序错乱,这是为什么呢?

xiaofeng54 2010-01-18 08:45:31
Private Sub Timer1_Timer()
Dim adoCnn As New ADODB.Connection
Dim adoRst As ADODB.Recordset
Dim sql As String

adoCnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=TEST;Data Source=PC2010010923NXM"
adoCnn.Open
sql = "insert into T1(DateTime) values('" & DateTime.Now() & "')"
adoCnn.Execute sql
End Sub


Timer的时间设置是1秒,就是每秒记录一次,可是我在数据库 T1 表中看到记下来的时间是错乱的,例如:

2010-1-18 20:39:41
2010-1-18 20:39:43
2010-1-18 20:39:44
2010-1-18 20:39:45
2010-1-18 20:39:47
2010-1-18 20:39:48
2010-1-18 20:39:50
2010-1-18 20:39:51
2010-1-18 20:39:52
2010-1-18 20:39:55
2010-1-18 20:39:56
2010-1-18 20:39:59
2010-1-18 20:40:00
2010-1-18 20:40:03
2010-1-18 20:40:04
2010-1-18 20:39:42
2010-1-18 20:39:46
2010-1-18 20:39:49
2010-1-18 20:39:53
2010-1-18 20:39:54
2010-1-18 20:39:57
2010-1-18 20:39:58
2010-1-18 20:40:01
2010-1-18 20:40:02
2010-1-18 20:40:05


请问这是为什么啊要怎么解决呢?
...全文
140 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
guyehanxinlei 2010-02-03
  • 打赏
  • 举报
回复
程序的执行及数据库的请求响应都是需要有一定的时间的。
赵4老师 2010-01-29
  • 打赏
  • 举报
回复
把连接对象、记录集对象的定义挪到程序开头,定义为全局变量;
把连接数据库的代码挪到Sub Timer1_Timer外,比如Sub Form_Load里面,且只运行一次;
再试试看。
cbm6666 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gz284596265 的回复:]
7、8楼讲得都很有道理
而且本人还发现个问题楼主这样的代码不会报错吗?
在计时器里面连续打开连接 但是没有关闭连接的语句。没有报连接已经打开的错, 不解。。。
[/Quote]

楼主的思路确实有问题 那些开档的代码 本就不应该在 Timer事件里面
gz284596265 2010-01-28
  • 打赏
  • 举报
回复
7、8楼讲得都很有道理
而且本人还发现个问题楼主这样的代码不会报错吗?
在计时器里面连续打开连接 但是没有关闭连接的语句。没有报连接已经打开的错, 不解。。。
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cbm666 的回复:]
引用 10 楼 gz284596265 的回复:
7、8楼讲得都很有道理
而且本人还发现个问题楼主这样的代码不会报错吗?
在计时器里面连续打开连接 但是没有关闭连接的语句。没有报连接已经打开的错, 不解。。。


楼主的思路确实有问题 那些开档的代码 本就不应该在 Timer事件里面
[/Quote]
设计有问题。
地基没打好,那门怎么装都装不好。
mustudent 2010-01-25
  • 打赏
  • 举报
回复
Select * From T1 Order by DateTime

排序的问题吧!
cbm6666 2010-01-25
  • 打赏
  • 举报
回复
时间字段 设定为索引主键
熊孩子开学喽 2010-01-25
  • 打赏
  • 举报
回复
我觉得楼主的程序结构或许有问题.
按照楼主说的意思,应该只要每秒ADDNEW或INSERT一条记录就可以了,而观楼主的代码,似乎不光是添加了记录,还每秒重新连接了一次数据库.
vbasic6 2010-01-22
  • 打赏
  • 举报
回复
这个问题我觉得还有一种情况,就是Timer的初始值设定,如果是1000就有可能会出现间隔时间有时存在2秒的问题。建议将初始值修改为200,或者自定义时间设定函数,不用timer事件,应该能解决。
Tiger_Zhao 2010-01-22
  • 打赏
  • 举报
回复
连接数据库、执行SQL 这些都是要花时间的,而且远远大于一秒。
这就像每分钟会来一个电话,但是你每个电话要说3分钟,肯定会错过很多电话。
zdingyun 2010-01-22
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Timer1.Interval = 500
End Sub

Private Sub Timer1_Timer()
If Label1.Caption <> CStr(Time$) Then '每秒执行
Label1.Caption = Time$
'数据写入
Dim adoCnn As New ADODB.Connection
Dim adoRst As ADODB.Recordset
Dim sql As String
adoCnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=TEST;Data Source=PC2010010923NXM"
adoCnn.Open
sql = "insert into T1(DateTime) values('" & DateTime.Now() & "')"
adoCnn.Execute sql
End If
End Sub
fubinglin 2010-01-22
  • 打赏
  • 举报
回复
SAD
king06 2010-01-22
  • 打赏
  • 举报
回复
Timer不准确,
xiaofeng54 2010-01-22
  • 打赏
  • 举报
回复
散分
来人接分啊
~~~哈哈

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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