首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

关于PB局域网内自动升级有关问题

2012-03-13 
关于PB局域网内自动升级问题在网上找到资料但下载试用更新两个以上文件就不行了,下载更新第二个文件时会把

关于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}

C/C++ code
SELECTBLOB t_updata.fileblob    INTO :b_file 在这里b_file第二次时这个会加上一个b_file
[解决办法]
太复杂,既然是局域网,不要用SELECTBLOB,建议用FileCopy

热点排行