关于PB局域网内自动升级问题
在网上找到资料但下载试用更新两个以上文件就不行了,下载更新第二个文件时会把第一个文件累加的,也就是第二个文件是二个文件之和,原代码如下long l_curfs
string str_AppPath,str_name
blob b_file
b_close=true
//取得当前文件的合计数
SELECT count(t_updata.filesize),sum(t_updata.filesize)
INTO :i_fs,:l_cnt_js
FROM t_updata
WHERE t_updata.ver = :str_ver;
//取得当前的程序路径
str_AppPath=wf_app_path()
DECLARE my_cursor CURSOR FOR
SELECT isnull(t_updata.filename,''),
isnull(t_updata.filesize,0)
FROM t_updata
WHERE t_updata.ver = :str_ver;
open my_cursor;
fetch my_cursor
into :str_name,:l_curfs;
l_js=0
i_cur=0
do while sqlca.sqlcode = 0
i_cur++
SELECTBLOB t_updata.fileblob
INTO :b_file 在这里b_file第二次时这个会加上一个b_file
FROM t_updata
WHERE ( t_updata.ver = :str_ver ) AND
( t_updata.filename = :str_name );
wf_db_files(str_apppath,str_name,b_file)
st_ts2.text=string(i_cur)+'/'+string(i_fs)+' 下载的字节:'+string(l_js)+'/'+string(l_cnt_js)
fetch my_cursor
into :str_name,:l_curfs;
loop
close my_cursor;
cbx_ts3.checked=true
uo_prg1.of_setvalue(100)
uo_prg2.of_setvalue(100)
messagebox('提示','升级完成,请重新运行本程序!')
if cbx_1.checked then
close(this)
return;
else
uo_prg1.of_paint()
uo_prg2.of_paint()
end if
wf_db_files这个函数是long li_filenum,ll_len,loops,l_cur_js,i
blob b_temp
li_FileNum = FileOpen(str_path+str_filename,StreamMode!, Write!, LockReadWrite!, Replace!)
if li_filenum<1 then
messagebox('错误','写入文件'+str_path+str_filename+'出错!',stopsign!)
fileclose(li_filenum)
return;
end if
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
st_ts1.text=str_filename+' 已下载'+string(l_cur_js)+'/共'+string(ll_len)+'字节'
i=1
do while (i<=loops and b_close)
uo_prg1.of_setvalue(integer(i/loops*100))
uo_prg2.of_setvalue(integer(l_js/l_cnt_js*100))
yield()
b_temp=blobmid(b_file,l_cur_js,32765)
FileWrite(li_FileNum, b_temp)
st_ts1.text=str_filename+' 已下载'+string(l_cur_js)+'/共'+string(ll_len)+'字节'
st_ts2.text=string(i_cur)+'/'+string(i_fs)+' 下载的字节:'+string(l_js)+'/'+string(l_cnt_js)
l_js -=l_cur_js
l_cur_js+=32765
l_js +=l_cur_js
i++
loop
fileclose(li_filenum)
请高手指导
[解决办法]
定义时多定义一个blob变量
string str_AppPath,str_name
blob b_file, lb{0}
SELECTBLOB t_updata.fileblob INTO :b_file 在这里b_file第二次时这个会加上一个b_file
[解决办法]
太复杂,既然是局域网,不要用SELECTBLOB,建议用FileCopy