Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2012中作为Varbinary(MAX)的照片在Access 2010中导致错误502753_Sql_Ms Access_Sql Server 2012_Ms Access 2010_Varbinarymax - Fatal编程技术网

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

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(

我有一个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\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文件中。