Visual Basic 作為一個(gè)集應(yīng)用程序開發(fā)、測試、查錯功能于一 體的集成式開發(fā)環(huán)境,越來越受到程序員的青睞。筆者在開發(fā)某數(shù)據(jù) 庫維護(hù)系統(tǒng)的過程中,選擇了VB5.0作為開發(fā)平臺,Unix作為服務(wù)器端 操作系統(tǒng),Informix 作為服務(wù)器數(shù)據(jù)庫。
問題的出現(xiàn)
筆者在開發(fā)該維護(hù)系統(tǒng)的過程中,注意到Informix 數(shù)據(jù)庫的字段 類型CLOB 填入數(shù)據(jù)時(shí)需要函數(shù)FILETOCLOB("FILENAME","SERVER") , 其中的"FILENAME"需要指出文件路徑和文件名稱。然而,在維護(hù)過程 中此文件是在客戶端執(zhí)行的,這樣就要求即時(shí)將文件傳輸?shù)椒?wù)器端 。
解決辦法
1. FTP傳輸工具
我們首先使用FTP傳輸工具,用VB5.0中SHELL 命令調(diào)用DOS批處理 文件來實(shí)現(xiàn)傳輸?shù)男枰?BR> Shell調(diào)用格式:
Shell(pathname[,windowstyle])
例子:Shell("c:\windows\upload.bat")
批處理文件upload.bat 的內(nèi)容:
c:\windows\ftp hostname
username
password
send c:\zrh\upload.txt upload.txt
bye
該命令實(shí)現(xiàn)了文件"upload.txt"的傳輸要求。在使用完畢之后, 再調(diào)用命令把該文件刪除。
例子:Shell("c:\windows\del_up.bat")
批處理文件del_up.bat 的內(nèi)容:
c:\windows\ftp hostname
username
password
dele upload.txt
bye
這樣,文件"upload.txt"被刪除。
但是,另一個(gè)問題出現(xiàn)了。由于Shell 函數(shù)的運(yùn)行機(jī)制是與其它 程序同步執(zhí)行,也就是說,當(dāng)調(diào)用Shell 函數(shù)的子程序還沒有執(zhí)行完畢 之前,Shell函數(shù)后面的語句已經(jīng)執(zhí)行。在大批量添加數(shù)據(jù)的過程中, 就會出現(xiàn)某個(gè)記錄的文件還沒有傳到,而下一個(gè)插入語句(I nsert)已 經(jīng)開始調(diào)用。這樣,ODBC調(diào)用就會出現(xiàn)錯誤。
2. INET 控件
Internet Transfer控件提供了Internet 上最常使用的兩種協(xié)議 :HTTP 和FTP。使用HTTP 協(xié)議可以連接到WWW服務(wù)器上來下載文件;使 用FTP協(xié)議則可以登錄到FTP 服務(wù)器。一般的FTP命令,例如CD、GET 都可以通過Execute 方法實(shí)現(xiàn)。
下面是一個(gè)設(shè)置INET控件屬性的例子。
inet1.URL=ftp://username:password@hostname/document
inet1.Protocol=2-icFTP
inet1.RemoteHost=hostname
inet1.RemotePort=21
inet1.Username=username
inet1. Password=password
執(zhí)行文件傳輸:
Inet1.Execute "ftp://username:password@hostname";, _
"PUT" &local_filename & " UPLOAD1.TXT"
right1 = Inet1.StillExecuting
Do While right1
right1 = Inet1.StillExecuting
DoEvents
Loop
這樣便實(shí)現(xiàn)了文件的上載。
問題的出現(xiàn)
筆者在開發(fā)該維護(hù)系統(tǒng)的過程中,注意到Informix 數(shù)據(jù)庫的字段 類型CLOB 填入數(shù)據(jù)時(shí)需要函數(shù)FILETOCLOB("FILENAME","SERVER") , 其中的"FILENAME"需要指出文件路徑和文件名稱。然而,在維護(hù)過程 中此文件是在客戶端執(zhí)行的,這樣就要求即時(shí)將文件傳輸?shù)椒?wù)器端 。
解決辦法
1. FTP傳輸工具
我們首先使用FTP傳輸工具,用VB5.0中SHELL 命令調(diào)用DOS批處理 文件來實(shí)現(xiàn)傳輸?shù)男枰?BR> Shell調(diào)用格式:
Shell(pathname[,windowstyle])
例子:Shell("c:\windows\upload.bat")
批處理文件upload.bat 的內(nèi)容:
c:\windows\ftp hostname
username
password
send c:\zrh\upload.txt upload.txt
bye
該命令實(shí)現(xiàn)了文件"upload.txt"的傳輸要求。在使用完畢之后, 再調(diào)用命令把該文件刪除。
例子:Shell("c:\windows\del_up.bat")
批處理文件del_up.bat 的內(nèi)容:
c:\windows\ftp hostname
username
password
dele upload.txt
bye
這樣,文件"upload.txt"被刪除。
但是,另一個(gè)問題出現(xiàn)了。由于Shell 函數(shù)的運(yùn)行機(jī)制是與其它 程序同步執(zhí)行,也就是說,當(dāng)調(diào)用Shell 函數(shù)的子程序還沒有執(zhí)行完畢 之前,Shell函數(shù)后面的語句已經(jīng)執(zhí)行。在大批量添加數(shù)據(jù)的過程中, 就會出現(xiàn)某個(gè)記錄的文件還沒有傳到,而下一個(gè)插入語句(I nsert)已 經(jīng)開始調(diào)用。這樣,ODBC調(diào)用就會出現(xiàn)錯誤。
2. INET 控件
Internet Transfer控件提供了Internet 上最常使用的兩種協(xié)議 :HTTP 和FTP。使用HTTP 協(xié)議可以連接到WWW服務(wù)器上來下載文件;使 用FTP協(xié)議則可以登錄到FTP 服務(wù)器。一般的FTP命令,例如CD、GET 都可以通過Execute 方法實(shí)現(xiàn)。
下面是一個(gè)設(shè)置INET控件屬性的例子。
inet1.URL=ftp://username:password@hostname/document
inet1.Protocol=2-icFTP
inet1.RemoteHost=hostname
inet1.RemotePort=21
inet1.Username=username
inet1. Password=password
執(zhí)行文件傳輸:
Inet1.Execute "ftp://username:password@hostname";, _
"PUT" &local_filename & " UPLOAD1.TXT"
right1 = Inet1.StillExecuting
Do While right1
right1 = Inet1.StillExecuting
DoEvents
Loop
這樣便實(shí)現(xiàn)了文件的上載。