高分求解关于使用ole存取文件的问题
为什么用fileopen循环读取(因为可能大于32K)的文件存入数据库后,检索出来用ole_1.objectdata=变量就会报runtime错误???存进去和取出来时我都用len(blob变量)查看了变量长度都是一样的,说明存入和取出没有问题啊.而且最奇怪的是:这种错误只是针对于autocad文件,其它的如word\excel都没有问题.
后来被迫换成用ole_1.insertfile(路径)这种方式,然后获取ole_1的objectdata来存入,这时候用ole_1.objectdata来取出就没有任何问题了.可是,新的问题出来了:用insertfile速度相当慢,且插入一个cad文件时会自动调用autocad文件来打开它(ole属性的激活方式设置为双击打开的),也只有cad文件会自动打开,其它文件都不会.
郁闷死了,我该怎么办????
//测定文件长度
ll_len = FileLength(dw_1.object.fpath[ll_row])//文件路径
li_ii = ceiling(ll_len/32765)//得到文件块数
//读取文件
setnull(lb_b)
fh = FileOpen(dw_1.object.fpath[ll_row],StreamMode!,READ!,LOCKREAD!)//LineMode!
IF fh <> -1 THEN
for ii = 1 to li_ii//为读取大于32k的文件,循环读取文件块
FileRead (fh, lb_fn)
if ii=1 then
else
lb_b = lb_b + lb_fn
end if
next
if isnull(lb_b) then
rollback;
messagebox('提示1','读取第['+string(ll_row)+']行的文件错误!')
return
end if
lb_b=ole_1.objectdata
sqlca.autocommit=true
UPDATEBLOB t_file SET fcontent = :lb_b
WHERE fid = :ll_id ;//ll_id是另外赋值的
sqlca.autocommit=false
FileClose(fh)
IF sqlca.SQLNRows <= 0 THEN
rollback;
messagebox('提示','保存文件错误!请检查网络连接状况!')
return
END IF
上面是写入代码
用selectblob取出后filewrite成文件再用应用程序打开编辑都没有问题.
听说如果要用ole.objectdata=blob变量的话,就一定要在存入的时候使用 blob变量=ole.objectdata,而用这种方式存入的话就一定要用insertfile,而用insertfile就必然很慢,而且cad(只有cad,其它文档不会)会在insertfile时自动用cad程序来打开这个文件.
有没有其它方法啊????郁闷死了............
我的环境是windows2000+pb9.0,数据库使用sqlserver
实在是没有办法了,盼望高人相救!