hur.cn - 华软网

 热门搜索

请问图片是怎样存储在数据库中的(能否提供一个小例子!)在线等

  作者:未知    来源:网络    更新时间:2017/12/5
请问图片是怎样存储在数据库中的(能否提供一个小例子!)
谢谢!!!
------华软网友回答------
http://community.csdn.net/Expert/topic/3794/3794844.xml?temp=.7985956
------华软网友回复------
图片存储在数据库中一般有两种方式:
1、可以在数据库表中建立一个以图片存储路径为内容的列,类型为string,这种方法使用与把图片资源放在服务器机子上的指定文件夹下。用户可以操作该图片资源,如删除、移动。
2、把图片当作一个大二进制类型blob保存在数据库表中,然后使用特定的SQL语句来操作图片资源。
特点:selectblob选择图片列   updateblob更新图片列
------华软网友回复------
string ls_path_filename,ls_filename

getfileopenname('选择照片文件',ls_path_filename,ls_filename,"JPG","JPG Files(*.JPG),*.JPG")
if ls_filename='' then return

fp=fileopen(ls_path_name,streammode!) //打开JPG照片文件
fileread(fp,i_photo)  //照片数据存入blob类型I_photo变量中
fileclose(fp)   //照片的JPG文件容量很小,只读取最多64KB的数据
//照片数据存入职工照片表中
updateblob emp_photo set photo=:i_photo where emp_ID=:g_emp_ID ;

if sqlca.sqlcode= -1 then
ROLLBACK;
messagebox('出错信息','照片存储失败!')
else
commit;
end if
------华软网友回复------
特定SQL语句来操作图片数据,从数据库中提取出指定图片来显示到图片控件中。
selectblob picture
into :lb_picture
from picture
where zt=:sle_1.text;

p_1.SetPicture(lb_picture)

------华软网友回复------
但P_1是数据窗口中的一个字段,怎么处理显示的问题?
------华软网友回复------
再引用一个高手的例子:
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语句中的表名和字段名改为你的就行了
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。