pb存取图片的问题

rain_fh 2011-12-13 03:48:27
我在数据窗口中使用ole调用画图程序,对图片进行处理,可以打开画图,但是编辑完成之后,进行更新保存,就会提示“不能更新客户端”,试了好多次都不能解决,不知道是什么问题,请高手给个解答。
...全文
232 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
灰色轨迹 2011-12-14
  • 打赏
  • 举报
回复
汗,学一招吧,发不好了
灰色轨迹 2011-12-14
  • 打赏
  • 举报
回复
https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif
PB菜鸟 2011-12-14
  • 打赏
  • 举报
回复
根据您的描述,你的代码实现的是读取和写入图片信息到数据库。跟修改图片没关系的。
fcsfjh 2011-12-13
  • 打赏
  • 举报
回复
现以一个实例介绍图像直接存入数据库及其显示、打印的方法,实例的环境为PB和ORACLE数据库。
⑴ 建立两个表:
职工信息表emp_info
列名 类型 长度 内容
Emp_ID Number 4 职工号
Name Char 8 姓名
Sex Char 1 性别
...
表 1


职工照片表emp_photo
列名 类型 长度 内容
Emp_ID Number 4 职工号
Photo Long raw 照片
表 2
它们都以emp_ID作关键字,类型long raw可以用来存储照片数据。

⑵ 在应用系统主程序中连接数据库。定义全局变量integer g_emp_ID,表示要处理照片的职工号。新建一窗口w_photo,定义窗口的实例变量:
blob I_photo //存放照片数据
int fp //文件指针
⑶ 图像存储
将经过扫描、转换为JPG格式文件的职工照片存放在目录中。现在处理如何将照片存入职工照片表emp_photo中:
在窗口中建立一按钮cb_store ,click事件程序编写如下:
string ls_path_filename,ls_filename

getfileopenname('选择照片文件',ls_path_filename,ls_filename,"JPG","JPG Files(*.JPG),*.JPG")
if ls_filename='' then return

fp=fileopen(ls_path_name,streammode!) //打开JPG照片文件
fileread(fp,i_photo) //照片数据存入blob类型I_photo变量中
fileclose(fp) //照片的JPG文件容量很小,只读取最多64KB的数据
//照片数据存入职工照片表中
updateblob emp_photo set photo=:i_photo where emp_ID=:g_emp_ID ;

if sqlca.sqlcode= -1 then
ROLLBACK;
messagebox('出错信息','照片存储失败!')
else
commit;
end if
⑷ 图像显示
职工照片要求和职工信息一起显示、打印。在窗口中建立一数据窗口控件dw_1,然后利用数据窗口画笔以freeform风格新建一数据窗口dw_emp_info,它以职工号为参数检索emp_info(职工信息表)的数据:职工号和姓名。为处理照片显示和打印,在数据窗口中建立一个OLE对象,在出现的“inert object”(插入对象)对话框中,选中“insert control”单选钮,在“control type”控件选择列表框中找到“Microsoft Web浏览器”,选中它,然后按确定按钮,在该对象name属性中输入ole_photo,然后按确定。这时在数据窗口中增加了一个矩形对象,这就是显示照片的对象。调整该对象的大小,使能容纳实际照片大小。如图1所示:







图 1
设置dw_1的Datawindow Object Name 属性为dw_emp_info。在窗口open事件中编写如下程序:
dw_1.settransobject(sqlca)
dw_1.retrieve(g_emp_ID)
在窗口中建立一按钮cb_display,实现图像显示,click事件程序如下:
//从照片表中取出照片数据
selectblob photo into :i_photo from emp_photo
where emp_ID = :g_emp_ID;
//建立临时文件
fp=fileopen('c:\~~temp_photo.jpg',streammode!,write!,lockreadwrite!,replace!)
if fp= - 1 then
messagebox('出错信息','JPG临时文件建立失败')
return
end if
//建立JPG 照片文件
filewrite(fp,i_photo)
fileclose(fp)
//在数据窗口中显示照片
dw_1.object.ole_photo.object.navigate('c:\~~temp_photo.jpg')

⑸ 图像打印
在窗口中建立一按钮cb_print,click事件如下:
dw_1.print()
利用数据窗口的打印函数即可将职工信息和照片一起打印出来。
4.结束语
从上述实例可见,该方法使用文件函数处理JPG照片文件和BLOB类型内存变量之间的数据转换,由BLOB变量向数据库存贮或读取照片数据,由Microsoft Web浏览控件实现JPG文件的显示和打印,如图2。











图 2
该方法快速有效,实现了JPG图像文件的数据库存储、显示、打印。数据库检索照片的速度大大快于文件系统;在网络运行的应用系统中大大减轻了网络负载,提高了速度;也大大节省了数据库存储容量。图2所示处理方法同样适用于采用支持WEB浏览控件的开发工具和支持长二进制数据存储的数据库的应用系统。

wixinyoyo 2011-12-13
  • 打赏
  • 举报
回复
LZ没把问题讲清楚,什么是“不能更新客户端”
这个OLE又是什么

这个提示应该是你程序里的一个messagebox 你这样讲我们很难帮你

752

社区成员

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

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