在sql server中建立image类型字段 例如: CREATE TABLE [dbo].[pic] ( [pid] [varchar(10)] NULL , [pic] [image] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]在程序里用一个adoquery读取该表 然后参考下面的程序 procedure TFormPicture.dxbt_saveClick(Sender: TObject); var ms : TMemoryStream; file_pic : string; begin ms := TMemoryStream.Create(); file_pic := 'c:\temp.jpeg'; try ms.LoadFromFile(file_pic); ADOQuery2.Insert; ADOQuery2.fieldbyname('pid').AsString := 'temp001' ADOQuery2.fieldbyname('pic').LoadFromStream(ms); ADOQuery2.post; except end; end;
function imagesavetosql(dataset:TQuery;filename:String):boolean; var imagejpg:TJPEGImage; //jpg图片 MyStm:TMemoryStream; begin result:=false; MyStm:=TMemoryStream.Create; imagejpg:=Tjpegimage.Create; if filename<>'' then begin imagejpg.LoadFromFile(filename); imagejpg.SaveToStream(MyStm); MyStm.Position:=0; //不可与DMImage之类控件,因为其只支持BMP TBlobField(dataset.FieldByName('pict')).LoadFromStream(MyStm); result:=true; end; MyStm.Free; imagejpg.free; end;
例如:
CREATE TABLE [dbo].[pic] (
[pid] [varchar(10)] NULL ,
[pic] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]在程序里用一个adoquery读取该表
然后参考下面的程序
procedure TFormPicture.dxbt_saveClick(Sender: TObject);
var
ms : TMemoryStream;
file_pic : string;
begin
ms := TMemoryStream.Create();
file_pic := 'c:\temp.jpeg';
try
ms.LoadFromFile(file_pic);
ADOQuery2.Insert;
ADOQuery2.fieldbyname('pid').AsString := 'temp001'
ADOQuery2.fieldbyname('pic').LoadFromStream(ms);
ADOQuery2.post;
except end;
end;
var
imagejpg:TJPEGImage; //jpg图片
MyStm:TMemoryStream;
begin
result:=false;
MyStm:=TMemoryStream.Create;
imagejpg:=Tjpegimage.Create;
if filename<>'' then
begin
imagejpg.LoadFromFile(filename);
imagejpg.SaveToStream(MyStm);
MyStm.Position:=0;
//不可与DMImage之类控件,因为其只支持BMP
TBlobField(dataset.FieldByName('pict')).LoadFromStream(MyStm);
result:=true;
end;
MyStm.Free;
imagejpg.free;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBCtrls, Mask, Db, DBTables, Spin, ADODB, ExtDlgs,
Buttons, Grids, DBGrids;type
TForm1 = class(TForm)
btnClose: TButton;
btnSave: TButton;
DBImage1: TDBImage;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
edtTM: TEdit;
DBGrid1: TDBGrid;
Label1: TLabel;
Label2: TLabel;
edtXM: TEdit;
btSavePic: TButton;
btnAppend: TBitBtn;
ADODataSet1ugTM: TStringField;
ADODataSet1ugXM: TStringField;
ADODataSet1ugPHOTO: TBlobField;
diaPic: TOpenPictureDialog;
procedure btnCloseClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btSavePicClick(Sender: TObject);
procedure btnAppendClick(Sender: TObject);
procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure edtXMKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure edtTMKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
function BlobToString(const AFileName :String) :String;
function SaveBlobField(Field: TField; const FileName: String): Boolean;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}function TForm1.BlobToString(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.btnCloseClick(Sender: TObject);
begin
close;
end;
function TForm1.SaveBlobField(Field: TField; const FileName: String): Boolean;
function BlobContentToString(const FileName: String): String;
begin
with TFileStream.Create(FileName, fmOpenRead) do
try
SetLength(Result, Size);
Read(Pointer(Result)^, Size);
finally
Free;
end;
end;begin
Result := True;
try
Field.AsVariant:= BlobContentToString(FileName);
except
Result := False;
end;
end;procedure TForm1.btnSaveClick(Sender: TObject);
begin
Adodataset1.UpdateBatch ;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
if adodataset1.State =dsInactive then
adodataset1.Open;
end;procedure TForm1.btSavePicClick(Sender: TObject);
var fileName:string;
begin
if diaPic.Execute then
fileName:=diaPic.FileName ;
adodataset1.edit;
try
SaveBlobField(adodataset1.FieldByName('ugphoto'),fileName);
except
showmessage('圖片添加未成功');
end;
end;procedure TForm1.btnAppendClick(Sender: TObject);
begin
if AdoDataset1.State <>dsInActive then
begin
AdoDataSet1.Append ;
AdoDataSet1['ugTM']:=edtTM.Text ;
AdoDataSet1['ugXM']:=edtXM.Text ;
end;
end;procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
IF key=vk_delete then
if MessageDlg('確定要刪除嗎?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
AdoDataSet1.Delete;
Adodataset1.UpdateBatch ;
end;end;procedure TForm1.edtXMKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=$d then
btnAppend.Click ;
end;procedure TForm1.edtTMKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key =13 then
keybd_event(VK_TAB,0,0,0);
end;end.