Я пытаюсь сохранить файл jpg в SQL и отобразить его в Access FE. В SQL у меня есть таблица с varbinary (max) столбцом. В Доступе к форме, ссылающейся на поле, которое не отображает изображение, но поиск обнаружил, что, если я установлю что-то вроде Image1.PictureData = me.sqlImage
в Form_Current (), я могу получить его для отображения.
Теперь проблема. Если я вставлю изображение в T-SQL с чем-то вроде этого
UPDATE MyTableName
SET SQLImage=(SELECT * FROM OPENROWSET(BULK N'test.jpg', SINGLE_BLOB) as x)
WHERE IndexField='0123'
, оно отобразит изображение по желанию. Однако, если я попытаюсь вставить \ обновить изображение из VBA следующим образом:
Set dlgAdd = Application.FileDialog(msoFileDialogFilePicker)
With dlgAdd
.Filters.Clear
.Filters.Add "Picture Files (*.jpg, * .jpeg)", "*.jpg;*.jpeg"
.AllowMultiSelect = False
.Title = "Select Picture"
If .Show = True Then
'-- Open .Item For Binary As #1
Open .SelectedItems(1) For Binary As #1
'-- ReDim bytData(FileLen(.Item))
ReDim bytData(FileLen(.SelectedItems(1)) -1)
Else
Exit Sub
End If
End With
Get #1, , bytData
Close #1
Set DB = CurrentDb
strSQL = "SELECT * FROM MyTableName WHERE IndexField='" & Me.IndexField & "'"
Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)
RS.OpenRecordset
RS.Edit
RS.Fields("SQLImage").AppendChunk bytData
RS.Update
RS.Close
, тогда я получу прекрасный ответ: «Указанное вами растровое изображение не в формате независимого от устройства растрового изображения (.dib)»ошибка при попытке Image1.PictureData
При поиске больше я нашел ссылку на использование элемента управления веб-браузера для преобразования его в base64, который не выдает ошибку, а отображает только маленькое поле «х» вместо изображения, поэтому оно по-прежнему не отображается. работа.
Что я делаю не так, сохраняя jpg из Access VBA? Это прекрасно работает, если я вставляю изображение из T-SQL, но я хочу, чтобы пользователи обновляли изображения из FE.
Заранее спасибо,
Редактировать: Найдена статья https://rtmccormick.com/2013/08/22/select-a-file-with-file-dialog-in-ms-access-with-vba/ и изменен с .Item
на .SelectedItems(1)
. Оставил мое первоначальное использование прокомментировано для ясности. На основании комментариев проверил размер с тестовым целым числом и показывал 0 длины после открытия. Изменено на .SelectedItems(1)
и теперь ведет себя корректно. Спасибо @Charles & @Erik A за то, что я перестал фокусироваться на дереве. :)
Edit2: я включил тест, если файл выбран или отменен, если кто-то пытается скопировать \ вставить, так как я не включил все (dims и т. Д.), Но эта часть должна была быть там.