SQL Server 2012中作为Varbinary(MAX)的照片在Access 2010中导致错误502753
我有一个Access 2010 odbc前端和一个SQL Server 2012后端。我的图像(SQL Server 2012中作为Varbinary(MAX)的照片在Access 2010中导致错误502753,sql,ms-access,sql-server-2012,ms-access-2010,varbinarymax,Sql,Ms Access,Sql Server 2012,Ms Access 2010,Varbinarymax,我有一个Access 2010 odbc前端和一个SQL Server 2012后端。我的图像(.bmp)存储为Varbinary(Max)。当我在Access窗体中使用绑定对象框插入图像时,图像将完美地显示在窗体和报表上。我需要将大量图片引入SQL,因此在SQL Server Management Studio中使用了以下代码: UPDATE dbo.Photos_Observations SET [Photo] = (SELECT BulkColumn FROM Openrowset(
.bmp
)存储为Varbinary(Max)
。当我在Access窗体中使用绑定对象框插入图像时,图像将完美地显示在窗体和报表上。我需要将大量图片引入SQL,因此在SQL Server Management Studio中使用了以下代码:
UPDATE dbo.Photos_Observations
SET [Photo] = (SELECT BulkColumn
FROM Openrowset( Bulk '\\serverIP\servername\020.BMP', Single_Blob) as MyImage)
WHERE PhotoTableID =391
这很有效,所有600多张图片现在都在SQL Server中。但我以这种方式添加的内容不会显示在我的访问表单或报告中。单击绑定的对象框时,出现错误号502753“Microsoft Access与OLE服务器或ActiveX控件通信时出现问题。”
为什么它以一种方式工作而不是另一种方式?如何获取要显示的图像?看起来您使用T-SQL将原始二进制图像数据直接从BMP文件批量插入到VARBINARY列中。因此,这些图像没有通过访问表单上的绑定对象框插入图像时添加的“OLE包装器” 有关自动插入“OLE包装”图像的方法,请参见。(虽然有点笨重,但还是比手工操作要好。)
另一种方法是使用图像控件而不是绑定对象帧,并将图像存储为原始二进制数据而不是“OLE包装”对象。这正日益成为处理存储在数据库中的图像的首选方式。(OLE对象可能会造成麻烦,尤其是在使用Access以外的应用程序时。)感谢您的快速响应!有没有一种方法可以通过编程方式将OLE包装器添加到我的现有数据中?如果您仍然有BMP文件,您可以从SQL表中删除原始二进制数据,然后使用Access automation通过绑定对象框重新插入图像,如我的另一个回答中所述。否则,在从表中删除二进制数据之前,可以将原始二进制数据从SQL表中转储回各个BMP文件中。