现在公司要求用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级别的话会要些时间~~
------解决方案--------------------