分享
 
 
 

在VB中实现文件上载

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

作者:张瑞华

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: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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有