我用的数据库是MS-SQL Server2000,我在其中一个数据表中设了image类型的字段,用来存储文件,请问在客户端的程序中应该怎么把文件写入数据库,又怎样把文件取出来使用,急用,能给点代码作示例最好,感激!

解决方案 »

  1.   

    读: 
    TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");TBlobStream * pmem=new TBlobStream(pField,bmRead);pmem->Seek(0,soFromBeginning);Graphics::TBitmap * pBitmap=new Graphics::TBitmap();pBitmap->LoadFromStream(pmem);Image1->Picture->Assign(pBitmap);delete pBitmap;delete pmem;写:TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");TBlobStream * pmem=new TBlobStream(pField,bmWrite);pmem->Seek(0,soFromBeginning);Graphics::TBitmap * pBitmap=new Graphics::TBitmap();pBitmap->Assign(Image1->Picture->Graphic);pBitmap->SaveToStream(pmem);delete pBitmap;delete pmem;注意:一定要用此方法进行读写,因为实际上它是以二进制流的方式存入数据库! 
     
      

  2.   


    存到数据库
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pjpg.LoadFromFile(F:\JPG.jpg);
    pic:=TMemoryStream.Create;
    pjpg.SaveToStream(pic);
    pic.Position:=0;
    TBlobField(dataset.FieldByName('Img')).LoadFromStream(pic);
    dataset.post;
    pic.Free;
    pjpg.free;
    end;
    从数据库取出
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pic:=TMemoryStream.Create;
    TBlobField(dataset.FieldByName('Img')).savetoStream(pic);
    pic.positon:=0;
    pjpeg.LoadFromStream(pic);
    image.graphi.bmp.assign(pjpeg);
    end;end;
      

  3.   

    读:
       ......
       adoq.sql.text := 'select * from tableName';
       adoq.open;
       TBlobField(adoq.fieldbyName('imgFieldName')).SaveToFile(FileName);
       adoq.close; 写 :
       adoq.sql.text := 'insert into tableName (imgFieldName) values(:img)';
       adoq.Parameters.ParameterByName('img').loadFromFile(FileName,ftBlob);
       adoq.execsql;