图片数据是以blob类型放在数据库中的
1、用picture控件显然不行,因为bitmap要求指定路径!
当然,如果每页只显示一个图片用程序脚本可实现!
1)读出数据库内blob数据
2)写入到窗口中的picture控件
3)保存图片到指定的临时文件如aaa.bmp
4)在数据窗口中picture的控件指定picturename = aaa.bmp
总的来说这样还是不太方便
2、用DB OLE控件可实现,主要还要设置表名、列名、KEY CLAUSE、OLE CLASS和CLIENTNAME expression
例如:其中的key clause则可写id = :id
ole class 则选择 PBrush 画笔图片
classname expression则写 "object"
这里的id指要显示的表相关的ID
建议楼主使用第2种方法
备注:
注意图片不要太大,因为保存在数据库中的图片文件读取但对系统性能有影响(如果图片太大),并且使用OLE虽然方便但PB与OLE的兼容性一直受到大家的致疑! 所以所保存的图片不应太大!
方法一的代码:
图片临时存放在图片路径下:
先读出来的
blob emp_id_pic
SELECTBLOB picture
INTO :emp_id_pic
FROM scanimg
WHERE picID = :sz_PicID
USING SQLCA ;
在临时写入一个路径下:
如:
ll_filelen=len(emp_id_pic)
setnull(emp_id_pic)
emp_id_pic=as_blob
ls_server_path="d:/ls" //临时存放的图片路径
ls_downfile=ls_server_path
//计算读文件的次数,不能一次大于32K的数据
if ll_filelen>32766 then
if mod(ll_filelen,32766)=0 then
li_loops=ll_filelen/32766
else
li_loops=(ll_filelen/32766) + 1
end if
else
li_loops=1
end if
ls_filename=mid(ls_filename,4,len(ls_filename))
//写文件
li_FileNum = FileOpen(ls_downfile,StreamMode!, Write!, Shared!, Append!)
ll_bytes_read=FileWrite(li_FileNum,emp_id_pic)
for li_counter=2 to li_loops
ll_new_pos=ll_bytes_read*(li_counter - 1) + 1
ll_new_pos=ll_bytes_read*li_counter
data_ls = BlobMid(emp_id_pic,ll_bytes_read*(li_counter - 1) + 1,ll_bytes_read*li_counter)
ll_new_pos=FileWrite(li_FileNum,data_ls)
next
fileclose(li_filenum)
//最后
dw_1.object.p_1.Filename='d:/ls/temp.bmp'
字段值应为全路径名:如:c:/mydocu~1/mypict~1/1.bmp
图片格式:仅能用BMP
路径名:DOS 8。3格式
任意控件,在general页选取display as picture