如何存取图片

xiaofei104 2002-02-28 08:14:44
在PB中我用一段程序来实现图片的存取时,图片却存不进去。
脚本如下:
int fh
blob emp
fh=FileOpen("g:\test\net.bmp",StreamMode!)
if fh<>-1 then
FileRead(fh,emp)
FileClose(fh)
updateblob users set photo=:emp where name="xiaofei" using sqlca;
end if
if sqlca.sqlnrows>0 then
commit using sqlca;
end if
当我再去查询数据库时发现根本没有把图片存进去。对了我使用的数据库是SQL
SERVER 表users中 photo字段使用的是image数据类型
...全文
41 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
redhandgirl 2002-03-03
  • 打赏
  • 举报
回复
integer li_FileNum, loops, i
long flen, bytes_read, new_pos
blob b
string bmpname, named,tempbmp
integer ll_o,ll_bytes
string ll_name,ll_id
integer value


value= GetFileOpenName("请选择你要录入图文件" , &
bmpname , named , "",&
"图像文件(*.bmp;*.jpg;*.gif) , *.bmp;*.jpg;*.gif,"+&
"autocad 文件 (*.dwg;*.dxf),*.dwg;*.dxf," +&
"所有文件(*.*),*.*")

SetPointer(HourGlass!)
flen = FileLength(bmpname)
li_FileNum = FileOpen(bmpname,StreamMode!)
IF flen > 32765 THEN
IF Mod(flen, 32765) = 0 THEN
loops = flen/32765
ELSE
loops = (flen/32765) + 1
END IF
ELSE
loops = 1
END IF
// Read the file
new_pos = 1

string ls_temp = ''
pic_b = blob(ls_temp)//set pic_b to null

//messagebox("",len(pic_b))
FOR i = 1 to loops
bytes_read = FileRead(li_FileNum, b)

pic_b = pic_b + b
NEXT
FileClose(li_FileNum)

insert into pic_wh(part_no)
values(:ls_part_no);
IF NOT IsNull(pic_b) THEN
SQLCA.AutoCommit=TRUE UPDATEBLOB pic_wh SET part_pic=:pic_b
WHERE part_no= :ls_part_no USING SQLCA;
SQLCA.AutoCommit=FALSE
END IF
zjcxx 2002-02-28
  • 打赏
  • 举报
回复
总结一下:
1)在updateblob users set photo=:emp where name="xiaofei" using sqlca;
之前加上sqlca.autocommit=true,之后加上sqlca.autocommit=false
2)读取文件应判断是否超过23765,不然要循环读入。每次最大只能读取32K
呵呵!
china_hfz 2002-02-28
  • 打赏
  • 举报
回复
图片大小不能超过32756 不然要分几次读入
llitcwl 2002-02-28
  • 打赏
  • 举报
回复
要加一句:sqlca.autocommit=true
tiantianpb 2002-02-28
  • 打赏
  • 举报
回复
改成blob数据类型试试

397

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧