| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2691 人关注过本帖
标题:[求助]pb处理图片(急呀!)
只看楼主 加入收藏
lclqxy
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2005-6-6
收藏
 问题点数:0 回复次数:13 
[求助]pb处理图片(急呀!)

我使用的是PB9.0+ORACLE
在表sb_zmsb_jb中有blob字段sbtx用来保存图片
实例变量 blob tx,b_tx
数据窗口控件dw_jb,数据窗口dw_zmsb_jb内有一图片控件p_1,按纽cb_sbtx
在数据窗口控件dw_jb的buttonclicked事件中代码如下:
string ls_path,ls_file
long fh,ll_filelen,li_pos,li_cnt,li_nr,sjtx,ll_sjtx
//选择图片
fh=getfileopenname("select file",+ls_path,ls_file,"jpg",&
+"jpg files(*.jpg),*.jpg,"+"gif files(*.gif),*.gif")
if len(ls_path)=0 then
f_mess("请重新选择图形!")
return
end if
this.object.p_1.Filename=ls_path
IF fh =1 THEN
ll_filelen=filelength(ls_path)
if ll_filelen>32766 then
li_pos=((ll_filelen - 1)/32766) + 1
li_nr=fileopen(ls_path,streammode!,read!,lockread!)
else
li_pos=1
end if
for li_cnt=1 to li_pos
sjtx=FileRead(fh, tx)
b_tx=b_tx + tx
ll_sjtx=ll_sjtx + sjtx
fileseek(li_nr,ll_sjtx,frombeginning!)
next
fileclose(li_nr)

END IF
//完成对外部图片的读入
----以上代码是成功实现的
在界面上另有保存按纽,代码
//保存图片
UPDATEBLOB sb_zmsb_jb SET sbtx= :b_tx

WHERE zczh=:ls_zczh

USING sqlca ;
IF sqlca.SQLNRows > 0 THEN
COMMIT USING sqlca ;
f_mess("图片保存成功!")
END IF
问题就出在保存上了,所有代码运行正常也提示图片保存成功!可是表中就是没有图片的数据?但如果把blob字段改为long raw就可以了,不知道原因出在哪里了,请大家帮个忙。另外该如何从数据库中将图片读到数据窗口中的p_1控件中,
selectblob sbtx into :blb_tmp
from sb_zmsb_jb
where zczh=:ls_zczh
using sqlca;
使用dw_jb.object.p_1.setpicture(blb_tmp)或dw_jb.object.p_1.Filename=blb_tmp都无法实现,为何?该如何处理?

搜索更多相关主题的帖子: blob path gif 控件 
2006-06-21 09:01
lclqxy
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2005-6-6
收藏
得分:0 
没人给个回答吗?郁闷。
2006-06-21 13:00
niute
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-6-2
收藏
得分:0 
关于图片的存储问题,我这几天也正郁闷呢!搞不明白!
你说的用来保存图片的字段名 是blob类型,可是怎么设置该字段为blob类型啊??数据库本身没有这个blob类型供选择啊???
关于读取图片的问题,我也没弄明白,我 的 p_1控件没有放在数据窗口里,放在外面的主窗口上,也是用p_1.setpicture()也是不好使!!郁闷!

你能给我一个简单的 图片存储、读取例子代码?或者库文件??不胜感激阿!!!

我 俩交流!!!
2006-06-21 20:34
niute
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-6-2
收藏
得分:0 

还有就是如果图片保存成功 了,在数据库中图片字段里显示的是"长二进制数据“?

2006-06-21 20:40
lclqxy
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2005-6-6
收藏
得分:0 
oracle和PB9.0以上版本都有BLOB类型,估计你是用PB9以下的版本,PB9以下的版本在建立表时是没有该类型的,只有LONG RAW。但做项目一般是很少用PB来建立表的。(你好象是新手,不过很好可以共同探讨)你的P_1控件不在数据窗口中就很简单了。使用我上面的的代码就完全可以了。当你从数据库中读图片到你的p_1时只把最后一句代码改为p_1.setpicture(blb_tmp)就可以了。我上面的代码第一部分是从外部读图片到数据窗口的p_1中,如果p_1不在数据窗口中就把this.object.p_1.Filename=ls_path改为:p_1.picturename=ls_path。第二部分是把图片存储到数据库中,第三部分是从数据库中读图片到数据窗口中的p_1.
2006-06-22 09:22
lclqxy
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2005-6-6
收藏
得分:0 
哦,我想起来了,你说的数据窗口不能选择BLOB字段可能是说在建立数据窗口时从表中选择字段时没有出现BLOB字段吧?如果是这样那很正确,因为数据窗口的读数据的SQL是使用select而BLOB字段是使用selectblob来读,所以在建立数据窗口时肯定是不出现BLOB字段的。BLOB字段是需要单独处理的,我上面不是简单的说了吗。保存数据窗口数据是使用update(),而blob字段是用updateblob(),所以保存也要单独处理。
2006-06-22 09:36
ヤ順祺冄繎ヤ
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:3032
专家分:0
注 册:2005-11-9
收藏
得分:0 

我觉得应该要用到OLE控件.

我在网上找到一些资料都是说OLE控件..

前些天..

我可以将图片保存到数据库,也能用PIC控件来显示...

只是用DW里不能显示..

到现在我又在忙其他的..

没去研究这东西了..

有空再来看看..

2006-06-22 11:59
lclqxy
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2005-6-6
收藏
得分:0 

我现在研究得知:PB是不支持BLOB类型的,只支持longraw\raw\nvachar2三种类型,所以在建表时字段不能使用blob类型,一般是longraw类型。如果是静态图片使用图片控件是很方便的,ole也可以实现但效果不好,用户操作比较麻烦,且ole调入的图象颜色失真的厉害。
对于照片等小图片我认为还是用图片控件好,现在我只要解决如何把数据库中的图片读到数据窗口中的图片控件中就行了。

如果有朋友知道如何做请告诉我,万分感谢!

2006-06-22 16:54
ヤ順祺冄繎ヤ
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:3032
专家分:0
注 册:2005-11-9
收藏
得分:0 
PB不支持BLOG类型?

我感觉到不会啊.你用的是什么数据库(笨了.看nvachar2就知道是什么数据库了),

SQL Server就可以实现.

我也是能保存到数据库中.

就是读不出来.
2006-06-22 17:04
niute
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-6-2
收藏
得分:0 
pb支持blob,我是新手。用pb9
用access只能设置ole类型!
楼主你说的很对,我今天实现存储与读取了!
2006-06-22 20:09
快速回复:[求助]pb处理图片(急呀!)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026122 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved