• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    在VB中實現文件上載

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 16次 | 進入軟件測試論壇討論

    領測軟件測試網 作者:張瑞華

      Visual Basic 作為一個集應用程序開發、測試、查錯功能于一 體的集成式開發環境,越來越受到程序員的青睞。筆者在開發某數據 庫維護系統的過程中,選擇了VB5.0作為開發平臺,Unix作為服務器端 操作系統,Informix 作為服務器數據庫。  

    問題的出現  
      筆者在開發該維護系統的過程中,注意到Informix 數據庫的字段 類型CLOB 填入數據時需要函數FILETOCLOB("FILENAME","SERVER") , 其中的"FILENAME"需要指出文件路徑和文件名稱。然而,在維護過程 中此文件是在客戶端執行的,這樣就要求即時將文件傳輸到服務器端 。  

    解決辦法
      1. FTP傳輸工具
    我們首先使用FTP傳輸工具,用VB5.0中SHELL 命令調用DOS批處理 文件來實現傳輸的需要。
    Shell調用格式:
    Shell(pathname[,windowstyle])
    例子:Shell("c:\windows\upload.bat")
    批處理文件upload.bat 的內容:
    c:\windows\ftp hostname
    username
    password
    send c:\zrh\upload.txt upload.txt
    bye
    該命令實現了文件"upload.txt"的傳輸要求。在使用完畢之后, 再調用命令把該文件刪除。

    例子:Shell("c:\windows\del_up.bat")
    批處理文件del_up.bat 的內容:
    c:\windows\ftp hostname
    username
    password
    dele upload.txt
    bye
    這樣,文件"upload.txt"被刪除。
    但是,另一個問題出現了。由于Shell 函數的運行機制是與其它 程序同步執行,也就是說,當調用Shell 函數的子程序還沒有執行完畢 之前,Shell函數后面的語句已經執行。在大批量添加數據的過程中, 就會出現某個記錄的文件還沒有傳到,而下一個插入語句(I nsert)已 經開始調用。這樣,ODBC調用就會出現錯誤。
      
       
      2. INET 控件
      Inte.net Transfer控件提供了Internet 上最常使用的兩種協議 :HTTP 和FTP。使用HTTP 協議可以連接到WWW服務器上來下載文件;使 用FTP協議則可以登錄到FTP 服務器。一般的FTP命令,例如CD、GET 都可以通過Execute 方法實現。
    下面是一個設置INET控件屬性的例子。
      inet1.URL=ftp://username:password@hostname/document
      inet1.Protocol=2-icFTP
      inet1.RemoteHost=hostname
      inet1.RemotePort=21
      inet1.Username=username
      inet1. Password=password
    執行文件傳輸:
      Inet1.Execute "ftp://username:password@hostname", _
      "PUT" &local_filename & " UPLOAD1.TXT"
      right1 = Inet1.StillExecuting
      Do While right1
        right1 = Inet1.StillExecuting
        DoEvents
      Loop
    這樣便實現了文件的上載。
    *SINET 控件的優點
    INET控件與Shell()函數的不同之處在于INET控件通過調用語句
      right1 = Inet1.StillExecuting
      Do While right1
        right1 = Inet1.StillExecuting
        DoEvents
      Loop來控制語句執行的順序。在文件傳輸工作未完成之前,程序 不會執行其它語句,自然也就不會出現調用Shell 函數所出現的問題 。變量right1用來測試inet1 的執行狀態,如果進程中仍在進行文件 傳輸的工作,則調用過程DoEvents給系統空閑時間來做文件傳輸工作, 這樣便成功地執行了文件上載的功能。該文件使用完畢之后將被刪除 。
      Inet1.Execute "ftp://informix:informix@rd", _
      "DELETE UPLOAD1.TXT"
      right1 = Inet1.StillExecuting
      Do While right1
      right1 = Inet1.StillExecuting
      DoEvents
      Loop
    將上載的文件刪除是為了避免占用服務器端磁盤空間。
    *S利用StateChanged事件提示信息
    服務器在執行inet1.execute 的同時也激活了Inet1_StateChang ed事件,進程可以根據捕獲到的狀態進行動作。
      object_StateChanged(ByVal State As Integer)
      State:整數類型Integer
    下面是狀態的說明。
      常數值   描述icNone
      0      未報告狀態icHostResolvingHost
      1      控件正在尋找指定主機的IP地址icHostResolved
      2      控件已成功找到指定主機的IP地址icConnecting
      3      控件正在與指定主機進行連接icConnected
      4      控件已成功與指定主機連接icRequesting
      5      控件正在向主機發出請求icRequestSent
      6      控件已成功向主機發出請求icReceivingResponse
      7      控件正在從主機接收反饋信息icResponseReceived
      8      控件已成功從主機接受反饋信息icDisconnecting
      9      控件正在與主機斷開icDisconnected
      10     控件已與主機斷開icError
      11     在與主機通信的過程中發生了錯誤icResponseComp leted
      12     請求結束且數據已經接收到
    下面是一個例子。
      Private Sub Inet1_StateChanged(ByVal State As Integer)
      ' Retrieve server response using the GetChunk
      ' method when State = 12. This example assumes the
      ' data is text.
      Select Case State
      ' ... Other cases not shown.
      Case icResponseReceived ' 12
      Dim vtData As Variant ' Data variable.
      Dim strData As String: strData = ""
      Dim bDone As Boolean: bDone = False
      ' Get first chunk.
      vtData = Inet1.GetChunk(1024, icString)
      Do While Not bDone
      strData = Data & vtData
      ' Get next chunk.
      vtData = Inet1.GetChunk(1024, icString)
      If Len(vtData) = 0 Then
        bDone = True
      End If
      Loop
      txtData.Text = strData
      End Select
      End Sub  

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>