if (uppercase(s1) ='.JPG' ) or (uppercase(s1)='.JPEG') // 图片格式一定要大写 THEN begin pjpg.LoadFromFile(s ); pic:=TMemoryStream.Create; pjpg.SaveToStream(pic); image1.Picture.Bitmap.Assign(pjpg); pic.Position:=0; adoquery1.Insert ; adoquery1.FieldByName('borj').VALUE := 2; TBlobField(adoquery1.FieldByName('pic')).LoadFromStream(pic); adoquery1.post; pic.Free; pjpg.free; end ; if (uppercase(s1)='.BMP') then begin edit1.Text :=uppercase(s1); image1.Picture.LoadFromFile(s); adoquery1.Insert ; adoquery1.FieldByName('pic').Assign(image1.Picture.Graphic); adoquery1.FieldByName('borj').VALUE := 3; adoquery1.Post ; end; end; procedure TForm1.BitBtn1Click(Sender: TObject); var jpeg:tjpegimage; begin image1.Picture.Graphic :=nil; with adoquery1 do begin if adoquery1.FieldByName('borj').Value =3 // bmp then image2.Picture.Bitmap.Assign(fieldbyname('pic')) ; if adoquery1.FieldByName('borj').Value =2 //jpge; then begin jpeg:=tjpegimage.Create ; try jpeg.Assign(adoquery1.FieldByName('pic') ); image2.Picture.Graphic:=jpeg; finally jpeg.Free ; end; end; end ; end;end.
Procedure.............................. var Simage:TMemoryStream; begin Simage:=TMemoryStream.Create; Simage.LoadFromFile('c:\aaa.bmp'); Simage.Position:=0; try ADOQuery.Open; ADOQuery.Append; TBlobField(ADOQuery.FieldbyName('Photo')).LoadFromStream(Simage); ADOQuery.Post; Simage.Free; except MessageDlg('保存图像失败,请重试!', mtInformation,[mbOK],0); end;end; ////////////////////////////////////////////////////////////////////////////////////////////procedure TForm1.Button3Click(Sender: TObject); var bmp : TBitMap; begin if OpenDialog1.Execute then begin bmp := TBitMap.Create; bmp.LoadFromFile(OpenDialog1.FileName); Image1.Picture.Bitmap := bmp; bmp.Free; end; end;procedure TForm1.Button1Click(Sender: TObject); var MaxNo : Integer; MStream:TMemoryStream; begin With DataModule1.Query1 do begin Close; SQL.Clear; SQL.Add('select Max(No) from testblob'); if Not Prepared then Prepared := True; Open; MaxNo := Fields[0].AsInteger; end; MStream := TMemoryStream.Create; Image1.Picture.Bitmap.SaveToStream(MStream); ShowMessage(IntToStr(MStream.Size)); MStream.Position := 0; DataModule1.Table1.Insert; DataModule1.Table1.FieldByName('No').AsInteger := MaxNo + 1; //DataModule1.Table1.Fields[1].Assign(Image1.Picture.Bitmap); //TBlobField(DataModule1.Table1.FieldByName('Image')).LoadFromStream(MStream); try DataModule1.Table1.Post; except ON E:Exception do begin MStream.Free; Showmessage(E.Message); Exit; end; end; MStream.Free; end;procedure TForm1.Button2Click(Sender: TObject); begin DataModule1.Table1.Delete; end;procedure TForm1.Button4Click(Sender: TObject); var BlobS : TBlobStream; begin Image1.Hide; //Image1.Picture.Bitmap.FreeImage; BlobS := TBlobStream.Create(TBlobField(DataModule1.Table1.FieldByName('Image')),bmRead); Image1.Picture.bitmap.LoadFromStream(BlobS); Image1.Refresh; Image1.Show; BlobS.Free; end;procedure TForm1.Button5Click(Sender: TObject); var MaxNo : Integer; MStream:TStringStream; begin With DataModule1.Query1 do begin Close; SQL.Clear; SQL.Add('select Max(No) from testblob'); if Not Prepared then Prepared := True; Open; MaxNo := Fields[0].AsInteger; end; MStream := TStringStream.Create(''); Image1.Picture.Bitmap.SaveToStream(MStream); //注意这里 ShowMessage(IntToStr(MStream.Size)); MStream.Position := 0; DataModule1.Query1.Active := False; DataModule1.Query1.Close; DataModule1.Query1.SQL.Clear; DataModule1.Query1.SQL.Add('Insert into testblob values(:No,:Image)'); DataModule1.Query1.ParamByName('No').AsInteger := MaxNo + 1; DataModule1.Query1.ParamByName('Image').AsBlob := MStream.DataString; DataModule1.Query1.Prepare; DataModule1.Query1.ExecSQL; DataModule1.Table1.Refresh; end;像这样子试试 如果是jpg,就先将它转换为bmp,再保存.
________________________欢迎访问和宣传我的论坛http://hthunter.vicp.net/
随便一搜就有,doc和图片一样操作.
用adotable datasource 还有dbimage了
用
adotable.append;
adotable.post;
// 通过 , 'doc' 的数据库中为image 类型
// 不管是WORD,EXCLE,还中JPG的都能用
// 注意打开文件时一定要先定位(即要先写sql 查询确定有个再打开 ),要不然会出错,还有就是临时文件的删除。。
// delphi 7+sql2000通过。。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons, OleCtnrs;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
ADOQuery1: TADOQuery;
OleContainer1: TOleContainer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
s:string;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
if not ADOQuery1.Active then ADOQuery1.Open;
ADOQuery1.Append;
s :=ExtractFileName(OpenDialog1.FileName);
(ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename);
ADOQuery1.Post;end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
(ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+'\'+s);// (ADOQuery1.FieldByName('doc') as TBlobField).savetoFile('你要的路径' +s) ;
shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal);
end;end.
//不好意思。。
//记得加上uses jpeg ;
//其中有些地方不是太严密,回去修改下。。
//delphi7+ sql2000通过.可以保存jpeg,jpg,bmp三种格式。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg,DB, ADODB, ExtCtrls, Buttons, Grids, DBGrids,
DBCtrls;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Button1: TButton;
OpenDialog1: TOpenDialog;
Edit1: TEdit;
Image1: TImage;
Image2: TImage;
BitBtn1: TBitBtn;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1pic: TBlobField;
ADOQuery1borj: TStringField;
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
s:string;
s1:string;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
bitmap1:tbitmap;
pjpg:tjpegimage;
pic:TMemoryStream;begin
pjpg:=tjpegimage.Create;
if opendialog1.Execute
then
s:=opendialog1.FileName ;
s1:=extractfileext(s);
if (uppercase(s1) ='.JPG' ) or (uppercase(s1)='.JPEG') // 图片格式一定要大写
THEN
begin
pjpg.LoadFromFile(s );
pic:=TMemoryStream.Create;
pjpg.SaveToStream(pic);
image1.Picture.Bitmap.Assign(pjpg); pic.Position:=0;
adoquery1.Insert ;
adoquery1.FieldByName('borj').VALUE := 2;
TBlobField(adoquery1.FieldByName('pic')).LoadFromStream(pic);
adoquery1.post;
pic.Free;
pjpg.free;
end ; if (uppercase(s1)='.BMP') then begin
edit1.Text :=uppercase(s1); image1.Picture.LoadFromFile(s);
adoquery1.Insert ;
adoquery1.FieldByName('pic').Assign(image1.Picture.Graphic);
adoquery1.FieldByName('borj').VALUE := 3; adoquery1.Post ;
end;
end; procedure TForm1.BitBtn1Click(Sender: TObject); var
jpeg:tjpegimage;
begin
image1.Picture.Graphic :=nil;
with adoquery1 do
begin
if adoquery1.FieldByName('borj').Value =3 // bmp
then
image2.Picture.Bitmap.Assign(fieldbyname('pic')) ; if adoquery1.FieldByName('borj').Value =2 //jpge; then
begin
jpeg:=tjpegimage.Create ;
try
jpeg.Assign(adoquery1.FieldByName('pic') );
image2.Picture.Graphic:=jpeg;
finally
jpeg.Free ;
end;
end; end ;
end;end.
var
Simage:TMemoryStream;
begin
Simage:=TMemoryStream.Create;
Simage.LoadFromFile('c:\aaa.bmp');
Simage.Position:=0;
try
ADOQuery.Open;
ADOQuery.Append;
TBlobField(ADOQuery.FieldbyName('Photo')).LoadFromStream(Simage);
ADOQuery.Post;
Simage.Free;
except
MessageDlg('保存图像失败,请重试!', mtInformation,[mbOK],0);
end;end;
////////////////////////////////////////////////////////////////////////////////////////////procedure TForm1.Button3Click(Sender: TObject);
var
bmp : TBitMap;
begin
if OpenDialog1.Execute then
begin
bmp := TBitMap.Create;
bmp.LoadFromFile(OpenDialog1.FileName);
Image1.Picture.Bitmap := bmp;
bmp.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
MaxNo : Integer;
MStream:TMemoryStream;
begin
With DataModule1.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select Max(No) from testblob');
if Not Prepared then Prepared := True;
Open;
MaxNo := Fields[0].AsInteger;
end;
MStream := TMemoryStream.Create;
Image1.Picture.Bitmap.SaveToStream(MStream);
ShowMessage(IntToStr(MStream.Size));
MStream.Position := 0;
DataModule1.Table1.Insert;
DataModule1.Table1.FieldByName('No').AsInteger := MaxNo + 1;
//DataModule1.Table1.Fields[1].Assign(Image1.Picture.Bitmap);
//TBlobField(DataModule1.Table1.FieldByName('Image')).LoadFromStream(MStream);
try
DataModule1.Table1.Post;
except
ON E:Exception do
begin
MStream.Free;
Showmessage(E.Message);
Exit;
end;
end;
MStream.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
DataModule1.Table1.Delete;
end;procedure TForm1.Button4Click(Sender: TObject);
var
BlobS : TBlobStream;
begin
Image1.Hide;
//Image1.Picture.Bitmap.FreeImage;
BlobS := TBlobStream.Create(TBlobField(DataModule1.Table1.FieldByName('Image')),bmRead);
Image1.Picture.bitmap.LoadFromStream(BlobS);
Image1.Refresh;
Image1.Show;
BlobS.Free;
end;procedure TForm1.Button5Click(Sender: TObject);
var
MaxNo : Integer;
MStream:TStringStream;
begin
With DataModule1.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select Max(No) from testblob');
if Not Prepared then Prepared := True;
Open;
MaxNo := Fields[0].AsInteger;
end;
MStream := TStringStream.Create('');
Image1.Picture.Bitmap.SaveToStream(MStream); //注意这里
ShowMessage(IntToStr(MStream.Size));
MStream.Position := 0;
DataModule1.Query1.Active := False;
DataModule1.Query1.Close;
DataModule1.Query1.SQL.Clear;
DataModule1.Query1.SQL.Add('Insert into testblob values(:No,:Image)');
DataModule1.Query1.ParamByName('No').AsInteger := MaxNo + 1;
DataModule1.Query1.ParamByName('Image').AsBlob := MStream.DataString;
DataModule1.Query1.Prepare;
DataModule1.Query1.ExecSQL;
DataModule1.Table1.Refresh;
end;像这样子试试
如果是jpg,就先将它转换为bmp,再保存.