在Oracle中取long raw字段数据时被截小,请大虾指导!!!!!?????(200分)

  • 主题发起人 主题发起人 lsh78
  • 开始时间 开始时间
L

lsh78

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用delphi5+ado+oracle8
往oracle8中的long raw字段字数据,兆级的都没问题,源代码如下:
var FileStream1:TFileStream;
Stream1:TStream;
aaa:integer;
begin
FileStream1:=nil;
Stream1:=nil;
FileStream1:=TFileStream.Create(trim(edit2.text),fmOpenRead);
FileStream1.Position:=0;
ADOTable1.Insert;
ADOTable1.FieldByName('filename').asstring:=trim(edit1.text);
ADOTable1.FieldByName('filetype').asstring:=trim(combobox1.text);
Stream1:=ADOTable1.CreateBlobStream(ADOTable1.FieldByName('filetxt'), bmReadWrite);
Stream1.CopyFrom(FileStream1,FileStream1.Size);
Stream1.Free;
ADOTable1.Post;
FileStream1.Free;
end;
但是从ORACLE8的LONG RAW字段中取数据还原成文件时就受到64K限制,而且长度为(总长度-64K*N)
,(N为一整数,相当于倍数)与数据溢出的效果类似,代码如下:
begin
TBlobField(adotable1.fieldByName('filetxt')).savetofile('c:/qqqq.doc');
end;
程序运行时没有报错,但只能在64K下,文件还原才能正常,请各位指点!!!
附:我也不敢保证写进LONG RAW字段时全部写进,我单步跟踪时,流的大小超过64K时,程序执
行也正常,所以我才判断写的操作可能没有问题.
 
保存进数据库:
TBlobField(ADOTable1.FieldByName('filetxt')).LoadFromStream (filestream)

怎么样
 
还是不行,
 
方法1:直接修改BDE的参数,BLOB SIZE=10240,BLOB CACHES=1024
方法2:在程序中动态添加,即Database1.params.Add('BLOB SIZE=10240');
Database1.params.add('BLOB CACHES=1024');
 
我没有使用BDE连接,我使用的是ADO连接,我怀疑是不是问题出现在Oracle8上,要进行什么
设置
 
如果是BDE,Only you的方法可以
你可用PB操作一下,看看是不是
Oracle8的问题.
 
各位大虾,还有没有建议,请指教一下,在下不胜感激.
 
我用d5试了一下,8兆多的文件没问题:

str:=TFileStream.Create('...',fsRead);
data.Append()
TBlobField(data.FieldByName('f2')).LoadFromStream(str);
data.Post();
str.Free;

读出:
TBlobField(data.FieldByName('f2')).SaveToFile(...)//另外一个文件

经过比较,完全一样
 
pipi谢谢你这么热心,可是我的问题还是依然存在,你能不能告诉我,你在ORACLE8上是怎样
建表的,我由于刚学ORACLE8,所以对ORACLE8有好多地方不懂,我分析问题还是在ORACLE8上.
其实我也只使用了表中的一个LONG RAW字段,语句我想没错,是不是那里还有什么设置.
 
create table xxx
(
f1 integer,
f2 long raw
);

就这么简单
 
谢谢Pipi,only you,yubo的关注,特别是Pipi,问题已经解决,在sql*plus里用create table
语句建表即可,我以前利用ORACLE向导建表.祝你永远是富翁榜榜首.
 
后退
顶部