如何把TImage中的图片保存到数据库,以及如何从数据库中把图片显示出来,不使用sql语句?数据库是SQL Server(40分)

  • 主题发起人 主题发起人 hujunx
  • 开始时间 开始时间
H

hujunx

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把TImage中的图片保存到数据库,以及如何从数据库中把图片显示出来,
要求不使用sql语句?数据库是SQL Server.
请给出代码!
不胜感谢!!
 
var strema:tmemorystream
savetostream(stream)
写BLOB
为什么不用SQL。
 
var
tmpPicture:Tbitmap;
begin
if openpicturedialag.execute then
tmpPicture.loadFromFile(openPictureDialag.filename);
try
table1.open;
table1.insert;
table1.fieldbyname('Picture_col').assign(tmpPicture);
table1.post;
finally
tmpPicture.free;
end;
end;
**************小弟初出茅庐,囊中羞涩,多少给点银子,在此先行谢过。**************
 

你们的方法都不行!!!!不用SQL 是因为程序为三层结构.这是客户端.

我的代码结构如下,如何把图片字段读到TMemoryStream 中,然后附给Graphic

var Ms : TMemoryStream ;
Graphic: TGraphic
begin
try
try
with FDataSet do
begin
First;
MS := TMemoryStream.Create;
MS.Position :=0;
//============================
//FieldByName('ICO')
//=================
Graphic.LoadFromStream(MS);
end;
result := True;
except
result := False;
end;
finally
MS.Free;
end;
 
哎,你把我的Table1改为ClientDataSet1不就得了,
再加上ClientDataSet1.applyUpdates(0),你在试试!
别忘了给点银子。
 
xyzhou7 : 你把问题想的太简单,你的方法只能存bmp文件,且不能太大。灵活和扩展性都
不好。不可取!

这个问题看似简单,我查过书,也到各种论坛上看过,没有一个处理的好该问题的。
都是想当然的简单化。没有完全的方法解决图象存储。

难道我们的程序员的水平都不行吗?
 
不是让大家灰心,我到目前为止,在网上没有查到一个可以执行的有关JPg图片存储的方法。
全部是不可以执行的,或根本就是错误的。

简单的问题无人答!!!!!!
 
1。問題說的多了,人家都懶得理你了。自己發問題前多查點以前的問題吧。
2。你真的上網查了嗎?居然說的言之凿凿說網上沒有。
3。自己不行不要罵別人不行。什麼邏輯!!!

一個Image,兩個button.
procedure TForm1.Button2Click(Sender: TObject);
var
memS:TMemoryStream;
jpg:TJPEGImage;
begin
if ADODataSet1.RecordCount>0 then begin
memS:=TMemoryStream.Create;
ADODataSet1pic.SaveToStream(memS);
memS.Position := 0;

jpg:=TJPEGImage.Create;
jpg.LoadFromStream(memS);
image1.Canvas.Draw(0,0,jpg);
image1.Refresh;

mems.Free;
jpg.free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
memS:TMemoryStream;
bmp:TBitmap;
jpg:TJPEGImage;
begin
if OpenPictureDialog1.Execute then begin
memS:=TMemoryStream.Create;
jpg:=TJPEGImage.Create;
jpg.LoadFromFile(OpenPictureDialog1.FileName);
jpg.SaveToStream(mems);
memS.Position := 0;
image1.Canvas.Draw(0,0,jpg);

ADODataSet1.Active := true;
ADODataSet1.Edit;
ADODataSet1pic.LoadFromStream(memS);
ADODataSet1.Post;

mems.Free;
jpg.free;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ADODataSet1.ConnectionString:=
'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath(ParamStr(0))
+'/db1.mdb;Mode=Share Deny None;';
ADODataSet1.Active :=true;
end;
 
TO Shappy :
兄弟是怎样通过中间层来实现呀,本地就不用谈了。
 
我两年前写的,多层应用,绝对可以。

function TDatas.DBChartToOleVariant(DBChart1:TDBChart;var data:OleVariant):integer;
var
BA:array of byte;
MS:TMemoryStream;
len,i:integer;
image1:TImage;
jpeg1:TJpegImage;
begin
MS:=TMemoryStream.Create;
image1:=TImage.Create(nil);
jpeg1:=TJpegImage.Create;
try
DBChart1.CopyToClipboardBitmap;
image1.Picture.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
jpeg1.Assign(image1.Picture.Bitmap);
jpeg1.SaveToStream(MS);
len:=MS.Size;
MS.Position:=0;
setLength(BA,len);
for i:=0 to len-1 do //copy data from MmeStream to BitArray
begin
MS.Read(BA,1);
MS.Position:=i;
end;
for i:=0 to len-1 do
data:=BA;
result:=len;
finally

try
image1.Free;
jpeg1.Free;
MS.Free;
FreeMem(BA);
except
end;
end;

end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部