用Access做的数据库,其中有一个字段类型为OLE,用来存放BMP的图像文件。在Access中可以很好的预览这些图片。但是在delphi中用data control中的DBimage控件没有办法预览,报错“Bitmap image is not valid”.请问,采用什么方法才能正确的读取、预览这些图片。谢谢
----------------------------------------------
-
摘自李维的电子书《Delphl5.x ADO/MTS/CoM+高级程序设计篇》 p r o c e d u r e TForm1.btnTargetClick(Sender: TObject); v a r sFileName : String; f u n c t i o n B l o b C o n t e n t T o S t r i n g (c o n s t FileName: string): string; b e g i n w i t h TFileStream.create(FileName, fmOpenRead) d o t r y SetLength(Result, Size); Read(Pointer(Result)^, Size); f i n a l l y F r e e ; e n d ; e n d ; b e g i n i f (OpenDialog1.Execute) t h e n b e g i n sFileName := OpenDialog1.FileName; a d o d s B l o b s . E d i t ; adodsBlobs.FieldByName('Blobs').AsString := B l o b C o n t e n t T o S t r i n g ( s F i l e N a m e ) ; a d o d s B l o b s . P o s t ; e n d ; e n d ; 至于B l o b C o n t e n t To S t r i n g方法则是使用T F i l e S t r e a m对象从打开的文档中读取 数据,并且把文档内容转换为字符串流。 9) 双击“显示B l o b内容”按钮,在它的事件处理程序中撰写如下的程序代码: p r o c e d u r e TForm1.btnShowBlobsClick(Sender: TObject); v a r sFileName: String; BS : TADOBlobStream; b e g i n BS := T A D O B l o b S t r e a m . C r e a t e ( T B l o b F i e l d ( a d o d s B l o b s . F i e l d B y N a m e ( ' B l o b s ' ) ) , b m R e a d ) ; t r y sFileName := ExtractFilePath(Application.ExeName)+'tmpBlob'; sFileName := sFileName + '.' + a d o d s B l o b s . F i e l d B y N a m e ( ' E x t e n s i o n ' ) . A s S t r i n g ; B S . S a v e T o F i l e ( s F i l e N a m e ) ; OleContainer1.CreateObjectFromFile(sFileName, False); f i n a l l y // wrap up B S . F r e e ; e n d ; // try/finally e n d ;
----------------------------------------------
-