我写个每分钟导入导出的文件的小程序。同时具有查询状态的功能。
rs.Open "select * from FaxSumbitter where FaxEstate='未导出'", cnn, 1, 3
DoEvents
While Not rs.EOF
If rs.Fields(6).Value = "doc" Then
FilePath = Format(rs!Userid_Fax)
Set iStm = New ADODB.Stream
With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write rs!FaxNote
.SaveToFile Trim(App.Path & "\FaxFile\" & FilePath & Format(rs!FaxSumbitTime, "yyyymmddhhddss") & ".doc")
End With
rs!FaxPath = Trim(App.Path & "\FaxFile\" & FilePath & Format(rs!FaxSumbitTime, "yyyymmddhhddss") & ".doc")
Else
Set mst = New ADODB.Stream
With mst
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write rs("FaxNote")
.SaveToFile Trim(App.Path & "\FaxFile\" & FilePath & Format(rs!FaxSumbitTime, "yyyymmddhhddss") & ".jpg")
End With
rs!FaxPath = Trim(App.Path & "\FaxFile\" & FilePath & Format(rs!FaxSumbitTime, "yyyymmddhhddss") & ".jpg")
End If
rs!FaxNote = Null
rs!FaxEstate = "已导出"
rs.Update
rs.MoveNext
Wend现在的问题是:如果用户点击了查询,恰好sql正在执行到处二进制文件的话,程序就停止响应。
请问该如何解决?
rs.Open "select * from FaxSumbitter where FaxEstate='未导出'", cnn, 1, 3
DoEvents
While Not rs.EOF
If rs.Fields(6).Value = "doc" Then
FilePath = Format(rs!Userid_Fax)
Set iStm = New ADODB.Stream
With iStm
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write rs!FaxNote
.SaveToFile Trim(App.Path & "\FaxFile\" & FilePath & Format(rs!FaxSumbitTime, "yyyymmddhhddss") & ".doc")
End With
rs!FaxPath = Trim(App.Path & "\FaxFile\" & FilePath & Format(rs!FaxSumbitTime, "yyyymmddhhddss") & ".doc")
Else
Set mst = New ADODB.Stream
With mst
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write rs("FaxNote")
.SaveToFile Trim(App.Path & "\FaxFile\" & FilePath & Format(rs!FaxSumbitTime, "yyyymmddhhddss") & ".jpg")
End With
rs!FaxPath = Trim(App.Path & "\FaxFile\" & FilePath & Format(rs!FaxSumbitTime, "yyyymmddhhddss") & ".jpg")
End If
rs!FaxNote = Null
rs!FaxEstate = "已导出"
rs.Update
rs.MoveNext
Wend现在的问题是:如果用户点击了查询,恰好sql正在执行到处二进制文件的话,程序就停止响应。
请问该如何解决?
单线程的程序,如果正在执行繁忙的导入导出,肯定来不及再响应其它的操作,要不然怎么叫单线程呢?治本的办法是开多线程,可以把导入导出放在一个专门的线程里执行。如果觉得VB里开多线程太麻烦,可以用一个专门的进程(exe)来执行导入导出.治标的办法,就是不要这么频繁的导入导出了。每天导一次或者需要的时候再导,这样尽量避免和用户的操作发生冲突。具体情况自己把握喽。
vb多线程还不太会。惭愧。
请问我的程序这样的写法是否有更好的方式呢?我觉得这种程序的执行效率不够。
客户端上传用的是二进制而非ftp,看来我得改成ftp了。