老生长谈的问题!请教各位是如何在进行大数据量的数据库操作时显示进度地?
老生长谈的问题!请教各位是如何在进行大数据量的数据库操作时显示进度地?
我想了很久,在论坛上也查了很久都没有找到理想的方法,我的想法是把数据操作
(我这里的数据库操作基本都是前台带参数调用后台的存储过程)和进度显示封装
在一起需要进行时调用即可。但是我想不出该怎么做才好,请各位前辈指教一,二。
谢谢!有可能的话把大家使用的类似的程序发一份给我学习一下!
邮件地址是kisc@public.wh.hb.cn
再次感谢!
问题点数:100、回复次数:61Top
1 楼ymize(不知所。云)回复于 2004-05-02 21:14:23 得分 0
晕!没人指点下啊:(
自己顶Top
2 楼tangxiaosan001(阿三)回复于 2004-05-02 22:21:47 得分 0
我也正在研究这个问题。
不过,存储里好象有哪个什么state表示百分比来着Top
3 楼homeland520(天山之王(哈哈两声说Beybey))回复于 2004-05-03 01:02:16 得分 0
学习!继续关注Top
4 楼ymize(不知所。云)回复于 2004-05-03 12:25:52 得分 0
自己顶。。。。
Top
5 楼ymize(不知所。云)回复于 2004-05-03 17:05:04 得分 0
要是分不够的话偶再加100
Top
6 楼daisy8675(莫依 沉迷)回复于 2004-05-03 19:21:14 得分 50
'讀取資料並 Show 於 Datagrid
g_sql = "select c_cust.cust_name,c_cust.area,c_cust.ck_name,c_cust.cp_name, c_lman2.l_class,c_lman2.L_name,c_lman2.L_tel" & _
" from c_cust ,c_lman2 where c_cust.cust_no=c_lman2.custno"
rs1.Close
If make_i(g_sql) = flase Then
MsgBox (db_err)
Unload Me
End If
With MSFlexGrid1
.Rows = 2
.Row = 0
.Col = 0
.ColWidth(0) = 1400
.Text = "公司名稱"
.Col = 1
.ColWidth(1) = 1400
.Text = "職稱"
.Col = 2
.ColWidth(2) = 1400
.Text = "稱謂"
.Col = 3
.ColWidth(3) = 2000
.Text = "電 話"
.ColWidth(4) = 0 ' 隱藏的欄位
End With
Dim a_cnt As Integer: a_cnt = 0
Do While Not rs1.EOF
a_cnt = a_cnt + 1
rs1.MoveNext
Loop
rs1.MoveFirst
'顯示進度的 Status Bar
fra_loaded.Visible = True
ProgressBar1.Max = a_cnt
ProgressBar1.Min = 0
ProgressBar1.Value = 0
Do While Not rs1.EOF
DoEvents
With MSFlexGrid1
' row 的啟始值為 0, column 的啟始值也是 0
.Row = .Rows - 1
.Col = 0
.Text = rs1("cust_name")
.Col = 1
.Text = IIf(IsNull(rs1("l_class")), "", rs1("l_class"))
.Col = 2
.Text = rs1("l_name")
.Col = 3
.Text = IIf(IsNull(rs1("l_tel")), "", rs1("l_tel"))
.Rows = .Rows + 1
End With
ProgressBar1.Value = ProgressBar1.Value + 1
rs1.MoveNext
Loop
一個示范,你隻能發100的貼,呵呵Top
7 楼ymize(不知所。云)回复于 2004-05-03 23:19:29 得分 0
能解决的话偶连开两个100分的送分贴就行了
以上这个程序没看见你打开记录集啊?
而且你是在读取记录之后开始显示的时候才进行进度显示的吧
偶现在遇到的问题是查询时间比较长
返回记录时间短
不过还是感谢楼上
你是第一个回实质帖子的人
Top
8 楼wancl(wancl)回复于 2004-05-04 09:41:30 得分 0
只能表示同情了,我也不会,不过比你更想知道Top
9 楼sekingsboy(不后悔)回复于 2004-05-04 10:37:03 得分 10
dim rs as adodb.recordset
rs.open sql,conn,3,2
prg.max=rs.recordcount
do until rs.eof
'do something
rs.movenext
prg.value=z
z=z+1
loop
Top
10 楼yenight(抵制日货 利国利民 能不买日货,尽量不买)回复于 2004-05-04 11:17:58 得分 0
进度条只是一个骗人的东东,你没有看见Windows的拷贝东东时要一百多年的条吗?
只能说进度条给一个大概的进度,楼上的方法可行!Top
11 楼mingtian2008(明天)回复于 2004-05-04 14:45:16 得分 0
upTop
12 楼jintianatxd(tian)回复于 2004-05-04 14:58:13 得分 0
gz ing...Top
13 楼ymize(不知所。云)回复于 2004-05-04 15:04:16 得分 0
问题是偶不想把每个程序都加循环和进度条
不能作成一个包含进度显示的查询模块吗?
楼上的解决方法都是要等返回值之后知道
返回的记录数然后在显示的时候同时显示模拟进度
如果我用服务器游标呢?无法知道记录数怎么办?
如果查询时间比较长(超过3分钟)怎么办?
虽然是特例但是偶想能做的严谨一点也好
我现在想的方法是做一个包含进度显示的表单
然后定义2个public变量 一个是传递查询的sql字符串,一个是返回的记录集
需要运行查询的时候就显示该表单并传递sql查询的字符串,运行完毕后返回一个记录集
但是现在我遇到的问题是在这个查询表单内使用异步方式打开记录集进行查询的话
程序在没有查询完毕就直接运行下面的语句,并返回一个错误的值
因为这个方法没有成功所以我想请教各位前辈有没有更好地办法!Top
14 楼ymize(不知所。云)回复于 2004-05-05 00:09:47 得分 0
自己再顶Top
15 楼jackyped(MSN: jpu_jacky@eyou.com)回复于 2004-05-05 09:48:03 得分 0
WINDOWS 的进度条好象是按文件个数计算的。10 个文件,复制一个 1K 的文件和复制一个100M的文件在进度中占的位置一样多。
装WIN 时发现的。使用WIN 时没验证。错了别打我~!Top
16 楼wudid007(小小鸟)回复于 2004-05-05 11:07:21 得分 0
dinTop
17 楼ymize(不知所。云)回复于 2004-05-05 17:08:48 得分 0
这个问题大家因该都遇到过吧
怎么都没有好方法??Top
18 楼HHLADN(I Want to exceed you)回复于 2004-05-05 17:28:57 得分 0
靠,不愧是兩個星的;
佩服!Top
19 楼taosihai1only(无招胜有招)回复于 2004-05-05 17:37:45 得分 0
upTop
20 楼wumylove1234(毁于随)回复于 2004-05-05 19:21:36 得分 0
靠,不愧是兩個星的;
佩服!
嘴真他的不干不净!Top
21 楼daisy8675(莫依 沉迷)回复于 2004-05-05 19:40:46 得分 0
以上这个程序没看见你打开记录集啊?
而且你是在读取记录之后开始显示的时候才进行进度显示的吧
偶现在遇到的问题是查询时间比较长
///
這個程序是一個示范,怎麼顯示進度條。
我的打開是調用make_i,是一個共用的bas
你換成rs1.open g_sql,conn,3,3就可以呀
查詢的時間比較長,我不知道你認為長到多少時間,如果是太長,使得處於假死狀態的時候,建議你分解查詢,或者用view完成。查詢使不能用進度顯示的,而且也不適合:)Top
22 楼ymize(不知所。云)回复于 2004-05-05 23:57:15 得分 0
我的意思是说在查询的时候显示模拟进度。。。只要告诉用户查询正在进行没有死机
就好Top
23 楼daisy8675(莫依 沉迷)回复于 2004-05-06 18:54:05 得分 0
今天有在想這個問題。
可以用時鐘進行控制,一秒或者二秒, ProgressBar1.Value = ProgressBar1.Value + 1
可以寫一個function進行控制。
問題是抓不準結束的時間。
我上面的程序實際上把查詢和顯示是一起用進度條顯示了。
Top
24 楼leolulu(了哦)回复于 2004-05-06 19:03:04 得分 0
很好啊,我也想做一个进度条呢,就是没试成功,这个方法不错,进行条数的定义,完全可以满足简单的显示了~~~~~~~~`
:)
嘿嘿,谢谢了。。Top
25 楼ymize(不知所。云)回复于 2004-05-06 19:16:30 得分 0
对!我也是设想的用时钟控制查询开始时就激活时钟查询结束后始终终止
然后在时钟运行时显示模拟进度
但是我也是找不到正确返回值的时机
用异步方式打开的话查询没结束就直接执行下面的语句
然后就报错
如果不用异步模式的话查询进行时时钟就挂起了到查询结束以后才
显示模拟进度。。。头痛就在这个地方啊Top
26 楼daisy8675(莫依 沉迷)回复于 2004-05-06 19:21:26 得分 0
你的查詢到底要多久,我覺得這個問題才好玩。
你想想windows的查詢,它有個查詢圖標一直就在轉動,到查詢的文件顯示完畢以後它就會停止。
所以放進數據查詢,我覺得隻有數據顯示完畢了以後,進度條才能為100%
我的是5W多筆數據,我也不怎麼覺得慢。還有一個,用了進度條其實速度好象感覺會還慢一點,隻是不死機器,呵Top
27 楼daisy8675(莫依 沉迷)回复于 2004-05-06 19:42:57 得分 0
剛在ms的知識庫找了,居然這方面的東西很少噢。結束點不好抓。呵呵,不好抓。Top
28 楼ymize(不知所。云)回复于 2004-05-06 19:57:43 得分 0
我的数据量不是很大大概200万条吧(销售流水)
我记得我在书上看过
vb本身好象不支持多线程吧
进度显示好象就是多线程吧?(外行做程序很多基础没学不好意思)
我也没想显示百分比显示也是个假的
查询时显示个框里面显示查询进行了多长时间
反正让用户知道没死机就行了呵呵呵呵
Top
29 楼4103796(潇湘予)回复于 2004-05-06 20:12:24 得分 0
有循环的时候在循环体内显示进度可以,但我做过数据库的备份需要一分多钟,只一条语句。BACKUP。。。。。这里无法显示进度我曾试着在语句的上面加一条TIMER。ENABLE =TRUE 在时间控件的内部显示进度条。但时间控件得不到响应备份完了才响应。根本没用的唉,高手指点啊。
Top
30 楼daisy8675(莫依 沉迷)回复于 2004-05-06 20:21:08 得分 0
樓上的備份怎麼做的。我用了,沒有問題的
對200W,我沒有測試環境。
我這邊用得最久的查詢會查上3分鐘,樓主有沒用試我給的代碼?Top
31 楼ymize(不知所。云)回复于 2004-05-06 20:24:48 得分 0
我用的就是你那种方法写在timer控件里
结果是如果异步打开就报错
不使用异步方式就要等查询完毕后timer才有反映哦Top
32 楼daisy8675(莫依 沉迷)回复于 2004-05-06 20:28:22 得分 0
ei?不會呀,偶今天沒有時間,明天有時間給你做個看看
偶的程序就是用這辦法的Top
33 楼ymize(不知所。云)回复于 2004-05-06 20:31:14 得分 0
好哦!有msn吗?方便联系啊!
初学有很多问题要讨教呵呵呵呵Top
34 楼4103796(潇湘予)回复于 2004-05-06 20:34:05 得分 10
主要代码:
timer.enable=true '以为激活时间控件。走进度条
conn.exeture"backup ..................." '需要一分多钟,以为进度条这段时间自己走呗
timer.enable=false '实际不可能。执行备份语句的时候,系统不响应时间控件。
次要的:
timer过程()
每隔一段时间进度指示器走一格。
end sub
Top
35 楼ymize(不知所。云)回复于 2004-05-06 20:34:18 得分 0
我的是ymize@263.netTop
36 楼ymize(不知所。云)回复于 2004-05-06 20:35:38 得分 0
潇湘和偶遇到的问题一样如不使用异步模式就是他说的哪个效果Top
37 楼4103796(潇湘予)回复于 2004-05-06 20:37:36 得分 0
异步的思路是怎样的,我如果做,从哪方面入手???Top
38 楼ymize(不知所。云)回复于 2004-05-06 20:49:44 得分 0
我用的是recordset.open sql
方式 open方法的可选参数里有异步方式执行的参数
msn里有客气去查下哦
我记得连接的exeture方法也有异步方式
但是我没试出来msn里有这个参数但是没例子
我也是初学 所以有些东西就不知道了
我知道的都是msn里的中文内容
英文的好多看不懂就没怎么看Top
39 楼daisy8675(莫依 沉迷)回复于 2004-05-06 20:53:50 得分 0
沒有MSN,公司不許用,偶要斷網了。
今天感冒,頭痛,明天還要趕案子,recordset後面cursortypenum,locktypeenum偶怎麼不覺得有什麼。msdn裡面是中文呀,
對這rs.state按,就出來了。
Top
40 楼ymize(不知所。云)回复于 2004-05-06 20:56:43 得分 0
遗憾。。莫依兄
家里的机器没装这些东西
程序和记录都在公司里
Top
41 楼4103796(潇湘予)回复于 2004-05-06 21:00:45 得分 0
我遇到了这样的问题,导出EXCEL之后,再导出就在写入数据那行出错了不知为什么如下:
range(...,...).value=二维数据。
本来这样可以把二维数据写进表格中。第一次可以,再次使用的时候,就出错了,应用对象,工作薄表格都关闭并且已经置成NOTHING了。可是还出错而且用CTrl+alt+del三个键,能发现有一个EXCEL进程在系统中。我退出我的应用程序此进程不消失。再启动程序并且再导出一次表格。又出现一个。依次类推,每次启动程序并且导出表格就出现一个进程。就这两个问题请高手帮忙啊。。Book.Save
Book.Close
Set Book = Nothing
Exl.Quit
Set Exl = Nothing
sheet.close
set sheet=nothing
我已经用了。Top
42 楼4103796(潇湘予)回复于 2004-05-06 21:21:11 得分 20
Dim ex As Object
Dim exwbook As Object
Dim exsheet As Object
Set ex = CreateObject("Excel.Application")
Set exwbook = Nothing
Set exsheet = Nothing
Set exwbook = ex.Workbooks().Add
Set exsheet = exwbook.Worksheets("sheet1")
'写数据
Dim MyArray() As String
MyArray() 取值。
Range(Cells(3, 1), Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray
exwbook.SaveAs sFile
exwbook.Close
ex.Quit
Set ex = Nothing
Set exwbook = Nothing
Set exsheet = Nothing
Top
43 楼daisy8675(莫依 沉迷)回复于 2004-05-07 18:32:27 得分 0
先t上來。偶先換個鼠標再講Top
44 楼daisy8675(莫依 沉迷)回复于 2004-05-07 19:27:07 得分 0
今天沒有試,沒有辦法沒有時間-_-
Private Sub Timer1_Timer()
intValue = intValue + 1: frmProgressBar.prgReading.Value = intValue
If intValue Mod 8 = 1 Then frmProgressBar.lblSearching.Caption = "正在搜索硬體,請稍後"
If intValue Mod 8 = 3 Then frmProgressBar.lblSearching.Caption = "正在搜索硬體,請稍後.."
If intValue Mod 8 = 5 Then frmProgressBar.lblSearching.Caption = "正在搜索硬體,請稍後....."
If intValue Mod 8 = 7 Then frmProgressBar.lblSearching.Caption = "正在搜索硬體,請稍後..........."
End Sub
Private Sub Form_Load()
If g_Flag = True Then
prgReading.Min = 0
prgReading.Max = 900
Timer1.Enabled = True
lblReadData.Visible = False
lblReading.Visible = False
lblSearching.Visible = True
End If
End Sub
但是肯定告訴你進度條是假的,有段代碼好發上來,呵呵,你要有mail。我明天整理mail到你信箱去好了。
寶寶在做考勤的時候,有搜索port的過程,這需要進度條控制,但是誰也不知道port什麼時候搜索到。包括查詢顯示,反正就那意思了。進度條可以直接跳到100
frmProgressBar.prgReading.Max = dblTotal
frmProgressBar.lblReading = Format(m_ClockNo, "00") & "號卡鐘資料讀取中....."
cboClockList.AddItem Format(CStr(intMachineNo), "00") & "卡鐘", m_intOrderNo
這樣就不for循環了Top
45 楼ymize(不知所。云)回复于 2004-05-07 21:55:35 得分 0
kisc@public.wh.hb.cn这是偶的mail
明天上班偶再试下先Top
46 楼vbdata(独一无二)回复于 2004-05-07 22:48:59 得分 0
本站VB,数据库版内有一个关于批量转换文本文件的小问题,请各位高手帮忙,
我一定加分。
标题 高分求助,如何读取文本文件中的数值,批量转换?
时间 05-07 22: 30
谢谢各位了。Top
47 楼ymize(不知所。云)回复于 2004-05-08 17:16:35 得分 0
自己顶Top
48 楼viena(维也纳N02)回复于 2004-05-08 17:34:16 得分 0
用什么进度条吗?不是表示没有死吗?用状态栏显示“查询中,请稍候”,把鼠标光标变成沙漏就好了,或者用一个Label,或者显示动画,都可以呀Top
49 楼orsharp(露璐)回复于 2004-05-08 17:46:14 得分 0
我也呈经遇见过类似的问题,不知道是否适合: 我做的是一个数据库转录程序 倒出为Excel 同样是数据量比较大 转录的时候时间比较长,需要进度. 我的办法是: 先根据条件查询(确定倒出需要的那部分数据), 由于用代码直接查询 看不具体查到了多少条纪录 ,因此 先用个循环 检测一下具体查到了多少条纪录 然后 把 检测到的数值 给 ProgressBar1.Max 接着开始 转录 循环中 再把 转录的第N条纪录 传递给 ProgressBar1.Value 这样就可以完全真实显示进度了,不要忘了 在循环的入口处 加一条 DoEventsTop
50 楼ymize(不知所。云)回复于 2004-05-08 20:01:59 得分 0
接个。。。偶重新说一次
首先。。。我现在考虑的查询时间长返回记录时间相对短
所以在查询这个时间段内是没办法知道会返回多少记录
第二 如果直接使用rs.open sqlstr 方式打开的话
系统资源全部被占用了 没办法动态显示正在查询的信息
如果使用 异步方式打开rs 则查询未结束 查询后的语句就开始执行
然后报错
我现在没办法是在异步打开rs语句的后面加上了
do
....
......
.......
DoEvents
loop
的方式来不停的查询rs状态 等rs.state=1 才开始执行下面的语句解决这个问题
但是使用DoEvents好象对系统资源占用比较大
所以我发帖子问问看大家有什么其他的好办法
Top
51 楼ymize(不知所。云)回复于 2004-05-09 11:39:53 得分 0
自己顶Top
52 楼lovebeethoven(小佛-寻找幸福)回复于 2004-05-09 11:50:00 得分 0
gzTop
53 楼recollectpainer(忆苦儿)回复于 2004-05-09 11:53:57 得分 0
那是莫依JJ哟,不是你的莫依兄! HOHO~~~~Top
54 楼cuibin(黑侠)回复于 2004-05-09 13:16:43 得分 0
建议你做个假的动画,就象拷贝文件一样。飞来飞去。做完了就结束。Top
55 楼ymize(不知所。云)回复于 2004-05-09 13:22:12 得分 0
.....接个。。。jj?还是mm比较好
jj叫老了
偶当然想做个动画问题在于怎么让查询同时显示动画哦
要么报错
要么就是查完了再显示
还就是做不到查询的时间内显示动画呵呵呵呵Top
56 楼passer_wave(路人)回复于 2004-05-09 13:35:58 得分 10
进度条的计算是不可能精确的,只是个模糊数,大概数,估计数而已。
系统中的,文件copy,远程的下载安装就是个很好的例子。
项目中遇到大量数据处理之类的时候我都不用什么进度条了,都是改用 直接load一个这样的窗体
VERSION 5.00
Begin VB.Form Dialog
BackColor = &H0080C0FF&
BorderStyle = 0 'None
Caption = "对话框标题"
ClientHeight = 915
ClientLeft = 2715
ClientTop = 3420
ClientWidth = 3285
ForeColor = &H00000000&
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 915
ScaleWidth = 3285
ShowInTaskbar = 0 'False
StartUpPosition = 2 '屏幕中心
Begin VB.Label Label1
AutoSize = -1 'True
BackStyle = 0 'Transparent
Caption = "请稍等,正在计算。。。。"
ForeColor = &H00FF0000&
Height = 180
Left = 540
TabIndex = 0
Top = 360
Width = 2160
End
End
Attribute VB_Name = "Dialog"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const HWND_TOPMOST = -1
Private Sub Form_Load()
SetWindowPos Me.hwnd, HWND_TOPMOST, Me.Left / Screen.TwipsPerPixelX _
, Me.Top \ Screen.TwipsPerPixelY, Me.Width \ Screen.TwipsPerPixelX, _
Me.Height \ Screen.TwipsPerPixelY, 0
End Sub
(以上代码,copy以后,另存为 Dialog.frm文件)
然后在过程结束的时候 unload它,具体:
Private Sub Cmd1_Click()
Dialog.Show
cmd1.Enabled = False
DoEvents
Call somesub'你的过程或者是大量的数据查询
Unload Dialog
cmd1.Enabled = True
Set Dialog = Nothing
End SubTop
57 楼ymize(不知所。云)回复于 2004-05-09 14:25:00 得分 0
楼上和我现在用的办法差不多。。当然我做的没有楼上的前辈精致
可能偶要求太高了呵呵呵呵
楼上的前辈显示的是个静态的窗体
我希望得到的是一个动态的窗体我现在用的是这样的方法
VERSION 5.00
Begin VB.Form planFrm
BorderStyle = 0 'None
Caption = "Form1"
ClientHeight = 615
ClientLeft = 0
ClientTop = 600
ClientWidth = 5670
ControlBox = 0 'False
LinkTopic = "Form1"
ScaleHeight = 615
ScaleWidth = 5670
ShowInTaskbar = 0 'False
StartUpPosition = 2 '屏幕中心
Begin VB.Timer Timer1
Enabled = 0 'False
Interval = 100
Left = 360
Top = 120
End
Begin VB.Label Label1
BackColor = &H005076F8&
BorderStyle = 1 'Fixed Single
Caption = "Label1"
Height = 375
Left = 120
TabIndex = 0
Top = 120
Width = 5415
End
Begin VB.Shape Shape1
BackColor = &H80000000&
BackStyle = 1 'Opaque
Height = 615
Left = 0
Top = 0
Width = 5655
End
End
Attribute VB_Name = "planFrm"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private a As Integer
Private backrs As ADODB.Recordset
Private Sub Form_Load()
Set backrs = New ADODB.Recordset
backrs.CursorLocation = adUseClient
backrs.CursorType = adOpenStatic
backrs.LockType = adLockReadOnly
backrs.CacheSize = 1000
End Sub
Private Sub Form_Unload(Cancel As Integer)
backrs.Close
Set backrs = Nothing
End Sub
Private Sub Timer1_Timer()
If backrs.State And adStateOpen Then
Else
a = a + 1
Label1.Caption = a
End If
End Sub
Public Function excsql(ByVal str As String) As ADODB.Recordset
Dim msg As String
Timer1.Enabled = True
If backrs.State = 1 Then
backrs.Close
End If
backrs.Open str, cnn, 3, 3, adAsyncFetch + adAsyncExecute
Do
If backrs.State And adStateOpen Then
Set excsql = backrs
MsgBox ("成功查询!")
Timer1.Enabled = False
Exit Do
Unload Me
End If
DoEvents
Loop
End Function
调用时的代码例子如下
Private Sub Command1_Click()
Dim frm2str As String
Set frmrs = New ADODB.Recordset
frmrs.CursorLocation = adUseClient
frmrs.CursorType = adOpenKeyset
frmrs.LockType = adLockReadOnly
frm2str = "exec cs4 '2002-01-01 00:00:00.000','2002-02-01 00:00:00.000'"
planFrm.Show
Set frmrs = planFrm.excsql(frm2str)
MsgBox (frmrs.RecordCount)
Set DataGrid1.DataSource = frmrs
Me.SetFocus
End Sub
是可以使用的
我贴这个帖子是想看看有没有其他更好点的办法来进行查询时的进度显示
而且我这个方法必须在
backrs.Open str, cnn, 3, 3, adAsyncFetch + adAsyncExecute 语句
后面加上
Do
If backrs.State And adStateOpen Then
。。。。。。
。。。。。。
。。。。。。
End If
DoEvents
loop
才能正常运行
我想看看有什么替代的方法因为我看很多帖子说
使用doevents比较占用资源而且在交互方面可能出问题
Top
58 楼passer_wave(路人)回复于 2004-05-09 14:46:20 得分 0
其实方法是多种多样的,不一定说硬是要要那种的。 具体的看情况而定选择了
以前也是用进度条来显示的,但是觉得很累,麻烦。
其实无法就是给用户提供一个说明而已,我觉得就是用这种笨办法就得了,而且方便。 ^_^
如果是如数据实时采集这类的项目,要显示当前数据情况的进度还包括明细的内容,当然用这个就显得不专业了,就要另当别论了。
总之对数据的处理,查询之类的,俄就是这样处理了,不管了,不改了。
最多再加上一个累加的数据总和出来显示给用户就得了。Top
59 楼ymize(不知所。云)回复于 2004-05-09 14:55:18 得分 0
呵呵呵呵!主要是公司数据库的结构做的不是太好
(我没有改数据结构的能力:()
查询时间很长(如果多台机器查询经常超过3分钟)
所以不敢显示一个静止画面太长时间
所以需要做动态的显示模拟进度
Top
60 楼daisy8675(莫依 沉迷)回复于 2004-05-09 18:47:02 得分 0
昨天發給你的mail今天被打回來了,好象是地址打...:(
程序取不下來,要明天取弄,我今天先參考一下路人的代碼看看Top
61 楼ymize(不知所。云)回复于 2004-05-09 19:03:03 得分 0
谢谢先Top




