看不出错来。不过,你为什么不直接用TBlobField.LoadFromFile方法而要增加一道手续?另外,我对'lady3_3.zip'感兴趣,能不能给我发一个?[email protected] 谢了。
解决方案 »
- 如何把一张PNG或GIF图片读到一个TBitmap变量中呢?
- 请问下面的几句数据库更新语句错在哪里?
- DELPHI中不能修改同一程序中不同窗口的控件属性
- indy delphi6可以上传XML文件吗?
- 请问要实现像Dephi设计界面时的功能应怎样实现比较好一点?大家给点意见
- 谁有华为 收发短信程序?
- 知道dll某个函数名,修改输出表后不能用,怎么改dll某个函数名称
- C语言中的typedef struct..,在Pascal中如何表示
- to BirdFly 如果是特殊键怎么取ASCII?如:方向键?
- 有谁知道如何在程序中动态创建TCppWebBrowser
- QuickRep的打印能否实现所见即所得?
- 用delphi读串口的数据,为什么读了一会儿,就不能读了!
lady3_3.zip是朱德庸的<涩女郎>漫画,在http://comicz.yeah.net/有下载,发邮件的话,文件就太大了(3m到5m)呢.
另外,我用java测试放20m的文件都没有问题,应该错误不在oracle.(使用了buffer)
Configuration ->system->init->sharedmemsize 为20480,20M!
建议使用ADO,BDE落伍了!
//存文件到数据库
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin with Query1 do
begin
sql.clear;
sql.add('INSERT INTO TBIMAGE(id,filename,image) VALUES(1,:filename,:IMAGE)');
params[0].AsString := OpenPictureDialog1.FileName;
params[1].LoadFromFile(OpenPictureDialog1.FileName,ftGraphic);
execsql;
end;
end;end;
//取到本地
var
t:TBlobField;
begin
with Query1 do
begin
sql.Clear;
sql.Add('select id,filename,image from tbimage');
open; while not eof do
begin
SavePictureDialog1.InitialDir := ExtractFilePath(FieldByName('filename').AsString);
if SavePictureDialog1.Execute then
begin
t := FieldByName('IMAGE') As TBlobField;
t.SaveToFile(SavePictureDialog1.FileName);
end;
next;
end;
end;
end;
如果将BlobType修改为ftOraBlob,则错误提示是"插入的值过大",Oracle手册说过,在插入Blob域值之前,要用Empty_Blob初始化,这也就是我的私有函数的作用.
用你的概念,我现在修改了一下插入的程序,但是取出来还是出错:
var
KeyVal, FileName : string;
i : integer;
MS : TFileStream;
Bf : TBlobField;
begin
FileName := 'D:\Leetest\BlobTest\lady3_3.zip';
Ms := TFileStream.Create(FileName, fmOpenRead);
db.StartTransaction;
for i := 1 to 10 do
with Table1 do
try
Randomize;
insert;
KeyVal := inttostr(random(100000));
FieldbyName('keyfield').AsString := KeyVal;
post;
IniOracleBlobField(KeyVal);
edit;
// Ms.SetSize(ms.Size + 1);
Bf := TBlobField(FieldbyName('blob_file'));
Bf.BlobType := ftOraBlob;
Bf.LoadFromStream(ms);
post;
except
db.rollback;
Ms.Free;
abort;
end;
Ms.Free;
db.Commit;
end;
你不能估计用户的Blob域的大小,客户端查询速度有影响.