Просмотреть только последнее добавленное вложение в отчете Access - PullRequest
0 голосов
/ 16 мая 2018

Я использую базу данных доступа в качестве приложения для управления членами нашего бассейна.Я использую отчет, чтобы распечатать все абонементы, которые имеют удостоверение личности с фотографией.В отчете используется запрос для печати пропусков только для тех посетителей, которые сфотографировались.

enter image description here

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));

Это второй год использования приложения, и у меня возникает проблема, когда люди снова делают свои снимки для своихpass, затем в моем отчете распечатывается пропуск для каждого фото вложения, прикрепленного к их записи

Я по-прежнему очень любитель Access, и я изо всех сил пытаюсь понять, как отредактировать мой отчет / запрос так, чтобы отчет печатал только один проход для каждого патрона, используя большинствоНедавнее фото прилагается к их записи.Одно из решений состоит в том, чтобы просто удалить старые фотографии, чтобы всегда было только одно вложение, но я хотел бы выяснить, как заставить его работать, даже если есть несколько вложений.Я играл с DLast(), но я уверен, что я делаю это неправильно.

Как сделать запрос, который покажет только последнее добавленное вложение?

1 Ответ

0 голосов
/ 17 мая 2018

Вот пример того, что я предлагал вам сделать вместо того, чтобы найти последнее добавленное вложение.

Как уже говорилось, это невозможно, если вы не реализуете какое-то соглашение об именах, которое выводит ваш последний файл наверх, потому что Microsoft показывает поле вложения в порядке имени файла.

Вот пример, который вы можете использовать кнопку для управления вставкой вложений.Он основан на примере Переполнение стека

Когда вы закончите тестирование, вы можете добавить 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
...