通俗基础教程
电脑操作教程
电脑怎样拨号上网
如何做个人网页
怎样做局域网
Word教程(文字处理)
图形图象处理入门
经典提高教程
怎样使用代理服务器
如何做无盘工作站
Photoshop教程
Dreamweaver3教程
Flash4&5教程
Firework3教程
Frontpage2000教程
Authware教程
Office2000教程
如何制作动画图片
OICQ&ICQ使用方法

高手学习指南

硬件升级技巧
CGI教程
ASP教程

PHP教程

注册表使用技巧
路由器的设置
网站建设指南
SQL
最近更新:
VB
相关内容

在VB中实现文件上载

  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 控件
  Internet Transfer控件提供了Internet 上最常使用的两种协议 :HTTP 和FTP。使用HTTP 协议可以连接到WWW服务器上来下载文件;使用FTP协议则可以登录到FTP 服务器。一般的FTP命令,例如CD、GET 都可以通过Execute 方法实现。
  下面是一个设置INET控件属性的例子。
  inet1.URL=ftp://username:[email protected]/document
  inet1.Protocol=2-icFTP
  inet1.RemoteHost=hostname
  inet1.RemotePort=21
  inet1.Username=username
  inet1. Password=password
  执行文件传输:
  Inet1.Execute "ftp://username:[email protected]", _
  "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:[email protected]", _
  "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实现多文件查找与替换功能
用VB 5.0 设计Browser及FTP程序
用Visual Basic 5.0设计E-mail程序
谈谈WIN API在VB中的应用
在VB中使用Word的“艺术字”工具
获取Win95特殊目录准确路径
配置文件.ini在VB5中的应用
控制结构VB5程序设计
用VB切换三个特殊键
用VB5对Windows 95任务栏提示区编程
用API改进ListView显示效果
VB中Grid控件的打印方法
在VB中实现文件上载
 
 
 
 
 
 
 
 
 
 
 
 
 
教程站
收集整理




月光软件源码下载编程文档电脑教程网站优化网址导航网络文学游戏天地生活休闲写作范文安妮宝贝站内搜索
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有