以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  在上传文件到二进制列时,如何显示文件上传进度条呢?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=160020)

--  作者:cnsjroom
--  发布时间:2021/1/18 0:47:00
--  在上传文件到二进制列时,如何显示文件上传进度条呢?
在上传文件到二进制列时,如何显示文件上传进度条呢?

进度条窗体中  有一个进度条组件 和按钮
按钮代码:可以实现根据文件获取文件大小并刷新窗体中的进度条组件【怎么实现进度条到达完毕后,关闭进度条窗体呢?红色部分代码怎么完善?
Dim ifo As new FileInfo("D:\\360极速浏览器下载\\boneAnimation_v2.2.9_x64.exe")
Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
p.Maximum = ifo.Length\'设置最大值
p.Minimum = 0 \'设置最小值
p.Value = 0 \'设置当前值
For i As Integer = 0 To ifo.Length - 1
    If i Mod 100 = 0 Then
        p.Value = i \'当前值为已经完成的行数
    End If
Forms("进度条").Close()
Next

下面代码为列子中的二进制文件上传代码   怎么采用上面的代码来对应在上传文件的时候 弹出进度条窗体 并显示进度条呢?上传完毕后自动关闭进度条窗体。(红色部分……代码该怎么写呢?)
上传文件按钮代码:
IDim dlg As New OpenFileDialog
dlg.Filter = "图形文件|*.bmp;*.jpg;*.gif;*.png"
If dlg.ShowDialog =DialogResult.OK Then
    Dim fl As String = dlg.FileName
    Dim r As Row = Tables("员工.附件").AddNew()
    r("文件名") = FileSys.GetName(fl) \'写入文件名
    r.Save \'必须先保存
    r.DataRow.SQLInsertFile("附件",fl) \'插入文件
……
Forms("进度条").show()
    r.DataRow.SQLSetValue("CRC值", CRCCheckFile(fl)) \'保存crc检验值
End If




下面代码为列子中的二进制文件打开代码   怎么采用上面的代码来对应在下载文件的时候 弹出进度条窗体 并显示进度条呢?下载完毕后自动关闭进度条窗体。(红色部分……代码该怎么写呢?)
打开文件按钮代码:
If Tables("员工.附件").Current Is Nothing Then
    Return
End If
Dim dr As DataRow = Tables("员工.附件").Current.DataRow
Dim fl As String =  ProjectPath &  dr("文件名")
If FileSys.FileExists(fl) AndAlso CRCCheckFile(fl) = dr.SQLGetValue("CRC值") Then \'如果本地存在同名文件且CRC校验值相同
    \'则直接使用本地文件
Else \'否则从数据库提取文件
……
Forms("进度条").show()
    If dr.SQLLoadFile("附件",fl) = False Then \'如果提取文件失败
        Messagebox.Show("附件提取失败,可能并不存在附件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Return
    End If
End If
Dim Proc As New Process \'打开文件
Proc.File = fl
Proc.Start()
[此贴子已经被作者于2021/1/18 0:58:09编辑过]

--  作者:有点蓝
--  发布时间:2021/1/18 8:41:00
--  
参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=152101
--  作者:cnsjroom
--  发布时间:2021/1/18 10:18:00
--  回复:(有点蓝)参考:http://www.foxtable.com/bbs/...
参照列子  代码如下:
Dim dlg As New OpenFileDialog
dlg.Filter = "|*.*"
If dlg.ShowDialog =DialogResult.OK Then
    Dim fl As String = dlg.FileName
    Dim ifo As new FileInfo(fl)
    Dim sj As  Double
    Dim Multi As String = (ifo.Length)
    Dim Values() As String
    Values = Multi.split(".")
    sj=Values(0)
    \'If sj > 1073741824 Then  \'文件大于1gb
    If sj > 524288000 Then \'文件大于500mb
        MessageBox.Show("文件"&  Format(Values(0)/1024/1024,"0.00") &"MB" &"过大,只能上传小于500MB的文件!","温馨提示")
    Else
        MessageBox.Show("文件"&  Format(Values(0)/1024/1024,"0.00") &"MB" &"小于500MB,支持上传!","温馨提示")
        Dim r As Row = Tables("员工.附件").AddNew()
        r("文件名") = FileSys.GetName(fl) \'写入文件名
        r.Save \'必须先保存
        r.DataRow.SQLInsertFile("附件",fl) \'插入文件
        WaitShow()  \'打开
        
        \'耗时操作
        For i As Integer = 0 To sj
            Output.Show(i)
        Next
        
        WaitClose()  \'关闭
        r.DataRow.SQLSetValue("CRC值", CRCCheckFile(fl)) \'保存crc检验值
    End If
End If

红色部分没有起到作用    如果将SJ换成列子中的10000  且直接命令窗口红色部分可以运行
麻烦老师看看  红色部分怎么没有根据文件上传进度进行对应的进度条图片显示呢?

--  作者:有点蓝
--  发布时间:2021/1/18 10:22:00
--  
        WaitShow()  \'打开
        
        \'耗时操作
        r.DataRow.SQLInsertFile("附件",fl) \'插入文件
        
        WaitClose()  \'关闭

--  作者:cnsjroom
--  发布时间:2021/1/18 10:32:00
--  回复:(有点蓝)        WaitSh...
OK  谢谢老师   是不是同理  其他如果上传或者操作需要等待很久的时候  我就对应的吧需要长时间等待运行的代码放在这个里面

WaitShow()  \'打开        
        \'耗时操作
        需要长时间耗时操作的代码
WaitClose()  \'关闭

有没有办法实现百分之几的进度呢?这样会更加直观一些

--  作者:有点蓝
--  发布时间:2021/1/18 10:37:00
--  
没有办法,SQLInsertFile是一个原子操作,基于不同的文件大小、网络状态、内存使用状态,数据库状态,都有可能产生不同的处理时间。只能是显示一个gif图片表示正在处理中,
--  作者:cnsjroom
--  发布时间:2021/1/18 11:04:00
--  回复:(有点蓝)没有办法,SQLInsertFile是一个原子操...
好的 谢谢老师耐心的指导和解答