我们原先使用的是Access 97,存放了个人资料(姓名、性别、照片等等,其中照片使用的是ole 对象),现在系统升级了,要求把Access的数据导入到Sql 2000中,可是导入成功后发现delphi的DbImage不支持转入的格式,提示:Bitmap image is not valid.我查了一些文章,可是还是没能解决,特地来请教大家,先谢过了!
其中有篇文章介绍了VB的解决办法,不知道Delphi能不能?下面是这篇文章:
Access数据库的OLE型字段中存放的图形是按OLE格式存放的图像,而不是VB的Image控件或Picturebox控件所支持的标准图片格式(.bmp、.rle、.ico、.gif、.jpg、.emf和.wmf),所以不能使用Image控件或Picturebox控件来观看。应该使用VB的OLE控件,该控件在工具条中如右图所示。我们以VB5目录下的NWIND.MDB文件为例说明这一过程。首先在窗体上添加Data控件(以下称为Data1),将Database设为NWIND.MDB文件,然后将RecordSource属性设为Employees表。再在窗体上添加OLE控件,此时VB会显示一个对话框让你选择文件类型,按“取消”键(如果这时你误按了“确定”键,则需将OLE控件的Class属性置为空。)。设置DataSource为Data1,DataField为Photo(这是一个OLE图形字段)。这时你再运行就可以得到想要的结果了。这个技巧也适用VB 4.0的32位版本。如果是使用VB 4.0的16位版本或VB 3.0, 不能使用这一技巧,可以访问Microsoft Knowledge Base(http://support.microsoft.com/default.aspx),其中的Q147727 是针对VB 4.0的16位版本,Q113957则针对VB 3.0。从这两篇文章中,你也可以了解到Access 1.x和2.0是怎样存储OLE字段的。
其中有篇文章介绍了VB的解决办法,不知道Delphi能不能?下面是这篇文章:
Access数据库的OLE型字段中存放的图形是按OLE格式存放的图像,而不是VB的Image控件或Picturebox控件所支持的标准图片格式(.bmp、.rle、.ico、.gif、.jpg、.emf和.wmf),所以不能使用Image控件或Picturebox控件来观看。应该使用VB的OLE控件,该控件在工具条中如右图所示。我们以VB5目录下的NWIND.MDB文件为例说明这一过程。首先在窗体上添加Data控件(以下称为Data1),将Database设为NWIND.MDB文件,然后将RecordSource属性设为Employees表。再在窗体上添加OLE控件,此时VB会显示一个对话框让你选择文件类型,按“取消”键(如果这时你误按了“确定”键,则需将OLE控件的Class属性置为空。)。设置DataSource为Data1,DataField为Photo(这是一个OLE图形字段)。这时你再运行就可以得到想要的结果了。这个技巧也适用VB 4.0的32位版本。如果是使用VB 4.0的16位版本或VB 3.0, 不能使用这一技巧,可以访问Microsoft Knowledge Base(http://support.microsoft.com/default.aspx),其中的Q147727 是针对VB 4.0的16位版本,Q113957则针对VB 3.0。从这两篇文章中,你也可以了解到Access 1.x和2.0是怎样存储OLE字段的。
如果不行,你用OLE控件另存为一个文件,再将这个文件用下面的方法存入库中。
var
sFileName :string; function BlobContentToString(const FileName: String): String;
begin
with TFileStream.Create(FileName, fmOpenRead) do
try
SetLength(Result,Size);
read(Pointer(Result)^,Size);
finally
Free;
end;
end;begin
if (OpenDialog1.Execute) then
begin
sFileName :=OpenDialog1.FileName;
frmData.cdsHtyg.edit;
frmData.cdsHtyg.fieldByName('原稿内容').AsString:=BlobContentToString(sFileName);
frmData.cdsHtyg.Post;
end;
我现在想问的是:Delphi的DbImage是否支持BMP格式?如果是,那么就说明Access数据库的OLE型字段中存放的图形是按OLE格式存放的图像,而不是Delphi的DbImage控件所支持的标准图片格式。
#################################################################################
请哪位高手试着将包含ole对象(存入照片信息)的Access数据库导入到Sql2000,然后通过Delphi的DbImage控件显示出对应字段的照片。
#################################################################################
再次感谢大家的热情帮助^-^
我想说的是如果能直接将包含ole对象(存入照片信息)的Access数据库导入到Sql2000,然后通过Delphi的DbImage控件显示出对应字段的照片那就万事大吉了。可是我试着这么做没能成功,大家还有什么好办法吗?