- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PB对Oracle中图片进行存取初探
2006-08-28 17:51
没想到用PB对Oracle进行图片的存取会如此麻烦。以前只知道PB这个开发工具有很大问题,然而这次,问题恐怕出在Oracle身上。原本想用Oracle提倡的BLOB类型处理图片,几经试验,最终还是无果而终。后来不得不用LONG RAW类型代替之。即便如此,使用LONG RAW还是出现了不明原因的错误。以下描述不够详尽,只给出个大概的解决方案,不过对于一般的图片处理已经足够了。希望我能够进一步研究出更好的解决方案来,并早日攻破BLOB类型的难关!*******************************************************************************************使用如下语句在Oracle中创建一张表person_photo:CREATE TABLE person_photo(id varchar2(8) PRIMARY KEY NOT NULL,photo LONG RAW);
设置PB连接好相关数据库,在PB中建立一个窗口w_test。上面放置一个Picture控件,命名为p_1。再放置3个CommandButton控件,分别命名为cb_add,cb_modify,cb_delete。假设窗口w_test刚刚打开的时候会获得一个实例变量String is_id。-------------------------------------------------------------------------------------------在窗口w_test的open事件中添加如下代码:
Blob lb_picSELECTBLOB photoINTO :lb_picFROM person_photoWHERE id = :is_id;IF SQLCA.SQLCODE = -1 THEN?MessageBox(提示,初始化照片信息失败!)?ROLLBACK;?RETURN 0END IF
IF SQLCA.SQLCODE = 0 THEN?this.cb_add.enabled = FALSEEND IF
IF SQLCA.SQLCODE = 100 THEN?this.cb_modify.enabled = FALSE?this.cb_delete.enabled = FALSEEND IFp_1.SetPicture(lb_pic)-------------------------------------------------------------------------------------------在按钮cb_add的clicked事件中添加如下代码:
String ls_filepath,ls_filenameInteger li_numli_num = GetFileOpenName(请选择照片,ls_filepath,ls_filename,BMP,Bitmap Files (*.BMP),*.BMP)IF li_num = 0 THEN?RETURN 0END IF
integer li_FileNum, loops, ilong flen, bytes_read, new_posblob b, tot_b ,lb_t// Set a wait cursorSetPointer(HourGlass!)// Get the file length, and open the fileflen = FileLength(ls_filepath)li_FileNum = FileOpen(ls_filepath, ?StreamMode!, Read!, LockRead!)// Determine how many times to call FileReadIF flen 32765 THEN?IF Mod(flen, 32765) = 0 THEN??loops = flen/32765?ELSE??loops = (flen/32765) + 1?END IFELSE?loops = 1END IF// Read the filenew_pos = 1FOR i = 1 to loops ?bytes_read = FileRead(li_FileNum, b)?tot_b = tot_b + bNEXTFileClose(li_FileNum)
//由于不明原因,下面这条语句有时会出错,可以改为:INSERT INTO person
文档评论(0)