插入 JPG 文件时报错,求救...

huazaijiajia 2006-02-27 10:37:07
我的程序如下,很简单的

procedure TForm1.MBBitBtn1Click(Sender: TObject);
var
Ms:TmemoryStream;
jpg:Tjpegimage;
testStream:TMemoryStream;
begin
try
testStream := TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(testStream);
adoquery1.Close;
adoquery1.SQL.Clear;
adoQuery1.SQL.Add('Insert into RPT_CAR_INFO(JPGDATE,CARJPG) values (:id,:photo)');
adoquery1.Parameters.ParamByName('id').Value := '003';
adoQuery1.Parameters.ParamByName('photo').LoadFromStream(testStream,ftBlob);
adoquery1.ExecSQL;
finally
testStream.Free;
end;
end;
表结构
create table RPT_CAR_INFO
(
JPGDATE VARCHAR2(16),
CARJPG blob

);

运行后报错:“ORA-12571 TNS 包写入程序失败”
虽然报错,记录倒是插进去了,字段 JPGDATE 有值
不知道什么原因,我快晕了......
...全文
270 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
huazaijiajia 2006-03-07
  • 打赏
  • 举报
回复
谢谢各位...
cjianwen 2006-03-01
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject); // 插入图片过程
var
testStream:TMemoryStream;
begin
try
testStream := TMemoryStream.Create; // 创建内存流
Image1.Picture.Graphic.SaveToStream(testStream); // 将图片保存到内存流中

testStream.position:=0; //关键的一句

adoquery1.Close;
adoquery1.SQL.Clear;
adoQuery1.SQL.Add('Insert into tbltemp (Image) values (:photo)'); // 进行插入操作
adoQuery1.Parameters.ParamByName('photo').LoadFromStream(testStream,ftBlob); // 读取保存的内存图
adoquery1.ExecSQL;
finally
testStream.Free; // 释放内存流
end;
end;
chb5210 2006-03-01
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject); // 插入图片过程
var
testStream:TMemoryStream;
begin
try
testStream := TMemoryStream.Create; // 创建内存流
Image1.Picture.Graphic.SaveToStream(testStream); // 将图片保存到内存流中
adoquery1.Close;
adoquery1.SQL.Clear;
adoQuery1.SQL.Add('Insert into tbltemp (Image) values (:photo)'); // 进行插入操作
adoQuery1.Parameters.ParamByName('photo').LoadFromStream(testStream,ftBlob); // 读取保存的内存图
adoquery1.ExecSQL;
finally
testStream.Free; // 释放内存流
end;
end;

试试这个呢

我的数据类型是image哈,不是blob
huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
刚查到的资料:
用ADO连接ORACLE数据库,不支持BLOB,打不开含有BLOB字段的记录集。
当然,也没办法插入数据了

是这样吧,各位
huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
问题解决,我把字段类型改为 LONG RAW 就行了
但是我就不知道使用 blob 类型为什么会出错?
blob 和 LONG RAW 类型有何区别呢?
huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
另外就是,我这样写
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select JPGDATE,CARJPG from RPT_CAR_INFO');
ADOQuery1.Open;
会提示 “数据类型不被支持” 这样的错误

是不是我什么地方搞错了?有谁遇到过这样的情况
lovendII 2006-02-28
  • 打赏
  • 举报
回复
二进制,图片一般以二进制存储,但是我没做过,帮顶
huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
还有什么办法可以解决吗
huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
在本机上
D:\oracle\ora81\network\ADMIN\SAMPLE 下有一个SQLNET.ORA
里面有一条 #sqlnet.expire_time = 10 ,这样是有问题的吗
数据库服务器上我暂时看不到
柯本 2006-02-28
  • 打赏
  • 举报
回复
1.可能是由杀毒软件或防火墙引起的,关闭它们试试
2.你的SQLNET.ORA文件的不正确配置也可能导致问题。删除你的客户端和你的数据库服务器上SQLNET.ORA 文件中SQLNET.EXPIRE_TIME=0这一条。


huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
二进制怎么转呢?给个例子行不行,不会啊...
huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
图片以二进制存储看看,你想说这个是吧
huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
大哥,“圖片以而禁進制存儲看看” 这个是什么意思呢?很费解
怎样做?
lovendII 2006-02-28
  • 打赏
  • 举报
回复
圖片以而禁進制存儲看看
huazaijiajia 2006-02-28
  • 打赏
  • 举报
回复
没人......
cjianwen 2006-02-28
  • 打赏
  • 举报
回复
真晕,掉了一句:ms.position:=0;

非常重要的一句,要不会出错的,到文件尾了!
柯本 2006-02-28
  • 打赏
  • 举报
回复
建议用ODAC,我一直用它连oracle,没任何问题
huazaijiajia 2006-02-27
  • 打赏
  • 举报
回复
大家都睡了吗?我也先休息吧...

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧