在 Access 报告中仅查看最近添加的附件
Posted
技术标签:
【中文标题】在 Access 报告中仅查看最近添加的附件【英文标题】:View only most recently added attachment in Access report 【发布时间】:2018-05-16 17:17:09 【问题描述】:我正在使用访问数据库作为我们游泳池的会员管理应用程序。我使用报告打印出所有带有照片 ID 的季票。该报告使用查询仅打印已拍照的顾客的通行证。
SELECT tblPassHolders.[PASS HOLDER NAME], tblPassHolders.PHOTO.FileData, tblPassHolders.BARCODE, tblPassHolders.[FAMILY PASS], tblFamilyPass.Expires
FROM tblFamilyPass INNER JOIN tblPassHolders ON tblFamilyPass.ID = tblPassHolders.FamilyID
WHERE (((tblPassHolders.PHOTO.FileData) Is Not Null) AND ((tblFamilyPass.Expires)>Now()) AND ((tblPassHolders.Printed)=False));
这是使用该应用程序的第二年,我遇到的问题是,当人们为他们的通行证重新拍照时,我的报告会打印出一张通行证,每个附上照片附件到他们的记录。
我仍然是 Access 的业余爱好者,我正在努力弄清楚如何编辑我的报告/查询,以便报告只会为每个使用最近照片的顾客打印 一个通行证附在他们的记录上。一种解决方案是简单地删除旧照片,因此只有一个附件,但我想弄清楚即使有多个附件如何使它工作。我一直在玩DLast()
,但我很确定我做错了。
如何进行只显示最近添加的附件的查询?
【问题讨论】:
请发布您用来提供帮助的查询。可能你应该有一个过滤器 (WHERE
) 只拍摄最近的照片
@serakfalcon 查看添加的照片。
为什么要保留多张照片?为什么不换照片?尝试 TOP 1 子查询。评论allenbrowne.com/subquery-01.html#TopN
很难用您发布的设计模式图像找出您的数据和查询。我们在这里主要讨论 SQL。因此,在查询设计器中,点击左上角的SQL View
按钮,复制 SQL 代码并将其粘贴到您的问题中。
以后您可以随时修改上传代码,将当前文件名更改为“000000-latestpic”之类的名称。这会将它带到列表的顶部,后续添加会询问您是否要替换该文件
【参考方案1】:
这是我建议您可以做的一个示例,而不是查找最近添加的附件。
如前所述,除非您实施某种命名约定,将最新文件弹出到顶部,否则这是不可能的,因为 Microsoft 按文件名顺序显示附件字段。
这是一个示例,您可以使用按钮来控制插入附件。 它基于Stack Overflow example
完成测试后,您可以将Cancel=True
添加到Photo_DblClick
事件以完全控制您的照片附件字段
Private Sub cmdAddNewPhoto_Click()
Dim rsPhotos As DAO.Recordset2
Dim rsParent As DAO.Recordset2
Dim strImagePath As String
If MsgBox("Add New Photo?", vbQuestion + vbOKCancel, "Add Photo?") = vbOK Then
' Get New Photo
' Note that you need to add a reference to Microsoft Office ##.0 Object Library
' using Tools | References... from the VBA interface for the file picker to work
With Application.FileDialog(msoFileDialogFilePicker)
' Prevent multiple selections
.AllowMultiSelect = False
' Set the caption of the dialog box
.Title = "Please select a photo"
' Add filters for common image formats
.Filters.Clear
.Filters.Add "JPG Files (JPG)", "*.JPG"
.Filters.Add "JPEG Files (JPEG)", "*.JPEG"
.Filters.Add "PNG Files", "*.PNG"
.Filters.Add "Bitmap Files", "*.BMP"
If .Show = True Then ' File selected
strImagePath = .SelectedItems.item(1)
End If
End With
If strImagePath <> "" Then
' First clear all old photos if desired
If Photo.AttachmentCount > 0 Then
If MsgBox("Clear Previous Photo(s)?", vbQuestion + vbOKCancel, "Remove All Photos?") = vbOK Then
' Clear previous attachments
' (we only want one attachment at a time)
Set rsPhotos = Me.Recordset.Fields("Photo").Value
With rsPhotos
Do While Not .EOF
.Delete
.MoveNext
Loop
.Close
End With
' Clear last displayed photo
Photo.Requery
End If
End If
' Put parent record in edit mode
Set rsParent = CurrentDb.OpenRecordset(Me.RecordSource, dbOpenDynaset)
With rsParent
' Get Cureent Matching Record using Primary Key
.FindFirst "BarCode = " & Me!barcode
.Edit
DoEvents
End With
' Next Add the attachment selected by the user
Set rsPhotos = rsParent.Fields("Photo").Value
With rsPhotos
.AddNew
.Fields("FileData").LoadFromFile strImagePath
If Photo.AttachmentCount > 0 Then
' Rename so it pops up to first file - and keep extension
.Fields("Filename").Value = "00000LatestPic" & Mid$(strImagePath, InStrRev(strImagePath, "."))
End If
.Update
.Close
End With
' Update the parent record
With rsParent
.Update
.Close
End With
Set rsPhotos = Nothing
Set rsParent = Nothing
' Refresh Photo Display
Photo.Requery
End If
End If
End Sub
【讨论】:
以上是关于在 Access 报告中仅查看最近添加的附件的主要内容,如果未能解决你的问题,请参考以下文章