关于从数据库中读出信息的问题!(100)

  • 主题发起人 主题发起人 hmilysoo
  • 开始时间 开始时间
H

hmilysoo

Unregistered / Unconfirmed
GUEST, unregistred user!
图片管理系统中,把图片信息存入数据库中,重新打开系统,原本显示的图片列表却是空的 也就是没从数据库中读出图片信息,可是数据库中有图片信息记录,请问这是为什么,或者从数据库读出图片信息的关键是什么?
 
如果是BDE,请检查BDE属性BlobSize是否是默认的32,需要更改为990,再大一些也没有,BDE最多好像就支持980K,所以你图片不要太大了,ADO例外。这个参数表示对于blob字段,它默认最多只取32K的数据。
 
谢谢znxia,我用的是ADO,读出图片信息的时候需要另外写些什么代码吗?还是像DBGrid那样,存入之后,再打开系统原本的数据也会存在!
 
建议图片不要存入数据库,虽然很方便。图片一般都比较大,存入和取出都很费资源的。可以试试100W条带图片的和不带图片的数据,就知道效果了。因为你的图片不是都要显示出来,可能你从数据库中取出1000张或者更多,这就严重影响了性能。就你的问题而言,绝对是你的代码有问题。procedure TFrmMain.LoadPic;var PictureStream : TStream;begin try if ADOQuy.FieldByName('图象').IsNull then begin ImgVehi.Assign(nil); Exit; end; PictureStream := ADOQuy.CreateBlobStream(ADOQuy.FieldByName('图象'), bmread); JpgVehiPic.LoadFromStream(PictureStream); SetImageShowSize(ImgVehi, PnlPic.Width,PnlPic.Height, JpgVehiPic); PictureStream.Destroy; except ; end;end;
 
关于图片的存取问题,我都回答了好多次帖子了再发一次吧//****************添加信息********************************procedure TForm1.Button1Click(Sender: TObject); var jg : TJpegImage; s:TMemorystream;begin if opendialog1.FileName='' then // 判断选择图片没有 begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('insert into 表1 VALUES ('''+edit1.Text+''','''+edit2.Text+''',null)'); ADOQuery1.ExecSQL; // 没有选择图片插入时给image项置为NULL end else begin // 有图片时,就转换图片位流再保存到数据库 s:=TMemorystream.Create; s.LoadFromFile(opendialog1.FileName); ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('insert into 表1 VALUES ('''+edit1.Text+''','''+edit2.Text+''',:tmpcad)'); ADOQuery1.Parameters.ParamByName('tmpcad').LoadFromStream(s,ftBlob); ADOQuery1.Prepared; ADOQuery1.ExecSQL; end;end;//****************读取时********************************procedure TForm1.Button5Click(Sender: TObject);var s:TMemorystream; JpgFile:TjpegImage;begin ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('select * from 表1'); ADOQuery2.Open; if adoquery2.RecordCount >0 then begin edit1.Text:=adoquery2.fieldbyname('haha').AsString; edit2.Text:=adoquery2.fieldbyname('hehe').AsString; // 如果读取到的image字段(heihei)是空 if adoquery2.fieldbyname('heihei').IsNull then begin image1.Picture.LoadFromFile('./0.jpg'); exit; end else begin // 如果不是空就转换成图片显示出来 s:=TMemorystream.Create; TBlobField(ADOQuery2.FieldByName('heihei')).SaveToStream(s); s.Position :=0; JpgFile:=TjpegImage.Create ; jpgfile.LoadFromStream(s); image1.Picture.Assign(JpgFile); end; end;end;
 
多人接受答案了。
 
后退
顶部