登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 | 信息 | 空间 | VB | VC | Delphi | Java | Flash | 补丁 | 控件 | 安全 | 黑客 | 电子书 | 笔记本 | 手机 | MP3 | 杀毒 | QQ群 | 产品库 | 分类信息 | 编程网站
  立华软件园 - Visual Basic 专区 - 技术文档 - 网络编程 技术文章 | VB源代码 | 电子图书 | VB网站 | 相关下载 | 在线论坛 | QQ群组 | 搜索   
 VB技术文档
  · 窗体界面
  · 系统控制
  · VB.Net
  · 多媒体
  · 网络编程
  · API函数
  · 游戏编程
  · 数据报表
  · 其他文档
 VB源代码
  · 窗体界面
  · 文件目录
  · 多媒体
  · 网络编程
  · 系统API
  · 数据报表
  · 游戏编程
  · VBA办公
  · 其他代码
 VB论坛
  · Visual Basic 讨论区
  · VB.Net 讨论区
  · VB数据库开发讨论区
  · VB系统API讨论区
 其他VB资源
  · VB下载资源
  · VB电子图书
  · VB QQ群组讨论区
  · VB 其他网站资源




在VB中实现文件上载
发表日期:2003-07-21作者:张瑞华[] 出处:  

  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:windowsupload.bat")

  批处理文件upload.bat 的内容:

  c:windowsftp hostname

  username

  password

  send c:zrhupload.txt upload.txt

  bye

  该命令实现了文件"upload.txt"的传输要求。在使用完毕之后, 再调用命令把该文件删除。

  例子:Shell("c:windowsdel_up.bat")

  批处理文件del_up.bat 的内容:

  c:windowsftp hostname

  username

  password

  dele upload.txt

  bye

  这样,文件"upload.txt"被删除。

  但是,另一个问题出现了。由于Shell 函数的运行机制是与其它 程序同步执行,也就是说,当调用Shell 函数的子程序还没有执行完毕 之前,Shell函数后面的语句已经执行。在大批量添加数据的过程中, 就会出现某个记录的文件还没有传到,而下一个插入语句(I nsert)已 经开始调用。这样,ODBC调用就会出现错误。

  2. INET 控件

  Internet 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

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 在VB中实现文件上载

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00199