三层中怎么向SQLSERVER写入图片和取出图片?急(300分)

  • 主题发起人 主题发起人 zzutlink
  • 开始时间 开始时间
Z

zzutlink

Unregistered / Unconfirmed
GUEST, unregistred user!
请大家详细点!急!
怎么写入,怎么读取?
 
老兄:和两层的是一样的啊!以前N个人回答了这个问题了
我不想copy,你自己去找吧
 
我这是两层的,三层的差不多,你看看怎么存到数据库,试过后有问题再提出来.我本也不想
再贴到这儿,看到代码也不多.BMP档的你直接用DBImage就能实现,若是其它类型的图片,照
下面的来,如JPG图档.
:DBImage.Picture.bitmap.assign(JpgPic);//加在下面代码中,DBIMAGE就可显示JPG图片了.
var tempStream:TMemoryStream;
JpgPic:TJpegImage;
begin
try
JpgPic:=TJpegImage.Create;
tempStream:=TMemoryStream.Create;
tempStream.clear;
adoquery1.Append;
JpgPic.LoadFromFile(openpicturedialog1.filename);
DBImage.Picture.bitmap.assign(JpgPic);//若你想DBIMAGE显示JPG图像就可这样.
JpgPic.SaveToStream(tempStream);
tblobfield(adoquery1.FieldByName('image')).LoadFromStream(tempStream) ;
adoquery1.Post;
finally
JpgPic.Free;
tempStream.Free;
end;
这是保存的方法,读取图片也要转换一下才行.
 
各位老大,我查过了,都不能达到要求呀
我现在需要把图片的信息通过存储过程存入数据库呀,大家帮忙
 
解决了,其实很简单,试一试下面的代码,别忘了给分。
procedure TForm1.BitBtn1Click(Sender: TObject);
var strm:tmemorystream;
begin
strm:=tmemorystream.Create;
try
strm.LoadFromFile('c:/1.bmp');
adoconnection1.Connected:=true;
adostoredproc1.Close;
adostoredproc1.ProcedureName:='test_proc1';
adostoredproc1.Parameters.Refresh;
adostoredproc1.Parameters.ParamValues['@id']:=1;
adostoredproc1.Parameters.ParamByName('@blb').LoadFromStream(strm,ftblob);
adostoredproc1.Prepared;
adostoredproc1.ExecProc;
finally strm.Free;
end;
end;
存储过程:
CREATE PROCEDURE [dbo].[test_proc1](@id int,@blb image)
AS
insert into table2 values(@id,@blb)
 
不是跟兩層一樣嗎!?
 
我试试,成了分少不了
 
采用流的方式;字段可以为Blob字段;
 
还有怎么读呢?
 
也是存储过程的参数吗?如果不是,DFW上有一堆答案。
 
搜一下吧﹐何苦出300大洋呢。
 
搜索过了,能用早就用了,不行呀
 
有哪位把两段代码都写一下,帮忙呀!
请各位都试试吧。
如果可以,麻烦发到我信箱:transistor@371.net
 
你的问题还不如改成如何用存储过程来读写BLOB类型。
写入照我写的方法是没有问题的,你试过没有?
读出?SQL的存储过程好象不支持IMAGE和TEXT类型的OUT,你的存储过程是什么样的,贴出来看看。
 
读出不需要用存储过程
写入用存储过程!
我照你的方法写入了,但取出来的时候并不正确。
我现在暂时用两层的取的,取图片的程序我试过是没有问题的,所以我认为是写入时
并没有写入正确,麻烦你了,希望得到你的帮助!
 
zzutlink:
你写入的格式可能与读取的格式不一样,因为你用了不同的方法,即使写进去
了也不一定能读出来,除非你写入与读出的格式恰好一样,或者自己读出。
另:你为什么一定要自己写存储过程?DATASET应该能帮你写入的(纯属猜测,
我没试过)。
 
提取TBlob字段:
Image1.Picture.Bitmap.Assign(TBLOBField(ClientDataSet1.Fields[1]))
 
to zzutlink:
procedure TForm1.Button1Click(Sender: TObject);
var strm:tmemorystream;
begin
strm:=tmemorystream.Create;
try
adoquery1.close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from table2 where uid=1');
adoquery1.Prepared;
adoquery1.Open;
strm.Clear;
(adoquery1.FieldByName('uimage') as tblobfield).savetostream(strm);
strm.SaveToFile('c:/2.bmp');
finally strm.Free;
end;
end;
试一试,一点问题没有呀,三层不同之处就是ADO换成了clientdataset而已。
 
我试了呀,哪位亲手试试,然后给我一个完全的答案好么?
我试了很多次,没搞定
 
你的读出是用我写的代码吗?我这里一点问题没有呀,2.bmp和1.bmp完全一样。
你如果是自己写的,贴出来看看。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部