5-8万条数据写入数据库中,时间很长,于是搞个计时器显示操作的时刻(从0计算起),让用户不至于放弃.但是,大量数据写入数据库操作时整个程序界面象是死机,计时器的变化不显示,或者偶尔显示一下,等操作完了计时器就一下子跳到结束的时刻了,这样计时器就失去了意义,请问有什么办法能解决这个问题,以下是我[写入]按钮的部分代码!执行到{rs.UpdateBatch '保存}该语句时象是死机!(虽然数据保存了)
Timer1.Enable=True
...
...
DoEvents
For i = 0 To UBound(rsArray) - 1 '循环
fdArray = Split(rsArray(i), ",")
rs.AddNew
rs(0).Value = Trim(fdArray(0))
rs(1).Value = Trim(fdArray(1))
rs(2).Value = Trim(fdArray(2))
rs(3).Value = Trim(fdArray(3))
rs(4).Value = Zm
rs(5).Value = Csrq
ProgressBar1.Value = ProgressBar1.Value + 1
Next i
lblTag.Caption = "数据保存中,请稍候...计时器:"& CStr(jsq)
Text3.Text = Text3.Text & vbCrLf & Time & " records:" & UBound(rsArray) & " 数据进入开关量表中."
rs.UpdateBatch '保存
...
...
MsgBox "数据处理完毕..."
ProgressBar1.Value = 0
Timer1.Enable=False
Timer1.Enable=True
...
...
DoEvents
For i = 0 To UBound(rsArray) - 1 '循环
fdArray = Split(rsArray(i), ",")
rs.AddNew
rs(0).Value = Trim(fdArray(0))
rs(1).Value = Trim(fdArray(1))
rs(2).Value = Trim(fdArray(2))
rs(3).Value = Trim(fdArray(3))
rs(4).Value = Zm
rs(5).Value = Csrq
ProgressBar1.Value = ProgressBar1.Value + 1
Next i
lblTag.Caption = "数据保存中,请稍候...计时器:"& CStr(jsq)
Text3.Text = Text3.Text & vbCrLf & Time & " records:" & UBound(rsArray) & " 数据进入开关量表中."
rs.UpdateBatch '保存
...
...
MsgBox "数据处理完毕..."
ProgressBar1.Value = 0
Timer1.Enable=False
解决方案 »
- VB连接数据库问题---急,请求高手解答
- 度过了又一个麻木的夜晚
- 赚分,速结
- api 获取路径
- form窗体中设置了背景图片,想在又想去掉,怎么办?郁闷,用VB这么久,竟然还不知道!
- 点击listview控件时,如何得到获得焦点图标的值???
- 请各位兄弟来这个贴http://expert.csdn.net/Expert/topic/2972/2972718.xml?temp=5.788821E-02
- 这个VB安装问题怎么解决?
- 怎么改变按钮的字体颜色,急急急!!
- 请教,如何在VFP的程序中防止启动多个例程?
- 大家帮忙来测试;VB中的数据复制,用那个最快!
- vb与access 2000 的连接问题
for ...
rs.addnew
...
rs.update
next
没有用是一样的!我开始的时候,就没有考虑用计时器,直接就用进度条,将UPDATA写在for ...Next中,但变成了进度条的变化不显示,或者偶尔显示一下,等操作完了进度条就一下子跳到最后!
写到FOR里面来就好了,不过这样速度慢好多
Timer1.Enable=True
...
...
DoEvents
For i = 0 To UBound(rsArray) - 1 '循环
fdArray = Split(rsArray(i), ",")
DoEvents
rs.AddNew
rs(0).Value = Trim(fdArray(0))
rs(1).Value = Trim(fdArray(1))
rs(2).Value = Trim(fdArray(2))
rs(3).Value = Trim(fdArray(3))
rs(4).Value = Zm
rs(5).Value = Csrq
ProgressBar1.Value = ProgressBar1.Value + 1
Next i
lblTag.Caption = "数据保存中,请稍候...计时器:"& CStr(jsq)
Text3.Text = Text3.Text & vbCrLf & Time & " records:" & UBound(rsArray) & " 数据进入开关量表中."
rs.UpdateBatch '保存
...
...
MsgBox "数据处理完毕..."
ProgressBar1.Value = 0
Timer1.Enable=False
For ...
rs.AddNew
...
rs.Update lblDate = CDate(Now() - dtStart)
DoEvents
Next
fdArray = Split(rsArray(i), ",")
rs.AddNew
rs(0).Value = Trim(fdArray(0))
rs(1).Value = Trim(fdArray(1))
rs(2).Value = Trim(fdArray(2))
rs(3).Value = Trim(fdArray(3))
rs(4).Value = Zm
rs(5).Value = Csrq
ProgressBar1.Value = ProgressBar1.Value + 1
ProgressBar1.Refresh
DoEvents
Next i
Refresh 重写一下试试
For i = 0 To UBound(rsArray) - 1 '循环
fdArray = Split(rsArray(i), ",")
rs.AddNew
rs(0).Value = Trim(fdArray(0))
rs(1).Value = Trim(fdArray(1))
rs(2).Value = Trim(fdArray(2))
rs(3).Value = Trim(fdArray(3))
rs(4).Value = Zm
rs(5).Value = Csrq
rs.UpdateBatch
lblTag.Caption = "数据保存中...:" & UBound(rsArray) - 1 - i
lblTag.Refresh
ProgressBar1.Value = ProgressBar1.Value + 1
ProgressBar1.Refresh
Next ilblTag和ProgressBar1都要刷新!
至于时刻问题:
在[写入]按钮Dim a As Date
Dim b As Date
a = Time '起始时刻
...
...'这里为上面的代码
...
b = Time '结束时刻
lblTag.Caption = "工作完毕,耗时:" & Hour(b) - Hour(a) & "时" & Minute(b) - Minute(a) & "分" & Second(b) - Second(a) & "秒"
MsgBox "数据处理完毕..."
ProgressBar1.Value = 0
n = 0
Do While Not DataRs.EOF
i = i + 1
If i = 500 Then
n = n + 1
i = 1
Label1.Caption = n
DoEvents
End If
DataRs.MoveNext
Loop
这样速度会快一些