請教大家 pb中 檔案從資料庫提取,直接保存到本地桌面有什么好的辦法
uj5u.com熱心網友回復:
服務器上: updateblob客戶端:selectblob
其它的就是 readfile writefile blob資料壓縮 什么的。
小檔案還是可以這么處理的。
uj5u.com熱心網友回復:
你寫反了,是fileread,filewriteuj5u.com熱心網友回復:
有果有足夠的精力還是使用FTP之類的專用檔案處理服務器存放檔案比較好些,用資料庫存盤檔案不是最優選擇。uj5u.com熱心網友回復:
烏龜哥哥好心人。。。
uj5u.com熱心網友回復:
現在做客戶端更新,目前還是做selectblob,updateblobuj5u.com熱心網友回復:
從資料庫中取出檔案(blob)則用selectblob陳述句。將取出的blob轉存為磁盤檔案則可以用類似以下的陳述句寫個函式://變元as_path 為檔案名
//變元b_file 為從資料庫取出的Blob
//呼叫方法li_ret = uf_blob_file(as_path,b_file)
long li_filenum,ll_ret
li_FileNum = FileOpen(as_path,StreamMode!, Write!, LockReadWrite!, Replace!)
if li_filenum<1 then
messagebox('錯誤','寫入檔案'+as_path+'出錯!',stopsign!)
fileclose(li_filenum)
return -1;
end if
ll_ret = FileWriteEx(li_FileNum, b_file)
fileclose(li_filenum)
return ll_ret
記住檔案名及路徑需要填寫的,擴展名可不能搞錯,否則存下的檔案可能無法讀出。
需要輸入的檔案名及路徑用: GetFileSaveName()。
具體的寫法流程:
GetFileSaveName('選擇存放檔案的路徑及檔案名',ls_path,ls_filename,擴展名,過濾)
selectblob blob列名 into :lb_blob from 表名...
li_ret = uf_blob_file (ls_path,lb_blob)
if li_ret = 0 then
messagebox('','成功')
else
messagebox('','失敗')
end if
上面函式中FileWriteEx() 是PB11函式,PB9 以下可能就得寫成:
ll_len=len(b_file)
//如果檔案大于32765,判斷需要多少次讀取
IF ll_len > 32765 THEN
IF Mod(ll_len, 32765) = 0 THEN
loops = ll_len/32765
ELSE
loops = (ll_len/32765) + 1
END IF
else
loops=1
end if
l_cur_js=1
i=1
do while i<=loops
yield()
b_temp=blobmid(b_file,l_cur_js,32765)
FileWrite(li_FileNum, b_temp)
l_js -=l_cur_js
l_cur_js+=32765
l_js +=l_cur_js
i++
loop
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/75038.html
標籤:腳本語言
