SQL Server 2005裏的Image字段裝的就是文本類型數據;
delphi上傳圖片--個人照片
1. 使用到的控件:
(1) Image 控件(TImage類的);
(2) OpenPictureDialog控件(打開圖片的控件);
2. 使用到一個類:TMemoryStream
3. 數據庫的字段:Blob字段;存放圖像的二進制;
功能一: 清除照片
步驟:
Image1.Picture.Graphic := nil ;
Image1.Tag := 1 ;
使用如下語句即可;
功能二: 添加照片
步驟:
1. 打開硬盤,選擇照片時,用以下過程:
procedure TRYGLEditForm.image1DblClick(Sender: TObject);
var
filestream:TFileStream;
begin
inherited;
if not (dsMaster.State in [dsEdit , dsInsert]) then
exit ;
if dlgOpenPic1.Execute then
begin
try
filestream := TFileStream.Create(dlgOpenPic1.FileName,fmOpenRead);
if filestream.Size > 20000 then
begin
MsgDialog.ShowError('圖片太大影響速度,不能超過20K大小');
abort;
end;
finally
filestream.free;
end;
Image1.Picture.LoadFromFile(dlgOpenPic1.FileName);
Image1.Tag := 1 ;
end;
end;
2. 保存到數據庫時:
{--cyj 保存圖片--}
procedure TRYGLEditForm.SavePicture;
var
PicName , ext : string ;
strm : TMemoryStream;
begin
try
if Image1.Picture.Graphic = nil then exit;
strm := TMemoryStream.Create ;
Image1.Picture.Graphic.SaveToStream(Strm);
strm.Position := 0 ;
if strm.Size = 0 then
cdsPHOTO.FieldByName('photo').Clear
else
begin
With cdsPHOTO do
begin
if recordcount > 0 then
Edit
else
Append;
TBlobField(FieldByName('PHOTO')).LoadFromStream(strm);
Post;
ApplyUpdates;
end;
end;
finally
strm.Free ;
end;
end ;
//--讀取圖片到Image控件, 在formshow事件裏調用ShowPhoto()即可
{--顯示個人照片 支持bmp jpg格式--}
procedure TFmEmployeeInput.ShowPhoto();
var
//strm: TADOBlobStream;
strm: TClientBlobStream; //--因爲用的是ClientDataSet組件作爲數據讀取控件
JpegImage: TJpegImage;
Bitmap: TBitmap;
PType: Integer;
begin
PType := 0;
if FMEmployee.CDS1.FieldByName('photo').AsString = '' then
begin
Exit;
end;
strm := TClientBlobStream.Create(tblobfield(FMEmployee.CDS1.FieldByName('photo')),bmread);
try //try1
strm.position :=0;
image1.Picture.Graphic := nil; //清除圖像
// BMP、JPEG兩種圖像數據必需分別處理
if PType = 1 then //BMP型圖像數據
begin //begin11
bitmap := tbitmap.Create ;
try //try11
bitmap.LoadFromStream(strm);
image1.Picture.Graphic := bitmap;
finally
bitmap.Free;
end; //end try11
end //end begin11
else
if PType = 0 then //JPEG型圖像數據
begin //begin12
jpegimage := tjpegimage.Create ;
try //try12
jpegimage.LoadFromStream(strm);
image1.Picture.Graphic := jpegimage;
finally
jpegimage.Free ;
end; //end try12
end; //end begin12
finally
strm.Free ;
end; //end try1
end;