hur.cn - 华软网

 热门搜索

如何从ORACLE数据库中取出相片数据并显示在数据窗口dw_2的P_1中

  作者:未知    来源:网络    更新时间:2018/1/1
急,请高手指点!!
------华软网友回答------

在窗口的open事件里面
数据窗口retrieve之后
添加代码

//显示照片的代码
blob lb_picture

SELECTBLOB teac_phot 
INTO :lb_picture
FROM teac_ext
WHERE teac_num = :teac_num; 

//显示图片
p_1.SetPicture(lb_picture)
------华软网友回复------
谢谢
可说的不是这样的
是数据窗里的dw_1中的p_1
怎么办
------华软网友回复------
不知道你的图片对象数据在数据库表中是怎么存储的,如果图片数据格式不是以blob格式存储在数据库中,而是以图片相对路径/图片名称(也就是字符串格式)存储在数据库中,那它就和其他数据类型的字段操作是一样的,直接用数据窗口对象选择需要的列,之后就可以用:
dw_**.settransobject(SQLCA)
dw_**.retrieve() //如果有检索参数,那就用retrieve(参数列表)

------华软网友回复------
是以blob格式存在数据库中的,怎么办?请指点!
------华软网友回复------
http://search.csdn.net/search.asp?key=%B1%A3%B4%E6%CD%BC%C6%AC&class=PowerBuilder&size=10&option=advance&x=57&y=10
------华软网友回复------
能不能直接把源码写出来,谢谢!积累一点进步一点!!
------华软网友回复------
引用一下高手的例子:
sql server2000数据库

保存图片的字段使用image类型

在pb中用fileread()函数把图片读到一个blob型变量中,然后使用
updateblob语句把保存图片的blob型变量存到数据库中
保存image类型的变量要注意两点
1.autocommit属性要设者为true (sqlca.autocommit=true ) 
 2.保存image型数据的表中一定要有主键,即表中要现有记录存在,而且该条记录
 是唯一的,别且拥有主键。

一个保存图片的例子:

integer li_fh, li_ret, li_value
blob blob_reader_pic,blob_temp
string ls_pathname,ls_iccard_id, ls_no
string  docname, named, ls_path
long ll_length,ll_size, ll_i, ll_rowcount,ll_row
long ll_len_docname, ll_len_named

sqlca.autocommit = true

li_value = GetFileOpenName("读取照片",docname, named, "jpg","*.jpg,*.jpg,")
if li_value <> 1 then return
ll_len_docname = len(docname)
ll_len_named = len(named)
ls_path = left(docname, ll_len_docname - ll_len_named)


ll_rowcount = dw_2.rowcount() 
for ll_row=1 to ll_rowcount
 sle_1.text=string(ll_row)+"/"+string(ll_rowcount)
 ls_no=trim(dw_2.object.vc_reader_no[ll_row])
 ls_pathname= ls_path +ls_no+ ".jpg"
 ll_length=filelength(ls_pathname) //检查图片是否大于32765,因为fileread一次只能读32765 
    
 if ll_length>0 then //文件存在
 if ll_length<32765 then //如果小于32765,就可以马上读出来 
 li_fh = FileOpen(ls_pathname, StreamMode!, read!, Shared!, Replace!)
 if li_fh <> -1 and not isnull(li_fh) then
 FileRead(li_fh, blob_reader_pic)
 FileClose(li_fh)
 end if
 else //当文件大于32765时 
 ll_size=ll_length/32765+1 //计算出fileread要花几次读出 
 li_fh = FileOpen(ls_pathname, StreamMode!, read!, Shared!, Replace!)
 if li_fh <> -1 then
 for ll_i=1 to ll_size 
  FileRead(li_fh, blob_temp) //每次读出32765字节 
  blob_reader_pic=blob_reader_pic+blob_temp //将读出的内容累加到另一个二进制文件中 
    next 
 FileClose(li_fh)
 else
 messagebox('提示','错误')
 return
 end if
 end if
   
 ls_iccard_id=dw_2.object.vc_iccard_id[ll_row]

 Updateblob readers 
 Set blb_photo=:blob_reader_pic
 Where vc_iccard_id =:ls_iccard_id;
     
 if sqlca.sqlcode = 0 then
 commit;
 else
 MessageBox("提示","更新照片出错")
    Rollback;
    END IF
 blob_reader_pic = blob("")
 else
 MessageBox("提示","文件<"+ls_pathname+">不存在!")
 end if
next

你使用的时候只需把
把sql语句中的表名和字段名改为你的就行了

------华软网友回复------
这个问题是不是很难?上面的我看不懂!?我还是没有得到我想要的!?
如何从ORACLE数据库中取出相片数据并显示在数据窗口dw_2的P_1中?
我说的不明白吗?
------华软网友回复------
PB没有这个功能吗?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。