用TBlobField对应mssql server 的 image 字段,可以先把Bitmap.SaveToStream, 然后再BlobField.LoadFromStream,就存入数据库了。取出图像只需要相反操作即可。 ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('insert into Pic values(.....,:Pic,...)'); ................. ADOQuery1.Parameters.ParamByName('Pic').Assign(Image1.Picture.Bitmap); ................. ADOQuery1.ExecSQL; 提取: Image1.Picture.Bitmap.Assign(TBLOBField(ADOQuery1.Parameters.ParamByName('Pic')))
var str:string; ms1,ms2,ms3,ms4:tmemorystream; Jpegimage1,Jpegimage2,Jpegimage3,Jpegimage4:TJpegImage; extname:string; maxrecord,addrecord:String; begin if Edit1.Text = '' then begin MessageDlg('生产地编码不能为空!',mtinformation,[mbOK],0); Edit1.SetFocus; Exit; end; if Edit2.Text = '' then begin MessageDlg('生产地名称不能为空!',mtinformation,[mbOK],0); Edit2.SetFocus; Exit; end; str:= 'Select pL_Barcord from producelist where pL_Barcord = ''' + Trim(edit1.Text) + ''' and fl_id='+edit7.Text+''; str:= DBQuery(False, str, 'pL_Barcord'); if str <> '' then begin MessageDlg('生产地编码'+Trim(edit1.Text)+'已经存在,请重新添加!', mtInformation, [mbOK], 0); edit1.SetFocus; Exit; end; pictostream(ms1,jpegimage1,edit3) ; pictostream(ms2,jpegimage2,edit4) ; pictostream(ms3,jpegimage3,edit5) ; pictostream(ms4,jpegimage4,edit6) ; adoquery2.Open; adoquery2.append; adoquery2.FieldByName('PL_Barcord').AsString:=edit1.Text; adoquery2.FieldByName('fl_id').AsString:=edit7.Text; adoquery2.FieldByName('PL_ProduceName').AsString:=edit2.Text; adoquery2.FieldByName('PL_ProDescribe').AsString:=memo2.Text; TBlobField(adoquery2.FieldbyName('PL_PicProduceFirst')).LoadFromStream(MS1); TBlobField(adoquery2.FieldbyName('PL_PicProduceSecond')).LoadFromStream(MS2); TBlobField(adoquery2.FieldbyName('PL_PicProduceThirdly')).LoadFromStream(MS3); TBlobField(adoquery2.FieldbyName('PL_PicProduceFourthly')).LoadFromStream(MS4); adoquery2.Post; ms1.Free; ms2.Free; ms3.Free; ms4.Free; ///add by zqf/// maxrecord:='select max(PL_ID) as PL_ID from producelist'; maxrecord:=DBQuery(false, maxrecord, 'PL_ID'); addrecord:='insert into operaterecord values(''producelist'',''PL_ID'','+maxrecord+',1,getdate())'; DBQuery(True, addrecord, ''); ///add by zqf/// showmessage('保存成功!'); end;
procedure pictostream(var ms:tmemorystream;jpegimage:TJpegImage;edit:TEdit); begin Ms:=TMeMoryStream.Create; Jpegimage:=Tjpegimage.Create; if (edit.Text='') or (edit.Text='无') then exit; try Jpegimage.LoadFromFile(edit.Text); Jpegimage.SaveToStream(Ms); finally jpegimage.Free; end; end;
然后再BlobField.LoadFromStream,就存入数据库了。取出图像只需要相反操作即可。
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into Pic values(.....,:Pic,...)');
.................
ADOQuery1.Parameters.ParamByName('Pic').Assign(Image1.Picture.Bitmap);
.................
ADOQuery1.ExecSQL;
提取:
Image1.Picture.Bitmap.Assign(TBLOBField(ADOQuery1.Parameters.ParamByName('Pic')))
ms1,ms2,ms3,ms4:tmemorystream;
Jpegimage1,Jpegimage2,Jpegimage3,Jpegimage4:TJpegImage;
extname:string;
maxrecord,addrecord:String;
begin
if Edit1.Text = '' then
begin
MessageDlg('生产地编码不能为空!',mtinformation,[mbOK],0);
Edit1.SetFocus;
Exit;
end;
if Edit2.Text = '' then
begin
MessageDlg('生产地名称不能为空!',mtinformation,[mbOK],0);
Edit2.SetFocus;
Exit;
end;
str:= 'Select pL_Barcord from producelist where pL_Barcord = ''' + Trim(edit1.Text) + ''' and fl_id='+edit7.Text+'';
str:= DBQuery(False, str, 'pL_Barcord');
if str <> '' then
begin
MessageDlg('生产地编码'+Trim(edit1.Text)+'已经存在,请重新添加!', mtInformation, [mbOK], 0);
edit1.SetFocus;
Exit;
end;
pictostream(ms1,jpegimage1,edit3) ;
pictostream(ms2,jpegimage2,edit4) ;
pictostream(ms3,jpegimage3,edit5) ;
pictostream(ms4,jpegimage4,edit6) ;
adoquery2.Open;
adoquery2.append;
adoquery2.FieldByName('PL_Barcord').AsString:=edit1.Text;
adoquery2.FieldByName('fl_id').AsString:=edit7.Text;
adoquery2.FieldByName('PL_ProduceName').AsString:=edit2.Text;
adoquery2.FieldByName('PL_ProDescribe').AsString:=memo2.Text;
TBlobField(adoquery2.FieldbyName('PL_PicProduceFirst')).LoadFromStream(MS1);
TBlobField(adoquery2.FieldbyName('PL_PicProduceSecond')).LoadFromStream(MS2);
TBlobField(adoquery2.FieldbyName('PL_PicProduceThirdly')).LoadFromStream(MS3);
TBlobField(adoquery2.FieldbyName('PL_PicProduceFourthly')).LoadFromStream(MS4);
adoquery2.Post;
ms1.Free;
ms2.Free;
ms3.Free;
ms4.Free;
///add by zqf///
maxrecord:='select max(PL_ID) as PL_ID from producelist';
maxrecord:=DBQuery(false, maxrecord, 'PL_ID');
addrecord:='insert into operaterecord values(''producelist'',''PL_ID'','+maxrecord+',1,getdate())';
DBQuery(True, addrecord, '');
///add by zqf///
showmessage('保存成功!');
end;
begin
Ms:=TMeMoryStream.Create;
Jpegimage:=Tjpegimage.Create;
if (edit.Text='') or (edit.Text='无') then exit;
try
Jpegimage.LoadFromFile(edit.Text);
Jpegimage.SaveToStream(Ms);
finally
jpegimage.Free;
end;
end;