各位大虾,如何利用SQL server和TImage控件实现图片的动态存入、删除和显示?
我想在程序中实现图片的动态添加、删除、显示(一个form中可以显示n张图片),图片要存放在服务器上(考虑存放在服务器的数据库中还是以文件形式存放,哪种存取方式更合理?),图片组件使用TImage还是其他控件?请各位高手提供指导或简单的代码,谢谢! 问题点数:100、回复次数:4Top
1 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2005-12-04 17:38:03 得分 0
用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')))
Top
2 楼lorvery(堕落猎人)回复于 2005-12-04 17:45:18 得分 0
我觉得图片还是以文件的形式存放在服务器上的比较好,请问如何动态读取本地磁盘上的一个图片?Top
3 楼hhzqf1980(hh)回复于 2005-12-05 09:28:31 得分 0
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;Top
4 楼hhzqf1980(hh)回复于 2005-12-05 09:28:54 得分 0
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;Top




