VB中利用timer事件每隔一定时间连接SQL数据库,实时读取里面的数据。为什么另外的timer事件会受到影响。

Private Sub Timer1_Timer()
If row - Lblrow > 0 And col - Lblcol > 0 Then Picture2.Top = Picture2.Top - 161.69: Picture2.Left = Picture2.Left + 248.68: Picture1.Left = Picture1.Left + 248.68
没有实时读取数据的时候,这个timer1事件运行正常。实时读取数据的时候,timer1事件没有按照里面的代码运行。

第1个回答  2013-05-23
二个不同的时间设计必须使用二个不同的Timer控件,例如对Picture2的时间使用Timer1控件,连接SQL数据库使用Timer2控件。追问

我用的就是两个timer控件。

第2个回答  2013-05-23
vb是单线程,一次只有一个程序能执行。追问

那有什么解决的办法吗?因为我的程序必须要每隔一定的时间读取数据库的记录,同时要根据读取的数据,会有一个控件的移动过程。

追答

读取数据和移动控件不能写在一个timer里吗?

追问

   当控件运动到达位置后,加载货架图片和读取数据库数据,控件又开始移动了。我想要的是控件不移动,等待新的数据记录再移动。

追答

timer1.interval=0是把timer1停止了....

可以用个模块变量做计数器,错开数据加载和图片移动

dim iA as long
private sub timer1_timer()
if ia mod 10=0 then
加载数据代码
else
移动图片代码
end if
ia=ia+1
if ia>1000000 then ia=1 '让ia循环防止溢出。

end sub

追问

这个看不懂喔,因为我想的就是到达位置后,计时器停止,接着等待数据库是否有新记录,如果有就接着运动,没有就继续等待。能解释的更详细一点么,我的timer1.interval=1000,每隔1000ms picture2.left=picture2.left+(-)a和picture2.top=picture2.top+(-)b。

追答

恩,我的建议:
1 你把图片移动的东西放到另外一个timer2里

2 timer1用来检测和加载新数据。如果发现有新数据就先停掉自己,然后启动timer2。 timer1_timer代码说明如下:
检查有无数据
如果有数据:
加载数据
timer1.enabled=false '停掉自己...
timer2.enabled=true '启动图片移动时钟

3 timer2需要有机制保证循环执行一段时间后停止。用模块变量做计数器来和处理。
timer2_timer的代码说明如下(dim iA as integer 放在窗口代码顶部):

移动的图片的代码

....
ia=ia+1
if iA>100 then
ia=0
timer2.enabled=false 'timer2执行100次移动后把timer2停止
timer1.enabled=true '启动timer1检查有无新数据
end if

本回答被提问者采纳
相似回答