使用 SQL 服务器后端将图片插入到 Access table

Insert a picture into a Access table with a SQL Server Backend

我需要将图像插入 MS Access 表单(不是 link,因为它是许可证,需要加密和保护)。我有一个 MS Access 前端和一个 SQL 服务器后端。这是插入的代码

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

我有一个包含所有其他数据的 table 和一个名为 LicencePicture1 的列,数据类型设置为 IMAGE 我也尝试将其设置为VARBINARY(MAX)。谁能指出我做错了什么的正确方向?

嗯,一步一个脚印(加密可以是第 2 部分)。

因此,出于某种原因,varbinary(max) 列不适用于标准 odbc 驱动程序。 但是,如果您创建 sql 服务器图像列,则它 can/will 有效。

第一步?使用新的图像控件 - 而不是功能区中的 oleDB。

所以,选择这个:

接下来,您发现如果将该图像控件绑定到数据库列(链接 table 到 sql 服务器),它将不起作用。

但是,您仍然可以将图像文件(作为原始二进制文件)推入该列,并保存当前记录。

而且还可以显示。

因此,您可以导航到给定的记录,然后说有一个按钮可以浏览到给定的文件 - 与您拥有的类似。

所以,我们有这个:

  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

所以,现在的结果是这样的:

如果您只将表单加载到一个 reocrd,则将代码放入表单加载事件中“设置”图像。

但是,如果允许导航,则必须使用on-current来自动显示图像。

但是,至少现在有了新的图像控件(我认为是 2010 年??),那么您就不需要很多特殊代码了。

所以上面将二进制图片(原始)保存到sql服务器: