在SQL SERVER 数据库中如何存/取JPG格式的图片?(100分)

  • 主题发起人 主题发起人 wcl-2001
  • 开始时间 开始时间
W

wcl-2001

Unregistered / Unconfirmed
GUEST, unregistred user!
在SQL SERVER 数据库中如何存/取JPG格式的图片?请详细说明,谢谢!
 
如果是用DELPHI作前台的话,你可以用BLOb字段来存呀。
 
存取jpg代码如下:
procedure TForm1.btnLoadImageClick(Sender: TObject);
var
sFileName : string;

function BlobContentToString(const AFileName : string) : string;
begin
with TFileStream.Create(AFileName, fmOpenRead) do
try
SetLength(Result, Size);
Read(Pointer(Result)^, Size);
finally
Free;
end;
end;

begin
if OpenDialog1.Execute then
begin
sFileName := OpenDialog1.FileName;
with ADOTable1 do
begin
Open;
Insert;
FieldByName('Name').AsString := Edit1.Text;
FieldByName('Photo').AsString := BlobContentToString(sFileName);
Post;
end;
end;
end;

procedure TForm1.btnShowClick(Sender: TObject);
var
BS : TADOBlobStream;
JpegImage : TJpegImage;
sFileName : string;
begin
JpegImage := TJpegImage.Create;
BS := TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName('Photo')), bmRead);
try
JpegImage.LoadFromStream(BS);
Image1.Picture.Assign(JpegImage);
sFileName := ExtractFilePath(Application.ExeName) + 'tmpBlob';
sFileName := sFileName + '.jpg';
BS.SaveToFile(sFileName);
//OleContainer1.CreateObjectFromFile(sFileName, False);
//Image1 := TImage.Create(Self);
//Image1.Picture.Graphic.LoadFromStream(BS);
finally
JpegImage.Free;
BS.Free;
end;
end;
 
数据库中有Image字段,为何不用?
如何使用数据库中的Image字段?
 
ADO:
AppendChunk()
GetChunk()
 
怎么用ado
appendchunk
getchunk ???
示范一下,ok?
 
好像是 fieldbyname('xxx').assign(pic)吧









 
更正cb422的
function BlobContentToString(const AFileName : string) : string;
begin
with TFileStream.Create(AFileName, fmOpenRead) do
try
SetLength(Result, Size);
Read(Pointer(Result)^, Size);
finally
Free;
end;
end;

procedure TForm1.btnLoadImageClick(Sender: TObject);
var
sFileName : string;
begin
if OpenDialog1.Execute then
begin
sFileName := OpenDialog1.FileName;
with ADOTable1 do
begin
Open;
Insert;
FieldByName('Name').AsString := Edit1.Text;
FieldByName('Photo').AsString := BlobContentToString(sFileName);
Post;
end;
end;
end;


procedure TForm1.btnShowClick(Sender: TObject);
var
BS : TADOBlobStream;
JpegImage : TJpegImage;
sFileName : string;
begin
JpegImage := TJpegImage.Create;
BS := TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName('Photo')), bmRead);
try
JpegImage.LoadFromStream(BS);
Image1.Picture.Assign(JpegImage);
sFileName := ExtractFilePath(Application.ExeName) + 'tmpBlob';
sFileName := sFileName + '.jpg';
BS.SaveToFile(sFileName);
//OleContainer1.CreateObjectFromFile(sFileName, False);
//Image1 := TImage.Create(Self);
//Image1.Picture.Graphic.LoadFromStream(BS);
finally
JpegImage.Free;
BS.Free;
end;
end;

这段程序不能达到目的
 
我的评语,以上答案都不符合要求。

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

 
作为布尔流处理!?
 
to hujunx:这个问题使用image字段类型,在程序中使用stream就可以解决了.
 
好像有数据的大小问题,bde有这样的问题,当为bmp时出不来图形,
把blobsize设大一点就好了
 
用dxdbgrid吧,。。。,里面的dxgraphiccolumn,什么图像都可以输入。。。,和数据库无关。。。
 
多人接受答案了。
 
后退
顶部