Oracle下的Blob(100分)

  • 主题发起人 主题发起人 xxczq
  • 开始时间 开始时间
X

xxczq

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Oracle 作后台,作了一个图象插入的例子,是 通过调用过程实现的,过程原代码如下:
create or repalce procedure insertimage(
imgid in number,
image in blob)
as
begin
insert into images(imgid,image);
commit;
end;

前端

procedure TForm1.Btn_InsertImgClick(Sender: TObject);

//procedure TForm1.BitBtn1Click(Sender: TObject);
var strm:tmemorystream;
begin
OpenDialog1.Execute;
strm:=tmemorystream.Create;
try
strm.LoadFromFile(OpenDialog1.FileName);
//adoconnection1.Connected:=true;
sp_InsertImg.Close;
//StoredProc1.ProcedureName:='test_proc1';
//StoredProc1.Parameters.Refresh;
sp_InsertImg.ParamByName('imgid').Value:=2;
sp_InsertImg.ParamByName('image').LoadFromStream(strm,ftblob);
//StoredProc1.Prepared;
sp_InsertImg.ExecProc;
finally
strm.Free;
end;
end;
有的BMP图可以插入,有的就不行,提示说‘转换无法完成或请求不合理’为什么?
 
你的 create or repalce procedure 一定不是copy来的吧
insert into images(imgid,image);
应该是
insert into images values(imgid,image); 吧
 
LoadFromStream 之 ftBlob 改成 ftOraBlob 可以吗
 
strm.Seek(0, soFromBeginning); //加上这一句看看
sp_InsertImg.ParamByName('image').LoadFromStream(strm,ftblob);
 
不性,出错
 
我很想知道答案,请问有人能解决吗?我和他的情况一样。

搂主,借宝地一用,谢谢!
 
oracle的blob问题多多,你可以查查以前的帖子,可以说,很多都没有满意的答案
不过你的问题是不是图片的大小的原因
设置一下blobsize和cachesize试试
 
是图片大小问题,每次只能小于存入32K的图片。
BDE中的BLOBS TO CACHE=4096(或1024),BLOB SIZE=4096(或10240),但情况还是一样。
我又用ADO连接,还是不行。我用的是LONG RAW类型。
是不是要改数据库中long raw字段的大小???

 
好像和我遇到的不一样啊:)
我用long raw就可以,改成别的就不行,可以查初学者(我以前的id)的帖子
据说ado没问题,也有人说三层没问题,我没试过
有人说是bde和oracle的接口问题,我最后也没搞清楚到底怎么回事,去年做的时候就是
因为保存照片的问题,把我搞死了,最后还是找了个变通的法子,才解决
 
小小武:
我用的也是long raw类型,如果直接对表进行操作是没问题的,我存了2M多的图片
都可以,但是一用存储过程的时候就存在图片大小的问题了。我的表和存储过程是这样写的:

CREATE TABLE USERAW1(
ID NUMBER PRIMARY KEY,
IMG LONG RAW NOT NULL);
存储过程
CREATE OR REPLACE PROCEDURE P_USERAW1
(ID IN NUMBER,IMGA IN LONG RAW)
AS
BEGIN
INSERT INTO USERAW1(IMG) VALUES(IMGA);
END;
/
在DELPHI中写:
procedure TForm1.btnADOInsertClick(Sender: TObject);
begin
ADOStoredProc1.Parameters.ParamByName('imga').LoadFromFile('L:/PicMgr/Pic/convert2.bmp',ftBlob);
ADOStoredProc1.Prepared;
ADOStoredProc1.ExecProc;
end;
请问问题出在哪里????
 
請問erbird:
直接存表你是如何實現的?????????
 
如果是大小的问题,那我也碰过
强烈建议修改控件的Size属性,不是BlobSize,也不是Cache Size
就一个Size属性,我当初就是这样修改好了的
 
那個控件的size,我如何找它.
我找不到
 
WebExplorer:
你是说修改ADOStoredProc中Parameters中二进制字段Imga的size吗?
Imga的size一连接默认的就是2147483647,我曾经改过这个值,但是没有用。long raw
作为数据库的类型最大可以2G大小的图片,作为PL/SQL中的变量时最大为32K。请问您当初
是怎么解决的???

johnlhr:
在ADOCommand1控件的CommandText中写SQL语句:insert into useraw1(img) values(:img)
delphi中的BUTTON写
ADOCommand1.Parameters.ParamByName('img').LoadFromFile('L:/PicMgr/Pic/2222.bmp',ftBlob);
ADOCommand1.Execute;
就可以了,请问您有什么问题?

 
请问有人回答吗??
请大家帮帮忙!!
 
在bde中可以设置oracle中blob类型字段存储内容的大小
 
我也遇到类似的问题,
三层的数据库,编辑一层图片时,系统提示出错(invild blob length),
编辑二三层时,系统提示出错(无法通过128(在表空间中扩展)
为什么?
 
BLOB字段
1,直接插入data,不能大于32k
2,使用oracle包插入大数据。详细请查阅资料。
 
若用BDE则
修改BDE对应的别名blobsize的大小,即可添加超过32k的文件
若用ADO则
无需修改,即可插入大于32K的文件
 

Similar threads

后退
顶部