SQL Server 2012 中的照片作为 Varbinary(MAX) 在 Access 2010 中导致错误 502753

Photos as Varbinary(MAX) in SQL Server 2012 causes error 502753 in Access 2010

我有一个 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( Bulk '\serverIP\servername0.BMP', Single_Blob) as MyImage) 
WHERE PhotoTableID =391

效果很好,所有 600 多张图片现在都在 SQL 服务器中。但是我以这种方式添加的那些不会显示在我的访问表单或报告中。当我点击绑定对象框架时,我得到错误号 502753 "A problem occurred while Microsoft Access was communicating with the OLE server or ActiveX control."

为什么它以一种方式起作用而不是另一种方式?如何让图片显示?

您似乎使用 T-SQL 将原始二进制图像数据直接从 BMP 文件批量插入到 VARBINARY 列中。因此,这些图像没有在通过 Access 窗体上的绑定对象框架插入图像时添加的 "OLE wrapper"。

有关自动插入 "OLE wrapped" 图像的方法,请参阅 my answer to a related question。 (这有点笨重,但总比手工完成要好。)

另一种方法是使用图像控件而不是绑定对象框架,并将图像存储为原始二进制数据而不是 "OLE wrapped" 对象。这越来越成为处理存储在数据库本身中的图像的首选方式。 (OLE 对象可能很麻烦,尤其是在使用 Access 以外的应用程序时。)