当前位置: 代码迷 >> PB >> (急)SQL SERVER数据库中存储BLOB类型数据
  详细解决方案

(急)SQL SERVER数据库中存储BLOB类型数据

热度:14   发布时间:2016-04-29 08:51:34.0
(急)SQL SERVER数据库中存储BLOB类型数据,在线等
现在公司要求用PB6.5+SQL server 2000修改程序,我想把图片存储到数据库中,数据库的列数据类型为IMAGE,在PB中,利用OLE控件来往数据库里写数据,选择文件与数据写入的代码如下:

string vsfiledir,vsfilename,vswjgs,is_zjbh,is_yhbh,isfiledir,isfilename
integer vifile

//vifile = GetFileOpenName("Select File",vsfiledir,vsfilename,"jpg","jpg Files (*.jpg),*.jpg, bmp Files (*.bmp),*.bmp")

vifile = GetFileOpenName("选择文件:",vsfiledir,vsFilename)

IF vifile = 1 THEN 
isfiledir = vsfiledir
isfilename=vsfilename
else
return 
end if

If tab_1.tp_lxr.ole_pic.insertfile(vsfiledir) <> 0 Then 
Messagebox('提示','打开文件失败,请检查该文件格式是否正确!')
return 
end if




string vtzbh
int vlrow
blob ls_blob

vlrow=row
is_zjbh=tab_1.tp_lxr.dw_1.getitemstring(vlrow,'f_DWBH')
is_yhbh=tab_1.tp_lxr.dw_1.getitemstring(vlrow,'f_GRBH')

if len(isfiledir)>0 then
  ls_blob=tab_1.tp_lxr.ole_pic.objectdata
  UPDATEBLOB BG_GZLXR SET f_qm = :ls_blob WHERE f_GRBH=:is_yhbh;
  if SQLCA.SQLCode = -1 then
MessageBox("系统错误",SQLCA.SQLErrText)
return
  end if
end if
commit;
//dw_1.retrieve()
cb_3.triggerevent(Clicked!)
messagebox('提示','签名增加成功!')

进行调试,运行到updatablob一行的时候,程序出现未响应,等很长时间还是没反应,但是可以看到OLE控件ole_pic中已经读取了文件,不知道什么原因...求高人解决......在线等...

------解决方案--------------------
程序中有几个问题
一、在getfileopenname之类的函数后,要重置一下程序的当前目录,否则有些代码会有问题,因为程序的当前目录已经改成你选择的这个文件所在的目录了;
二、对于blob数据,在更新的时候最好使用autocommit方式
sqlca.autocommit=true
UPDATEBLOB BG_GZLXR SET f_qm = :ls_blob WHERE f_GRBH=:is_yhbh;
sqlca.autocommit=false

你的文件大小是多少,如果只有几十k的话应该快,如果是M级别的话会要些时间~~

------解决方案--------------------
探讨
是不是只能存放BMP格式的图片?我用的是JPG的...
  相关解决方案