hur.cn - 华软网

 热门搜索

如何在数据窗口中显示大文本字段的图片

  作者:未知    来源:网络    更新时间:2019/4/16
int li_filenum,li_loops,li_counter
long ll_filelen,ll_bytes_read,ll_new_pos
blob lb_our_blob,lb_tot_blob
string ls_path,ls_filename,str_1
str_1='条件'
getfileopenname("选择图片资料打开",ls_path,ls_filename, "bmp", "(*.bmp),*.bmp,(*.jpg), *.jpg,(*.gif), *.gif")
if ls_filename="" then return
ll_filelen=filelength(ls_path)
li_filenum=fileopen(ls_path,streammode!,read!,lockread!)
if ll_filelen>32765 then
if mod(ll_filelen,32765)=0 then
li_loops=ll_filelen/32765
else
li_loops=(ll_filelen/32765)+1
end if
else
li_loops=1
end if
for li_counter=1 to li_loops
ll_bytes_read=fileread(li_filenum,lb_our_blob)
lb_tot_blob=lb_tot_blob+lb_our_blob
ll_new_pos=ll_new_pos+ll_bytes_read
fileseek(li_filenum,ll_new_pos,frombeginning!)
next
fileclose(li_filenum)
sqlca.autocommit = TRUE
//updateblob xx set photo=:lb_tot_blob where bm = :str_1 using sqlca;
updateblob t_qz set qz=:lb_tot_blob where yh_id ="AO100363" using sqlca;
//xx为表 photo 为表种的字段 图片型 bm为主健
sqlca.autocommit = FALSE
if sqlca.sqlcode=0 then
commit;
else
rollback;
messagebox("","不能更新数据库.")
end if

//sql server2000中字段为image
我现在如何显示出来
blob bl_1,bl_2
SetNull(bl_2)
selectblob qz into :bl_2 from t_qz where yh_id="AO100363";
dw_1.object.p_1.setpicture(bl_2)
这样好像不行,请问如何显示呀。
------华软网友回答------
代码没有什么问题,你能够先这样试试,选择图片后,先不更新数据库,直接用dw_1.object.p_1.setpicture(lb_tot_blob),看看是否显示图片,如果显示说明是更新数据库时有问题了,在排查一下吧!

------华软网友回复------
数据库更新是成功的,我在窗口中用p_1.setpicture(lb_tot_blob)没问题在数据窗口中用dw_1.object.p_1.setpicture(lb_tot_blob)提醒访问外部对象属性毛病,也就是在数据窗口下不能这样用,我该怎么用呀。
------华软网友回复------
数据窗口放置图片字段〗

 

我现在建了一个表,用MS SQL7,其中包括一个图像列,运用datawindow是不允许选择该列,提醒需要运用内嵌sql,我该怎么办?如何显示它?如果运用sqlanywhere呢?如何在数据库中运用图像?

 

回复:

  要在数据窗口中创建一个OLE列,首先要有一个包括Blob数据类型的表,其数据类型在不同的DBMS中有一定的差异:在SQL Anywhere 中是Long binary;在SQL Server中是Image.

  其次,在选择数据源时,PB不允许指定Blob列,要在以后才能加入:在进入数据窗口可视设计时,找到菜单Objects下的OLE Database Blob(PB 6.5中),选中它,在需要放置Blob对象的地方单击,接着就会出现Blob对象的属性页,设置好以后就能够用了.

 

------华软网友回复------
总觉得这些问题都是自身代码或有时不小心酿成的
照旧仔细查一下好了
------华软网友回复------
我自己用selectblob
然后用fileopen
filewrite
最后用dw_1.object.p_1.filename="资料名"
解决了一部份问题,但如果要对不同的记录显示不同图片要怎么做呀。
------华软网友回复------
数据窗口中的picture没有setpicutre()函数! 所以你不能这样用. 
你现在只好把blob写到当地临时资料中,然后修改 dw_1.object.p_1.filename="资料名" 

sybase 为什么不把 dw中的picture 做成与 一般的picture 一样的功能,这点很难理解. 比如setpicutre,originalsize等都是很重要的功能,但dw中的picture却没有!
------华软网友回复------
用Display As Pic option 列属性,

dw_1.Modify("piccol.FileName=Yes")

select ...., '' as piccol from ....

图片在当地生成临时资料 dwtmp0001.bmp, dwtmp0002.bmp, ...

dw_1.object.piccol[1] = "dwtmp0001.bmp"
dw_1.object.piccol[2] = "dwtmp0002.bmp"
...

能够思量加上资料路径



------华软网友回复------
赞成楼上
------华软网友回复------
或图片控件


dw_1.Modify("p_1.Filename='~"~" exp'")

exp能够是列名或是计算公式:~"dwtmp_~"+keycol+~".bmp~"
------华软网友回复------
关注
------华软网友回复------
咱们老大搞定了,如果我看到代码,我就发上来...
------华软网友回复------
掏出blob生成图片资料

然后用p_1.filename='XXX.xxx'
------华软网友回复------
1。selectblob 掏出图片资料
2。fileopen 创建并打开临时寄存的图片资料
li_FileNo = FileOpen("c:\temp.jpg", StreamMode!, Write!, LockReadWrite!, Replace!)
3。取资料长度。
ll_BlobLen =Len(blob_data)
   If ll_BlobLen > 32765 Then
If Mod(ll_BlobLen, 32765) = 0 Then
li_Writes = ll_BlobLen / 32765
Else
li_Writes = (ll_BlobLen / 32765) + 1
End if
Else
li_Writes = 1
End if

4.写入
ll_pos = 1
For i= 1 To li_Writes
lblb_Data = BlobMid(blob_data, ll_Pos, 32765)
ll_pos += 32765
If FileWrite(li_FileNo, lblb_Data) = -1 Then
FileClose(li_fileno)
Return false
End if
Next
5.显示
ls_path="c:\temp.jpg"
dw_1.modify("p_1.filename ='"+ls_path+"'")

------华软网友回复------
如果没有存路径,是存到了blob里面,然后掏出数据库中blob的数据,放到dw中在显示出来~??

就是后面的怎么放到dw的响应控件显示出图片~
------华软网友回复------
如果没有存路径,是存到了blob里面,然后掏出数据库中blob的数据,放到dw中在显示出来~??

就是后面的怎么放到dw的响应控件显示出图片~
----------------------------------

按照ribut9225(幽灵庄主) 给出的方法就能够解决      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。