为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

PB中保存图片

2018-08-23 7页 doc 22KB 62阅读

用户头像

is_321575

暂无简介

举报
PB中保存图片PB中保存图片 //**************************************************************** “选择”按钮代码: lb_image = gf_open_pic(p_1,lb_image) p_1.setpicture(lb_image) //*************************************************************** “清除”按钮代码: p_1.picturename = '' p_1.picturenam...
PB中保存图片
PB中保存图片 //**************************************************************** “选择”按钮代码: lb_image = gf_open_pic(p_1,lb_image) p_1.setpicture(lb_image) //*************************************************************** “清除”按钮代码: p_1.picturename = '' p_1.picturename = ''//(清除控件图片此需要两次,这个我一直没弄明白为什么) setnull(lb_image) //*************************************************************** 函数gf_open_pic: ////////////////////////////////////////////////////////////////// //Add by Jeffrey Jiang on 2001.11.13 //选择图片 ///////////////////////////////////////////////////////////////// //Modfiy by Jeffrey Jiang on 2001.11.15 //当图片字节大于32765时,循环读图片 ///////////////////////////////////////////////////////////////// integer li_file,li_ret,loops,i string ls_file,ls_path blob lb_small long flen,bytes_read,new_pos //search the file li_ret = getfileopenname("选择图片文件",ls_path,ls_file, &"BMP","图片文件 (*.BMP),*.BMP") if li_ret = 1 then p_1.picturename = '' p_1.picturename = '' setnull(lb_image) if li_file <> -1 then // Set a wait cursor setpointer(hourglass!) flen = filelength(ls_file) li_file = fileopen(ls_path,streammode!,read!,lockread!) // Determine how many times to call FileRead 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 for i = 1 to loops bytes_read = fileread(li_file,lb_small) if i = 1 then lb_image = lb_small else lb_image = lb_image + lb_small end if next // close the file fileclose(li_file) end if end if return lb_image //*************************************************************** 保存按钮代码: UPDATEBLOB "person" SET "person"."PHOTO" = :lb_image WHERE "person"."C_ID" = :ls_c_id USING SQLCA; IF sqlcadoor.SQLNRows > 0 THEN commit using sqlca; END IF //*************************************************************** 显示图片: lb_image = f_select_pic(ls_c_id) p_1.setpicture(lb_image) //*************************************************************** f_select_pic函数: blob lb_image setnull(lb_image) selectblob "person"."PHOTO" into:lb_image from "person" where "person"."C_ID"=:ls_c_id using sqlca; return lb_image //************************************************************** //数据库的字段根据自己的需要更改~~~~~ //************************************************************* //***************************************************************************** 有人问到,如何清除数据库中的图片而不删除该条记录,操作如下: 保存图片到数据库要用UPDATEBLOB: UPDATEBLOB "M" SET "M"."PHOTO" = :ib_image WHERE "M"."C_ID" = :ls_c_id ; 只删除图片而不删除记录要用UPDATE: UPDATE "M" SET "M"."PHOTO" = null WHERE "M"."C_ID" = :ls_c_id ; (数据库字段根据自己的做更改~) 之前提供的gf_open_pic()函数说明: 由于PowerBuilder提供的fileread()函数每次只能读出字节小于32765的图片,当图片 大于32765时,我提供的gf_open_pic()函数循环读图片 如果你PB的版本是8,请升级到PB803,PB8对图片处理有BUG, 这仅仅是我使用过程中发现的,如果大家碰到图片保存不了,建议升级~ 如果你的数据库是sql server 2000 保存图片程序就死了,请按照一下方法: 在你执行这个语句前加上这句看看: sqlca.AutoCommit = Ture updateblob table set pic=:lb_picture where id=:id using sqlca; 我按您的语句写的,如下: UPDATEBLOB sqrz SET pic = null WHERE prvid=:ls_prvid and oprid=:ls_oprid and rzdate=:ld_rzdate; 但是一保存就出下面的提示,不知为何,数据库中的该字段也是允许为空的,我的PB7.0+Sql Server 2000,望赐,非常急! 晕~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 我第一楼的帖子不是有解决马,,,,,,,,,,,,,,,,,,,, //***************************************************************************** 有人问到,如何清除数据库中的图片而不删除该条记录,操作如下: 保存图片到数据库要用UPDATEBLOB: UPDATEBLOB "M" SET "M"."PHOTO" = :ib_image WHERE "M"."C_ID" = :ls_c_id ; 只删除图片而不删除记录要用UPDATE: UPDATE "M" SET "M"."PHOTO" = null WHERE "M"."C_ID" = :ls_c_id ; (数据库字段根据自己的做更改~) 对不起,版主,我没有看清,现在可以了,不过还有个问,就是PB数据窗口中的Picture控件中的图片,在指向一个大于100K左右的文件是,出现非法操作,不知为何? 之前提供的gf_open_pic()函数说明: 由于PowerBuilder提供的fileread()函数每次只能读出字节小于32765的图片,当图片大于32765时,我提供的gf_open_pic()函数循环读图片 保存按钮代码: UPDATEBLOB "person" SET "person"."PHOTO" = :lb_image WHERE "person"."C_ID" = :ls_c_id USING SQLCA; IF sqlcadoor.SQLNRows > 0 THEN commit using sqlca; END IF 问一下版主,这个where 条件是什么啊, pb6.5中怎么不认识sqlcadoor? where使用你需要更新的记录所满足的条件 sqlcadoor 是我程序中的事务对象,你改成你的事务啊~默认的是SQLCA 昕晨,我用你的方法可以保存图片,但不知道为何从数据库中读出图片时却不行,不能显示, 不知道有什么地方不对,我用调试方法查看运行过程,blob变量不为空,证明是已经读出来 了,但用p_1.SetPicture(lb_pic)却显示不了。好郁闷。 UPDATEBLOB "person" SET "person"."PHOTO" = :lb_image WHERE "person"."C_ID" = :ls_c_id USING SQLCA; IF sqlcadoor.SQLNRows > 0 THEN //这一步你跟踪没有,是不是这里保存就失败了 在你执行这个语句前加上这句看看: sqlca.AutoCommit = Ture updateblob table set pic=:lb_picture where id=:id using sqlca; 成功了,原来是没有加SQLCA.AutoCommit=True,那么我想问一下,long binary倒底能保存 多大的图片,就是说字段长度为多少, ;replyid=50&id=50&page=1&skin=0&Star =4
/
本文档为【PB中保存图片】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索