⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 111.htm

📁 VB的一些网络编程的例子,个人认为还不错。大家一起来研究一下.
💻 HTM
字号:
<p>在VB中实现文件上传</p>
<p></p>
<p>Visual Basic 作为一个集应用程序开发、测试、查错功能于一 体的集成式开发环境,越来越受到程序员的青睐。笔者在开发某数据 库维护系统的过程中,选择了VB5.0作为开发平台,Unix作为服务器端 操作系统,Informix 作为服务器数据库。 </p>
<p>  问题的出现 </p>
<p>  在开发该维护系统的过程中,注意到Informix 数据库的字段 类型CLOB 填入数据时需要函数FILETOCLOB("FILENAME","SERVER") , 其中的"FILENAME"需要指出文件路径和文件名称。然而,在维护过程 中此文件是在客户端执行的,这样就要求即时将文件传输到服务器端 。 </p>
<p>  解决办法 </p>
<p>  1. FTP传输工具 </p>
<p>  我们首先使用FTP传输工具,用VB5.0中SHELL 命令调用DOS批处理 文件来实现传输的需要。 </p>
<p>  Shell调用格式: </p>
<p>  Shell(pathname[,windowstyle]) </p>
<p>  例子:Shell("c:\windows\upload.bat") </p>
<p>  批处理文件upload.bat 的内容: </p>
<p>  c:\windows\ftp hostname </p>
<p>  username </p>
<p>  password </p>
<p>  send c:\zrh\upload.txt upload.txt </p>
<p>  bye </p>
<p>  该命令实现了文件"upload.txt"的传输要求。在使用完毕之后, 再调用命令把该文件删除。 </p>
<p>  例子:Shell("c:\windows\del_up.bat") </p>
<p>  批处理文件del_up.bat 的内容: </p>
<p>  c:\windows\ftp hostname </p>
<p>  username </p>
<p>  password </p>
<p>  dele upload.txt </p>
<p>  bye </p>
<p>  这样,文件"upload.txt"被删除。 </p>
<p>  但是,另一个问题出现了。由于Shell 函数的运行机制是与其它 程序同步执行,也就是说,当调用Shell 函数的子程序还没有执行完毕 之前,Shell函数后面的语句已经执行。在大批量添加数据的过程中, 就会出现某个记录的文件还没有传到,而下一个插入语句(I nsert)已 经开始调用。这样,ODBC调用就会出现错误。 </p>
<p>  2. INET 控件 </p>
<p>  Internet Transfer控件提供了Internet 上最常使用的两种协议 :HTTP 和FTP。使用HTTP 协议可以连接到WWW服务器上来下载文件;使 用FTP协议则可以登录到FTP 服务器。一般的FTP命令,例如CD、GET 都可以通过Execute 方法实现。 </p>
<p>  下面是一个设置INET控件属性的例子。 </p>
<p>  inet1.URL=ftp://username:password@hostname/document </p>
<p>  inet1.Protocol=2-icFTP </p>
<p>  inet1.RemoteHost=hostname </p>
<p>  inet1.RemotePort=21 </p>
<p>  inet1.Username=username </p>
<p>  inet1. Password=password </p>
<p>  执行文件传输: </p>
<p>  Inet1.Execute "ftp://username:password@hostname", _ </p>
<p>  "PUT" &local_filename & " UPLOAD1.TXT" </p>
<p>  right1 = Inet1.StillExecuting </p>
<p>  Do While right1 </p>
<p>    right1 = Inet1.StillExecuting </p>
<p>    DoEvents </p>
<p>  Loop </p>
<p>  这样便实现了文件的上载。 </p>
<p>  *SINET 控件的优点 </p>
<p>  INET控件与Shell()函数的不同之处在于INET控件通过调用语句 </p>
<p>  right1 = Inet1.StillExecuting </p>
<p>  Do While right1 </p>
<p>    right1 = Inet1.StillExecuting </p>
<p>    DoEvents </p>
<p>  Loop来控制语句执行的顺序。在文件传输工作未完成之前,程序 不会执行其它语句,自然也就不会出现调用Shell 函数所出现的问题 。变量right1用来测试inet1 的执行状态,如果进程中仍在进行文件 传输的工作,则调用过程DoEvents给系统空闲时间来做文件传输工作, 这样便成功地执行了文件上载的功能。该文件使用完毕之后将被删除 。 </p>
<p>  Inet1.Execute "ftp://informix:informix@rd", _ </p>
<p>  "DELETE UPLOAD1.TXT" </p>
<p>  right1 = Inet1.StillExecuting </p>
<p>  Do While right1 </p>
<p>  right1 = Inet1.StillExecuting </p>
<p>  DoEvents </p>
<p>  Loop </p>
<p>  将上载的文件删除是为了避免占用服务器端磁盘空间。 </p>
<p>  *S利用StateChanged事件提示信息 </p>
<p>  服务器在执行inet1.execute 的同时也激活了Inet1_StateChang ed事件,进程可以根据捕获到的状态进行动作。 </p>
<p>  object_StateChanged(ByVal State As Integer) </p>
<p>  State:整数类型Integer </p>
<p>  下面是状态的说明。 </p>
<p>  常数值   描述icNone </p>
<p>  0      未报告状态icHostResolvingHost </p>
<p>  1      控件正在寻找指定主机的IP地址icHostResolved </p>
<p>  2      控件已成功找到指定主机的IP地址icConnecting </p>
<p>  3      控件正在与指定主机进行连接icConnected </p>
<p>  4      控件已成功与指定主机连接icRequesting </p>
<p>  5      控件正在向主机发出请求icRequestSent </p>
<p>  6      控件已成功向主机发出请求icReceivingResponse </p>
<p>  7      控件正在从主机接收反馈信息icResponseReceived </p>
<p>  8      控件已成功从主机接受反馈信息icDisconnecting </p>
<p>  9      控件正在与主机断开icDisconnected </p>
<p>  10     控件已与主机断开icError </p>
<p>  11     在与主机通信的过程中发生了错误icResponseComp leted </p>
<p>  12     请求结束且数据已经接收到 </p>
<p>  下面是一个例子。 </p>
<p>  Private Sub Inet1_StateChanged(ByVal State As Integer) </p>
<p>  ' Retrieve server response using the GetChunk </p>
<p>  ' method when State = 12. This example assumes the </p>
<p>  ' data is text. </p>
<p>  Select Case State </p>
<p>  ' ... Other cases not shown. </p>
<p>  Case icResponseReceived ' 12 </p>
<p>  Dim vtData As Variant ' Data variable. </p>
<p>  Dim strData As String: strData = "" </p>
<p>  Dim bDone As Boolean: bDone = False </p>
<p>  ' Get first chunk. </p>
<p>  vtData = Inet1.GetChunk(1024, icString) </p>
<p>  Do While Not bDone </p>
<p>  strData = Data & vtData </p>
<p>  ' Get next chunk. </p>
<p>  vtData = Inet1.GetChunk(1024, icString) </p>
<p>  If Len(vtData) = 0 Then </p>
<p>    bDone = True </p>
<p>  End If </p>
<p>  Loop </p>
<p>  txtData.Text = strData </p>
<p>  End Select </p>
<p>  End Sub </p>
<p></p>
<p></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -