(急)SQL SERVER数据库中存储BLOB类型数据,在线等

gincemi6 2010-10-14 03:12:39
现在公司要求用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中已经读取了文件,不知道什么原因...求高人解决......在线等...
...全文
427 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_8_l 2010-10-14
  • 打赏
  • 举报
回复
用fileread把你的图片读到blob中,最关键的是要根据图片的大小分段,依据32,765 bytes分段循环就可以了,最终用updateblob更新到数据库
xiaobn_cn 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gincemi6 的回复:]
是不是只能存放BMP格式的图片?我用的是JPG的...
[/Quote]
对于数据库的image列,是不区分你存储的图像文件的类型的,也就是说你使用什么类型文件对于数据库没有影响。
gincemi6 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pb8 的回复:]
程序中有几个问题
一、在getfileopenname之类的函数后,要重置一下程序的当前目录,否则有些代码会有问题,因为程序的当前目录已经改成你选择的这个文件所在的目录了;
二、对于blob数据,在更新的时候最好使用autocommit方式
sqlca.autocommit=true
UPDATEBLOB BG_GZLXR SET f_qm = :ls_blob WHERE f_GRBH=……
[/Quote]
谢谢了,看来就是图片位置的问题~可是存储之后提示数据转换溢出...是不是只能存放BMP格式的图片?我用的是JPG的...
pb8 2010-10-14
  • 打赏
  • 举报
回复
程序中有几个问题
一、在getfileopenname之类的函数后,要重置一下程序的当前目录,否则有些代码会有问题,因为程序的当前目录已经改成你选择的这个文件所在的目录了;
二、对于blob数据,在更新的时候最好使用autocommit方式
sqlca.autocommit=true
UPDATEBLOB BG_GZLXR SET f_qm = :ls_blob WHERE f_GRBH=:is_yhbh;
sqlca.autocommit=false

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

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧