求助!!!
我用Ado存取blob大字段。发现没有存到库中!!(我用db2数据库!)
用bde方式ok!没有问题!
不知为什么???现在系统用Ado方式
我用Ado存取blob大字段。发现没有存到库中!!(我用db2数据库!)
用bde方式ok!没有问题!
不知为什么???现在系统用Ado方式
解决方案 »
- 求高手帮忙优化一下以下代码。。
- CXGRID 自带右键Footer上右键出错
- 请教各位仁兄 ,如何将tlist中的一个指针移到整个tlist容器的最后面?
- 求助:如何让图像A(image)重叠在图像B(image)上面时,A中的白色成为透明色,显示B的颜色???
- 高分求一个多表查询的语句?
- D6安装问题
- 关于第三方控件【TopStringGrid】的两个小小小问题,请赐教~!在线给分
- 我想报《电脑报》办的程序员考试,据说考满最多有3000元奖金,大家觉的现实吗?或者,这个证有用吗?
- 怎么样在Grid中,格式化从数据库得到的float数据是‘0.00’ 类型?在线!
- 500分相送!如何在Delphi中动态创建一个标准对象(如按钮控件),并在该对象事件内动态添加代码?
- 有点难度的随机数问题?分不够再加!
- 帮一朋友在线求,谢谢,答者有分,支持+-*/以及()的运算文本框
ado读出的就更小了。
代码如下
blob:tblobstream;
blob:=tblobstream.Create(TBlobField(query1.fields[0]),bmread);
请高手大哥大姐帮忙!
从文件读入字段:
Var
Stream: TBlobStream;
FromFile: File ;
ReadNum: Integer ;
Buffer: Array[1..2048] of Char;
FileName: String;
begin
Try
If OpenDialog1.Execute Then
Begin
FileName := OpenDialog1.FileName;
AssignFile(FromFile,FileName);
Reset(FromFile,1);
Query1.append;
Stream := TBlobStream.Create(TBlobField(Fields[0]),bmReadWrite);
repeat
BlockRead(FromFile,Buffer,SizeOf(Buffer),ReadNum);
If ReadNum <>0 Then
BlobStream.Write(Buffer,ReadNum);
Until (ReadNum = 0);
Query1.Post;
End;
Finally
CloseFile(FromFile);
End;
从字段中读出到文件:
Var
FileName: String;
ToFile: File;
Stream: TBlobStream;
MemSize: Integer;
Buffer: PChar;
i,j,k,WriteNum: Integer;
begin
FileName := 'C:\......';
AssignFile(ToFile,FileName);
ReWrite(ToFile,1);
Stream := TBlobStream.Create(TBlobField(Query1.Fields[0]),bmRead);
Try
MemSize := Stream.Size;
Inc(MemSize);
Buffer := AllocMem(2048);
Try
j := (MemSize - 1) div 2048 + 1 ;
For i := 1 to j Do
Begin
If i = j Then k := MemSize - (j-1)*2048 - 1 Else k := 2048;
Stream.Read(Buffer^ , k);
BlockWrite(ToFile,Buffer^,k,WriteNum);
End;
Finally
FreeMem(Buffer,MemSize);
End;
Finally End;
CloseFile(ToFile);
Stream.Free;
end;
在库里面修改
或者在建表的时候附值
给你一段类似的代码参考:
try
if adotbsql.FieldByName('feature').IsBlob then
begin
getmem(p3[i],s3);
if adotbsql.FieldByName('feature').GetData(p3[i]) then
//adotbTemp.FieldByName('feature').GetData(p3[i])
adotbTemp.Fields[3].GetData(p3[i])
else
showmessage('图像 is null');
freemem(p3[i]);
end;
……
设置database的params参数
SERVER NAME=''
USER NAME='';
PASSWORD=''
BLOB SIZE=''
然后
Stream := TBlobStream.Create(TBlobField(Query1.Fields[0]),bmRead);
可以写进BLOB或其他二进制流,如果不设置BLOB SIZE属性最大
也只能有32K,因为BLOB SIZE 默认值为32K
希望对你有帮助。
有没有大侠们使用过Ado存取大字段阿!!????????
if OpenDialog.Execute then
begin
ADOBlobStream.LoadFromFile(OpenDialog.FileName);
ADOBlobStream.Position := 0;
TBlobField(ADOQueryAll.FieldByName('LAWS_CONTENT')).LoadFromStream(ADOBlobStream);
end;
ADOBlobStream.Free;
ADODatabaseBLOB.LoadFromFile('c:\temp\myfile.doc'); //ADODatabaseBLOB为Blod字段
ADODatabase.post;
post
我试了你的方法,没有错误,但还是没保存到库中。
偶把Adodataset的lock type 属性设为 itoptimistic ,在post时报“参数数目错误”的提示。 设为ltBatchOptimistic 时,post不报错。但还是没保存到库中。 因为ltBatchOptimistic ,Ado执行是按批模式保存,所以我加了Ado的connection的事务处理。还是不行阿!!
小弟现在真是郁闷阿
不知道是不会用还是ado连oracle8i有问题
后来改用bde 和 ODAC 了
用bde可以的!!
我就是搞不懂!
有什么补丁嘛??
up