怎样把sql server数据库中的图片显示在数据窗口中?跟贴有分!!!!!!!!
作者:未知 来源:网络 更新时间:2019/1/25
数据库:sql server 2000
表:t_employee
字段: emp_id varchar(10),photo image
数据窗口dw_total:composite类型,其中有3个子数据窗口,分别为dw_1,dw_2,dw_3
dw_2对应t_employee,在dw_2中有一图片p_1,现在想在查询的时候把对应emp_id的photo显示在dw_total
中.
该怎样做????
初学PB,谢谢大家.
跟帖有分!!!
------华软网友回答------
//掏出图片资料
selectblob photo into:lb_image from t_employee where emp_id=:ls_parm using sqlca ;
把图片从数据库中掏出之后,该怎样才能把图片放到数据窗口中的p_1中?
------华软网友回复------
picturecontrol.SetPicture ( bitmap )
------华软网友回复------
1.用DW的BLOB字段;
2.用楼上的SETPICTURE函数;
3.设置字段属性为DISPLAY AS PICTURE;
详细能够搜索一下历史帖子;
------华软网友回复------
此外PB自带的CODE EXAMPLE中有很多此类例子能够参照
------华软网友回复------
balloonman2002()
--------------------------------------------------
能不能运用间接地方法:
1)从库中读出图片的数据
2)将数据写入一个临时图片中,如c:\abc.bmp
3)dw_1.object.p_1.filename="c:\abc.bmp"
注意:用写方式打开临时图片,并采取笼罩方式写入,写完之后一定要关闭资料。
2步我不会做?怎么做?
------华软网友回复------
integer li_FileNum
blob emp_id_pic
SELECTBLOB salary_hist
INTO : emp_id_pic
FROM Employee
WHERE Employee.Emp_Num = 100
USING Emp_tran;
li_FileNum = FileOpen( &
"C:\EMPLOYEE\EMP_PICS.BMP", &
StreamMode!, Write!, Shared!, Replace!)
FileWrite(li_FileNum, emp_id_pic)
当图片巨细超过 32,766 字节时需要循环写,参照下文:
************************************************
////wf_writefile(lbb_pic,'C:\temp.bmp')
long ll_filesize,ll_loops,ll_remain
int li_filenum,i
blob lb_block
ll_filesize = len(ab_picdata)
////打开资料
li_filenum = fileopen(as_filename,StreamMode!, Write!, LockWrite!, Replace!)
if ll_filesize>32765 then
if mod(ll_filesize,32765)=0 then
ll_loops=ll_filesize/32765
else
ll_loops=ll_filesize/32765
ll_remain = mod(ll_filesize,32765)
end if
else
ll_loops=1
end if
for i=0 to ll_loops - 1
lb_block = blobmid(ab_picdata,i*32765+1,32765)
filewrite(li_filenum,lb_block)
next
//将尾部数据写入资料
if ll_remain > 0 then
lb_block = blobmid(ab_picdata,ll_loops*32765+1,ll_remain)
filewrite(li_filenum,lb_block)
end if
fileclose(li_filenum)
************************************************
详见:
http://dev.wl668.com/pb/DataWindow/20055265804_3928431.shtml
http://community.csdn.net/Expert/topic/5072/5072231.xml?temp=.6176721
------华软网友回复------
结果出来了,顶一下。
------华软网友回复------
┌──┐
│继续│ ╭───────╮
└──┘ ┏━━━━━━━┓ │ 既然有分, │
┏┓ ┏┫ |||┣┓∠ 这贴就顶了 │
┣┫ ┗┫━━ ┃ ━━┣┛ ╰───────╯
┏┳┫┣┳┓ ┃ ━━━━━ ┃
┃ ┃ ┗━━━┳━━━┛
┗━━━━┻━━━━▇▇▇┛ ()000o
┃ ┃ (````)
┃ ┃ )``/
┛ ┗━━(__/
------华软网友回复------
⊙⌒⊙
∨
------华软网友回复------
┌──┐
│继续│ ╭───────╮
└──┘ ┏━━━━━━━┓ │ 既然有分, │
┏┓ ┏┫ |||┣┓∠ 这贴就顶了 │
┣┫ ┗┫━━ ┃ ━━┣┛ ╰───────╯
┏┳┫┣┳┓ ┃ ━━━━━ ┃
┃ ┃ ┗━━━┳━━━┛
┗━━━━┻━━━━▇▇▇┛ ()000o
┃ ┃ (````)
┃ ┃ )``/
┛ ┗━━(__/
------华软网友回复------
balloonman2002()
-------------------------------------
照旧没有解决:我把代码和毛病信息贴出来,看看是什么原因酿成的?
代码:
string ls_parm
ls_parm=message.stringparm
///////////////////////////////////////////////////////
blob lb_image,lb_block
integer li_fileno,li_writes
string ls_path
long ll_filesize,ll_loops,ll_remain
int li_filenum
//////////////////////////////////////////////////////////
dw_1.settransobject(sqlca)
dw_1.retrieve(ls_parm)
//掏出图片资料
selectblob photo into:lb_image from t_employee where emp_id=:ls_parm using sqlca ;
ll_filesize = len(lb_image)
////打开资料
li_filenum = fileopen('pic\temp.jpg',StreamMode!, Write!, LockWrite!, Replace!)
if ll_filesize>32765 then
if mod(ll_filesize,32765)=0 then
ll_loops=ll_filesize/32765
else
ll_loops=ll_filesize/32765
ll_remain = mod(ll_filesize,32765)
end if
else
ll_loops=1
end if
//
for i=0 to ll_loops - 1
lb_block = blobmid(lb_image,i*32765+1,32765)
filewrite(li_filenum,lb_block)
next
//将尾部数据写入资料
if ll_remain > 0 then
lb_block = blobmid(lb_image,ll_loops*32765+1,ll_remain)
filewrite(li_filenum,lb_block)
end if
//显示图片资料
ls_path="pic\temp.jpg"
code=dw_1.getchild('dw_2',child)
child.settransobject(sqlca)
child.modify("p_1.filename ='"+ls_path+"'")
fileclose(li_filenum)
----------------------------------------------------------------------
提醒毛病:
not a jpeg file: start with 0*42 0*4d
而且作为临时资料的temp.jpg也改变了.
------华软网友回复------
图片路径毛病,请确认pic资料夹是否已经建立,或 '.\pic\temp.jpg'
------华软网友回复------
找到原因了,多谢大家帮助,结贴了。
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。
表:t_employee
字段: emp_id varchar(10),photo image
数据窗口dw_total:composite类型,其中有3个子数据窗口,分别为dw_1,dw_2,dw_3
dw_2对应t_employee,在dw_2中有一图片p_1,现在想在查询的时候把对应emp_id的photo显示在dw_total
中.
该怎样做????
初学PB,谢谢大家.
跟帖有分!!!
------华软网友回答------
//掏出图片资料
selectblob photo into:lb_image from t_employee where emp_id=:ls_parm using sqlca ;
把图片从数据库中掏出之后,该怎样才能把图片放到数据窗口中的p_1中?
------华软网友回复------
picturecontrol.SetPicture ( bitmap )
------华软网友回复------
1.用DW的BLOB字段;
2.用楼上的SETPICTURE函数;
3.设置字段属性为DISPLAY AS PICTURE;
详细能够搜索一下历史帖子;
------华软网友回复------
此外PB自带的CODE EXAMPLE中有很多此类例子能够参照
------华软网友回复------
balloonman2002()
--------------------------------------------------
能不能运用间接地方法:
1)从库中读出图片的数据
2)将数据写入一个临时图片中,如c:\abc.bmp
3)dw_1.object.p_1.filename="c:\abc.bmp"
注意:用写方式打开临时图片,并采取笼罩方式写入,写完之后一定要关闭资料。
2步我不会做?怎么做?
------华软网友回复------
integer li_FileNum
blob emp_id_pic
SELECTBLOB salary_hist
INTO : emp_id_pic
FROM Employee
WHERE Employee.Emp_Num = 100
USING Emp_tran;
li_FileNum = FileOpen( &
"C:\EMPLOYEE\EMP_PICS.BMP", &
StreamMode!, Write!, Shared!, Replace!)
FileWrite(li_FileNum, emp_id_pic)
当图片巨细超过 32,766 字节时需要循环写,参照下文:
************************************************
////wf_writefile(lbb_pic,'C:\temp.bmp')
long ll_filesize,ll_loops,ll_remain
int li_filenum,i
blob lb_block
ll_filesize = len(ab_picdata)
////打开资料
li_filenum = fileopen(as_filename,StreamMode!, Write!, LockWrite!, Replace!)
if ll_filesize>32765 then
if mod(ll_filesize,32765)=0 then
ll_loops=ll_filesize/32765
else
ll_loops=ll_filesize/32765
ll_remain = mod(ll_filesize,32765)
end if
else
ll_loops=1
end if
for i=0 to ll_loops - 1
lb_block = blobmid(ab_picdata,i*32765+1,32765)
filewrite(li_filenum,lb_block)
next
//将尾部数据写入资料
if ll_remain > 0 then
lb_block = blobmid(ab_picdata,ll_loops*32765+1,ll_remain)
filewrite(li_filenum,lb_block)
end if
fileclose(li_filenum)
************************************************
详见:
http://dev.wl668.com/pb/DataWindow/20055265804_3928431.shtml
http://community.csdn.net/Expert/topic/5072/5072231.xml?temp=.6176721
------华软网友回复------
结果出来了,顶一下。
------华软网友回复------
┌──┐
│继续│ ╭───────╮
└──┘ ┏━━━━━━━┓ │ 既然有分, │
┏┓ ┏┫ |||┣┓∠ 这贴就顶了 │
┣┫ ┗┫━━ ┃ ━━┣┛ ╰───────╯
┏┳┫┣┳┓ ┃ ━━━━━ ┃
┃ ┃ ┗━━━┳━━━┛
┗━━━━┻━━━━▇▇▇┛ ()000o
┃ ┃ (````)
┃ ┃ )``/
┛ ┗━━(__/
------华软网友回复------
⊙⌒⊙
∨
------华软网友回复------
┌──┐
│继续│ ╭───────╮
└──┘ ┏━━━━━━━┓ │ 既然有分, │
┏┓ ┏┫ |||┣┓∠ 这贴就顶了 │
┣┫ ┗┫━━ ┃ ━━┣┛ ╰───────╯
┏┳┫┣┳┓ ┃ ━━━━━ ┃
┃ ┃ ┗━━━┳━━━┛
┗━━━━┻━━━━▇▇▇┛ ()000o
┃ ┃ (````)
┃ ┃ )``/
┛ ┗━━(__/
------华软网友回复------
balloonman2002()
-------------------------------------
照旧没有解决:我把代码和毛病信息贴出来,看看是什么原因酿成的?
代码:
string ls_parm
ls_parm=message.stringparm
///////////////////////////////////////////////////////
blob lb_image,lb_block
integer li_fileno,li_writes
string ls_path
long ll_filesize,ll_loops,ll_remain
int li_filenum
//////////////////////////////////////////////////////////
dw_1.settransobject(sqlca)
dw_1.retrieve(ls_parm)
//掏出图片资料
selectblob photo into:lb_image from t_employee where emp_id=:ls_parm using sqlca ;
ll_filesize = len(lb_image)
////打开资料
li_filenum = fileopen('pic\temp.jpg',StreamMode!, Write!, LockWrite!, Replace!)
if ll_filesize>32765 then
if mod(ll_filesize,32765)=0 then
ll_loops=ll_filesize/32765
else
ll_loops=ll_filesize/32765
ll_remain = mod(ll_filesize,32765)
end if
else
ll_loops=1
end if
//
for i=0 to ll_loops - 1
lb_block = blobmid(lb_image,i*32765+1,32765)
filewrite(li_filenum,lb_block)
next
//将尾部数据写入资料
if ll_remain > 0 then
lb_block = blobmid(lb_image,ll_loops*32765+1,ll_remain)
filewrite(li_filenum,lb_block)
end if
//显示图片资料
ls_path="pic\temp.jpg"
code=dw_1.getchild('dw_2',child)
child.settransobject(sqlca)
child.modify("p_1.filename ='"+ls_path+"'")
fileclose(li_filenum)
----------------------------------------------------------------------
提醒毛病:
not a jpeg file: start with 0*42 0*4d
而且作为临时资料的temp.jpg也改变了.
------华软网友回复------
图片路径毛病,请确认pic资料夹是否已经建立,或 '.\pic\temp.jpg'
------华软网友回复------
找到原因了,多谢大家帮助,结贴了。
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。
- 上一篇文章: select语句
- 下一篇文章: 怎样在datawindow中decimal类型的字段输入空