【发布时间】:2022-07-09 11:55:49
【问题描述】:
我有一个 Excel 宏,用于对用户还附加图像的工作订单进行 CRUD。所有内容都保存到 SharePoint 文件夹上的 Access db。
例如,创建了部门 A 的工作订单,并且我们将图片附加到 Access 表中的附件字段的记录中。 A 部门通过已通过 SharePoint 共享的 Access 数据库接收工单。
所有用户都使用相同的工作簿、宏、代码等。
使用图像更新记录后,将显示以下内容:
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim rs As DAO.Recordset, rsP As Variant, strFile As String
Dim rsStat As DAO.Recordset
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(db_path.Value, False, False, "MS Access;PWD=" & p.Value)
Set rsStat = db.OpenRecordset("SELECT STATUS FROM womhst WHERE wo_no = " & wo_no)
If rsStat.Fields(0).Value = "Closed" Then
btnAddPic.Enabled = False
Else
If Not user_role.Value = 4 Then
btnAddPic.Enabled = False
Else
btnAddPic.Enabled = True
End If
End If
Set rs = db.OpenRecordset("SELECT vio_image FROM womhst WHERE wo_no = " & wo_no)
Set rsP = rs.Fields("vio_image").Value
If rsP.RecordCount = 1 Then iAtt.Picture = LoadPicture(rsP.Fields(2).Value)
如果我从我的机器上运行它,图像会显示在图像控件中。
但是,当我从其他用户的计算机上运行宏并连接到通过 SharePoint 文件夹共享的 Access db 时,当我尝试显示图像时出现“找不到文件”错误。
我知道以下几点:
- 已在第二个用户的计算机中更新了访问权限。如果我在该用户的机器上打开加密的数据库,我可以看到该字段包含所有应有的图像。
- 表格上还有其他字段,宏也在读取这些字段。所有这些都读得很好。如果我在一台机器上对表进行更新,则会反映更改,并且宏会读取它们(仅附件字段中的文件存在问题)
- Access 正在将图像保存到每台机器的缓存中
在我尝试从第二个用户的机器上查看图像(并得到错误)后,我回到我的机器上。此时,我也开始收到“找不到文件”错误。
我认为这与缓存路径有关。
图片更新到Access的代码:
Dim db As DAO.Database
Dim ws As DAO.Workspace
Dim rst As DAO.Recordset
Dim attachFld As DAO.Recordset
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(db_path.Value, False, False, "MS Access;PWD=" & p.Value)
Set rst = db.OpenRecordset("SELECT * FROM womhst WHERE wo_no = " & wo_no & ";", dbOpenDynaset)
rst.FindFirst "wo_no = " & wo_no
If Not rst.NoMatch Then
rst.Edit
Set attachFld = rst.Fields("vio_image").Value
'If record alrady has an image, delete such that there always only one file saved
If attachFld.RecordCount <> 0 Then
attachFld.Delete
End If
attachFld.AddNew
'user can get the file with the file dialog
Dim objFSO As New FileSystemObject
Dim fileSelected As String
Dim myFile As Object
Set myFile = Application.FileDialog(msoFileDialogOpen)
With myFile
.Title = "Choose File"
.AllowMultiSelect = False
If .Show <> -1 Then
Exit Sub
End If
fileSelected = .SelectedItems(1)
End With
attachFld.Fields("FileData").LoadFromFile fileSelected
attachFld.Update
rst.Update
End If
rst.Close
db.Close
ws.Close
【问题讨论】:
标签: excel vba database ms-access dao