使用 SQL Server 后端将图片插入到 Access 表中
Posted
技术标签:
【中文标题】使用 SQL Server 后端将图片插入到 Access 表中【英文标题】:Insert a picture into a Access table with a SQL Server Backend 【发布时间】:2021-09-21 00:14:17 【问题描述】:我需要将图像插入 MS Access 表单(不要链接它,因为它是一个许可证,并且需要加密和保护)。我有一个 MS Access 前端和一个 SQL Server 后端。这是插入的代码
Private Sub AddLicence1Picture_Click()
Dim f As Object
Set f = Application.FileDialog(1)
f.allowmultiselect = False
If (f.Show = True) Then
Me![LicencePicture1].Picture = f.selecteditems(1)
End If
End Sub
我有一个包含所有其他数据的表和一个名为LicencePicture1
的列,数据类型设置为IMAGE
,我也尝试将其设置为VARBINARY(MAX)
。谁能指出我做错了什么的正确方向?
【问题讨论】:
当您说“SQL 后端”时,您实际上是指“SQL Server 后端”吗? (SQL 本身不是数据库)。你绝对应该使用VARBINARY(MAX)
而不是IMAGE
。
是的,它是一个 SQL server 后端
没问题,完成。
【参考方案1】:
嗯,一次一步(加密可以是第 2 部分)。
因此,由于某种原因,varbinary(max) 列不适用于标准 odbc 驱动程序。 但是,如果您创建 sql server image 列,那么它可以/将会工作。
第一步?使用新的图像控件 - 而不是功能区中的 oleDB。
所以,选择这个:
接下来,你会发现如果你将那个图像控件绑定到数据库列(将表链接到 sql server),它将不起作用。
但是,您仍然可以将图像文件(作为原始二进制文件)推入该列,并保存当前记录。
而且还可以显示。
因此,您可以导航到给定的记录,然后说有一个按钮来浏览给定的文件 - 类似于您所拥有的。
所以,我们有这个:
Private Sub cmdFile_Click()
Dim f As FileDialog
Set f = Application.FileDialog(msoFileDialogFilePicker)
f.Show
If f.SelectedItems.Count > 0 Then
Me.txtFile = f.SelectedItems(1)
End If
End Sub
好的,这样就可以把图片路径放到一个未绑定的文本框中了。
到目前为止我们有这个:
现在,请注意保存到数据库按钮。该按钮的代码如下所示:
Private Sub cmdSaveToDB_Click()
' save current record
If Me.Dirty Then Me.Dirty = False
Dim MyImage() As Byte
MyImage = GetFileBytes(Me.txtFile)
Me!ImageB = MyImage
Me.Dirty = False
End Sub
我们还需要这个二进制文件读取例程——它使用文本框中的路径名
Public Function GetFileBytes(ByVal path As String) As Byte()
Dim lngFileNum As Long
Dim bytRtnVal() As Byte
lngFileNum = FreeFile
If LenB(Dir(path)) Then ''// Does file exist?
Open path For Binary Access Read As lngFileNum
ReDim bytRtnVal(LOF(lngFileNum) - 1&) As Byte
Get lngFileNum, , bytRtnVal
Close lngFileNum
Else
Err.Raise 53
End If
GetFileBytes = bytRtnVal
Erase bytRtnVal
End Function
就是这样。
如前所述,唯一的问题是我们无法将图片框直接绑定到表单数据源。
但是,你可以这样做:
所以,在上面,放了一个按钮来显示图片。
看起来像这样:
Private Sub cmdShowFromDB_Click()
Me.Image1.PictureData = Me.Recordset!ImageB
End Sub
所以,结果现在看起来像这样:
如果您只将表单加载到一个记录,则将代码“设置”在表单加载事件中。
但是,如果您允许导航,那么您必须使用 on-current 来自动显示图像。
但是,至少现在有了新的图像控件(我认为是 2010 年??),那么您不需要很多特殊代码。
所以上面将二进制图片(原始)保存到sql server:
【讨论】:
对不起,伙计,我正在处理这段代码,我在下面的代码行中遇到了错误 MyImage = GetfileBytes(Me.TxtFile) 我收到错误 Compile error: sub or function not定义我不是一个强大的程序员,我完全是自学的,所以我有点挣扎。 好吧,在同一个代码模块中,您必须放置 GetFileBytes() 例程。然后 GetFileBytes 可以在其他代码例程中用作(调用)函数。 对不起,伙计,我不明白你的意思。抱歉,我知识贫乏。 好吧,我按照你上面说的做了,但是现在不知道怎么称呼? 好吧,既然你把那个辅助函数放在同一个代码模块中,那么你的 GetFileBytes() 错误就不会再发生了。因此,您可以为测试在表单上放置一个按钮来保存图片。然后为了测试,在表单上放一个按钮来加载图片。所以这个表格将用于“暂存”图片。因此,此表格将用于将图片添加和保存到数据库中。不清楚是否所有用户都需要这个能力,或者一个特殊的人会加载+保存图片到数据库。然而,虽然上面确实将图片保存到数据库,但通常最好只保存路径名。以上是关于使用 SQL Server 后端将图片插入到 Access 表中的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 表单不允许添加 SQL Server 后端
如何使用 Ruby 作为后端将 React 上的图像上传到 Google Cloud Storage
在 Azure 移动应用服务后端将字符串属性反序列化为 Json 对象