我写的程序需要在Oracle上存取图片,但如何网速慢的话程序在从数据库上获取图片的过程中程序会出现假死的状态,于是我用一个进度条来显示图片数据的获取进度,可由于程序获取图片时已经处于假死状态,进度条也不会跟进,怎么办呢?
该如何解决呢?非常感谢,下面是程序代码
==========================================
'从数据库获取图片
Private Sub GetPicture()
Dim DataFile As Integer
Dim Fl As Long
Dim Chunks As Integer
Dim Fragment As Integer
Dim Chunk() As Byte
Dim i As Integer
Const ChunkSize As Integer = 16384 '块缓存大小
Dim rs As Recordset
On Error GoTo What2Do
Set rs = New ADODB.Recordset
rs.Open "select Picture from YC_PIM_HYD_PROTECTION where Code = " & CurrentCode, cnnDB, adOpenDynamic, adLockOptimistic
DataFile = 1
Open App.path & "\pictemp." & CurrentFileExtension For Binary Access Write As DataFile
Fl = rs!Picture.ActualSize
Chunks = Fl \ ChunkSize
Fragment = Fl Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = rs!Picture.GetChunk(Fragment)
Put DataFile, , Chunk() For i = 1 To Chunks
ProgressBar1.Value = i / Chunks * ProgressBar1.Max
ReDim Buffer(ChunkSize)
Chunk() = rs!Picture.GetChunk(ChunkSize)
Put DataFile, , Chunk()
Next i ProgressBar1.Value = ProgressBar1.Max
Close DataFile
CurrentPicturePath = App.path & "\pictemp." & CurrentFileExtension
ShowPicture
Exit Sub
What2Do:
MsgBox ("从服务器下载图片错误!")
Exit Sub
End Sub
该如何解决呢?非常感谢,下面是程序代码
==========================================
'从数据库获取图片
Private Sub GetPicture()
Dim DataFile As Integer
Dim Fl As Long
Dim Chunks As Integer
Dim Fragment As Integer
Dim Chunk() As Byte
Dim i As Integer
Const ChunkSize As Integer = 16384 '块缓存大小
Dim rs As Recordset
On Error GoTo What2Do
Set rs = New ADODB.Recordset
rs.Open "select Picture from YC_PIM_HYD_PROTECTION where Code = " & CurrentCode, cnnDB, adOpenDynamic, adLockOptimistic
DataFile = 1
Open App.path & "\pictemp." & CurrentFileExtension For Binary Access Write As DataFile
Fl = rs!Picture.ActualSize
Chunks = Fl \ ChunkSize
Fragment = Fl Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = rs!Picture.GetChunk(Fragment)
Put DataFile, , Chunk() For i = 1 To Chunks
ProgressBar1.Value = i / Chunks * ProgressBar1.Max
ReDim Buffer(ChunkSize)
Chunk() = rs!Picture.GetChunk(ChunkSize)
Put DataFile, , Chunk()
Next i ProgressBar1.Value = ProgressBar1.Max
Close DataFile
CurrentPicturePath = App.path & "\pictemp." & CurrentFileExtension
ShowPicture
Exit Sub
What2Do:
MsgBox ("从服务器下载图片错误!")
Exit Sub
End Sub
可为什么还不行呢?
如果是SQL的话,可能网络状态不理想,程序假死在连接服务器上面了!
ProgressBar1.Value = 0
ProgressBar1.Refresh For i = 1 To Chunks
ReDim Buffer(ChunkSize)
Chunk() = rs!Picture.GetChunk(ChunkSize)
Put DataFile, , Chunk()
ProgressBar1.Value = i
ProgressBar1.Refresh Next i ProgressBar1.Value = ProgressBar1.Max
rs.Open "select Picture from YC_PIM_HYD_PROTECTION where Code = " & CurrentCode, cnnDB, adOpenDynamic, adLockOptimistic
而不是
For i = 1 To Chunks
ProgressBar1.Value = i / Chunks * ProgressBar1.Max
ReDim Buffer(ChunkSize)
Chunk() = rs!Picture.GetChunk(ChunkSize)
Put DataFile, , Chunk()
Next i 所以程序假死在rs.open语句,而不是后者,那如何才能让程序获取数据的时候获取进度呢?