我写个每分钟导入导出的文件的小程序。同时具有查询状态的功能。
    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正在执行到处二进制文件的话,程序就停止响应。
请问该如何解决?

解决方案 »

  1.   

    文件大吗?每分钟都执行导入导出似乎太频繁了一些。
    单线程的程序,如果正在执行繁忙的导入导出,肯定来不及再响应其它的操作,要不然怎么叫单线程呢?治本的办法是开多线程,可以把导入导出放在一个专门的线程里执行。如果觉得VB里开多线程太麻烦,可以用一个专门的进程(exe)来执行导入导出.治标的办法,就是不要这么频繁的导入导出了。每天导一次或者需要的时候再导,这样尽量避免和用户的操作发生冲突。具体情况自己把握喽。
      

  2.   

    我这是提交群发传真的,必须要每分钟都有导出文件的,单个文件最大不超过5M。
    vb多线程还不太会。惭愧。
    请问我的程序这样的写法是否有更好的方式呢?我觉得这种程序的执行效率不够。
      

  3.   

    我的是从客户端上传都服务器后导出的。
    客户端上传用的是二进制而非ftp,看来我得改成ftp了。