数据库操作时显示进度条

caoyang0299 2013-04-02 11:14:48
我想在数据库查询、插入、更改的过程中,加个进度条,
这进度条应该怎么弄,谢谢
...全文
526 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在还是人类 2013-04-05
  • 打赏
  • 举报
回复
其实数据殷勤查询的时间并不久,而是你要显示数据的过程久。
如果不相信,你可以尝试这样写


dim rs As new Recordset
dim rscount as long
dim id as long

rs.open "select count(id) as c from Inventory", conn, 3, 1
rscount = rs!c
rs.close
rs.open "select id as c from Inventory", conn, 3, 1
id = rs!id
rs.close
msgbox "供 " & rscount & " 条记录,第一条记录的 ID 为" & id


你可以看看这个过程在10w或更多条数据的情况下需要多久时间?可以肯定的告诉你,很快很快。
既然这样,就可以在很短的时间内取得要查询的数据条数,那就可以根据这个数据条数来做进度条的总值,
在具体的查询数据循环数据时 再更新当前进度,如:

rs.open "select count(id) as c from Inventory", conn, 3, 1
rscount = rs!c
rs.close
if rscount>=1 then
progressbar1.max = rscount
rs.open "select id,title as c from Inventory", conn, 3, 1
for i=1 to rscount
doevents
list1.additem rs!id & " " & rs!title
progressbar1.value = i
if i<rscount then rs.movenext
next i
rs.close
end if
酷心 2013-04-03
  • 打赏
  • 举报
回复
Dim WithEvents rs As ADODB.Recordset 要定义为全局的,不是定义在command3里面的
caoyang0299 2013-04-03
  • 打赏
  • 举报
回复
我这是win7,32位
caoyang0299 2013-04-03
  • 打赏
  • 举报
回复
弄不弄提供一下详细的代码,我参照网上的弄了一下,不行呀
http://support.microsoft.com/kb/262311/zh-cn
http://www.docin.com/p-557363627.html
谢谢
Private Sub Command3_Click()
Dim conn As New ADODB.Connection
Dim strc As String
strc = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=erp;Data Source=127.0.0.1"
conn.Open strc
Dim strsql As String
strsql = "select * from Inventory "
'Dim rs As New ADODB.Recordset
'With rs
Dim WithEvents rs As ADODB.Recordset
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseClient

.Properties("Initial Fetch Size") = 2
.Properties("Background Fetch Size") = 4

Debug.Print "Start"
Debug.Print "Initial Fetch Size: " & _
.Properties("Initial Fetch Size")
Debug.Print "Background Fetch Size" & _
.Properties("Background Fetch Size")

.Open strsql, conn, , , adAsyncFetch
'.Open strsql, conn, adOpenDynamic, adLockPessimistic, adCmdText
End With

'rs.Open strsql, conn, adOpenDynamic, adLockPessimistic, adCmdText
'End With

Text2(0).Text = rs.Fields(0)

End Sub

Private Sub Form_Load()
Me.WindowState = 2



End Sub
Private Sub rs_FetchProgress(ByVal Progress As Long, _
ByVal MaxProgress As Long, _
adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset)

Debug.Print "fetch:" & Progress & "max:" & MaxProgress

End Sub


lliai 2013-04-03
  • 打赏
  • 举报
回复
5楼方法不错。谢谢。我个人会用记录作为进度显示。每100条显示一次。
caoyang0299 2013-04-03
  • 打赏
  • 举报
回复
定义全局的也不好用,和我的版本有关?win7 32位系统
东方之珠 2013-04-02
  • 打赏
  • 举报
回复
引用 5 楼 of123 的回复:
可以用。 1 声明记录集变量时: Dim WithEvents rs As ADODB.Recordset 这样,rs 对象变量就带上了事件。 2 见下列事件 Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStat……
嗯,这个办法好!
of123 2013-04-02
  • 打赏
  • 举报
回复
可以用。 1 声明记录集变量时: Dim WithEvents rs As ADODB.Recordset 这样,rs 对象变量就带上了事件。 2 见下列事件 Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) End Sub 在事件中将 MaxProgress 赋给 ProgressBar.Max,将 Progress 赋给 ProgressBar.Value。 可以实现查询进度条。
caoyang0299 2013-04-02
  • 打赏
  • 举报
回复
还是不明白,例如查询10w条数据(用了1分钟),没有时间,我这进度条应该杂弄
东方之珠 2013-04-02
  • 打赏
  • 举报
回复
引用 2 楼 caoyang0299 的回复:
嗯,就是这个问题,例如查询,数据量比较大,比较慢,所以想弄个进度条出来,按sql执行的时间来,但这个执行的时间怎么弄出来
执行的时间是算不出来的。比较简单的办法是按 SQL 查询了多少条记录作为进度,总的记录有多少,这些应该算得出来。
caoyang0299 2013-04-02
  • 打赏
  • 举报
回复
嗯,就是这个问题,例如查询,数据量比较大,比较慢,所以想弄个进度条出来,按sql执行的时间来,但这个执行的时间怎么弄出来
东方之珠 2013-04-02
  • 打赏
  • 举报
回复
进度条本身并不难,可以用进度条控件,也可以用PictureBox模拟.难的是用什么数据作为进度. 数据库查询、插入、更改,用什么作为进度??

7,785

社区成员

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

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