Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 13.10.2010
Сообщений: 22

Вставка картинки в таблицу Access через OLE (VB6)

23.05.2014, 17:01. Показов 2783. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть таблица в Access 2003 с полем объекта OLE, в котором хранятся картинки jpg. И есть форма с OLE куда картинка загружается из базы. Я не могу понять как сделать связь в обратную сторону, чтобы через форму в таблицу загружать картинку, при добавлении новой записи или изменении существующей. Заранее благодарен за помощь.
P.S. мои знания vb равны 6 часам, так что сильно не бейте.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2014, 17:01
Ответы с готовыми решениями:

Вставка записей в таблицу Access через VB6
Всем добрый день! Уважаемые, нужна ваша помощь. Возникла такая проблема. В разработке для ввода данных в таблицу использую...

Вставка OLE объекта в таблицу через форму
Ребята, подскажите, пожалуйста, как реализовать это? Нужно, чтобы на форме при клике на кнопку открывался файловый диалог для выбора...

Загрузка картинки из Access поля Ole
Подскажите как реализовать подгрузку картинки из базы Access поля Ole при нажатие на кнопку, загрузка картинки в PictureBox

3
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
23.05.2014, 18:39
Вставить картинку можно одним из миллионов способов, каким образом вставлялись картинки в эту БД?
0
0 / 0 / 0
Регистрация: 13.10.2010
Сообщений: 22
23.05.2014, 19:41  [ТС]
Через добавление объекта - Bitmap image
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
25.05.2014, 05:41
Лучший ответ Сообщение было отмечено The trick как решение

Решение

tengar, лучше отказаться от этого способа + все остальные форматы кроме bmp (dib) грузятся как объекты упаковщика оболочки, а загружать сразу "сырой" файл, т.к. для чтения потом нужно парсить OLE заголовок. Как в твоей БД на VB6 организован вывод картинки?
Вот я накидал пример чтения OLE поля в котором лежит картинка, вставленная стандартными средствами ACCESS либо сырая из таблицы, в интернете нигде не нашел подобного только на древнем VB3 (Q113957), и то там неправильно организовано, хотя возможно и мой способ имеет недостатки (это нужно проверять индивидуально).
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
Option Explicit
 
Private Declare Sub memcpy Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetMem4 Lib "msvbvm60" (Src As Any, Dst As Any) As Long
Private Declare Function lstrcpyn Lib "kernel32" Alias "lstrcpynA" (lpString1 As Any, lpString2 As Any, ByVal iMaxLength As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
Private Declare Function CreateStreamOnHGlobal Lib "ole32.dll" (hGlobal As Any, ByVal fDeleteOnResume As Long, ppstr As Any) As Long
Private Declare Function OleLoadPicture Lib "olepro32.dll" (ByVal lpStream As IUnknown, ByVal lSize As Long, ByVal fRunMode As Long, riid As Any, lplpObj As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32.dll" (ByVal lpsz As Long, pclsid As Any) As Long
 
Private Const IID_IPicture As String = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"
 
Private Const OBJECT_SIGNATURE = &H1C15
Private Const OBJECT_HEADER_SIZE = 20
 
Private Type PT
    Width               As Integer
    Height              As Integer
End Type
Private Type OBJECTHEADER
   Signature            As Integer         '0x1c15
   HeaderSize           As Integer
   ObjectType           As Long
   NameLen              As Integer
   ClassLen             As Integer
   NameOffset           As Integer
   ClassOffset          As Integer
   ObjectSize           As PT
End Type
Private Type OLEHEADER
   OleVersion           As Long
   Format               As Long
   OleTypeNameLength    As Long
End Type
 
Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
    Dim z()         As Byte
    Dim f           As Field
    Dim p           As Long
    Dim guid(15)    As Byte
    Dim pic         As IPicture
    Dim stm     As IUnknown
    Dim dat()   As Byte
 
    If pRecordset.EOF Or pRecordset.BOF Then Exit Sub
    
    Set f = pRecordset.Fields(3)
    
    CLSIDFromString StrPtr(IID_IPicture), guid(0)
 
    
    If f.ActualSize > OBJECT_HEADER_SIZE Then
        Dim hdr     As OBJECTHEADER
        Dim Name    As String
        Dim Class   As String
    
        z = f.Value
        
        Open "D:\Temp\Temp.dat" For Binary As 1
        Put 1, , z
        Close 1
    
        memcpy hdr, z(0), OBJECT_HEADER_SIZE
        
        If hdr.Signature <> OBJECT_SIGNATURE Then
            ' Сырые данные
            
            If CreateStreamOnHGlobal(z(0), False, stm) = 0 Then
                OleLoadPicture stm, UBound(z) + 1, False, guid(0), pic
                Set picPictureBox = pic
                Set stm = Nothing
            End If
        Else
            ' OLE обертка
            Name = Space(hdr.NameLen - 1)
            lstrcpyn ByVal Name, z(hdr.NameOffset), hdr.NameLen
            Class = Space(hdr.ClassLen - 1)
            lstrcpyn ByVal Class, z(hdr.ClassOffset), hdr.ClassLen
            
            Dim olehdr  As OLEHEADER
            Dim typName As String
            Dim size(2) As Long
            
            memcpy olehdr, z(hdr.HeaderSize), Len(olehdr)
            p = hdr.HeaderSize + 12
            typName = Space(olehdr.OleTypeNameLength - 1)
            lstrcpyn ByVal typName, z(p), olehdr.OleTypeNameLength
            p = p + olehdr.OleTypeNameLength
            
            Select Case typName
            Case "PBrush"
                memcpy size(0), z(p), 12
                ReDim dat(size(2) - 1)
                memcpy dat(0), z(p + 12), size(2)
            Case "Package"
                Dim l       As Long
                Dim fName   As String
                Dim fPath   As String
                Dim Path    As String
                ' Получаем имя файла
                p = p + 14
                l = lstrlen(z(p))
                fName = Space(l)
                lstrcpyn ByVal fName, z(p), l + 1
                ' Получаем полный путь
                p = p + l + 1
                l = lstrlen(z(p))
                fPath = Space(l)
                lstrcpyn ByVal fPath, z(p), l + 1
                p = p + l + 5
                GetMem4 z(p), l
                Path = Space(l - 1)
                p = p + 4
                lstrcpyn ByVal Path, z(p), l
                p = p + l
                GetMem4 z(p), l
                ReDim dat(l - 1)
                memcpy dat(0), z(p + 4), l
            End Select
            
            If CreateStreamOnHGlobal(dat(0), False, stm) = 0 Then
                OleLoadPicture stm, size(2), False, guid(0), pic
                Set stm = Nothing
            End If
            
            Set picPictureBox = pic
        End If
    End If
End Sub
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2014, 05:41
Помогаю со студенческими работами здесь

Чтение Ole картинки из Access 2010 в с# VisualStudio 2008 win 7
Помогите пожалуйста избавиться от ошибки &quot;Недопустимый параметр&quot; при попытке создать Image объект из потока MemoryStream Вот код.. ...

Вставка картинки в таблицу
Добрый. Устал уже бороться. Имеем таблицу типа &lt;table&gt;&lt;tr&gt;&lt;td&gt;любой текст&lt;/td&gt;&lt;td&gt;&lt;img...

Вставка картинки в таблицу MySQL
Какой тип данных для вставки картинок в таблицу базы данных mysql в phpmyadmin?

Вставка картинки из Access на форму
Есть база на аксесе, в ней имеются фотографии (поле Ole), к DataGridView подключил саму базу, картинки там не выводятся. Есть ли способы...

Вставка картинки в таблицу sql server 2008
Здравствуйте. Меня интересует, как можно вставить изображение в столбец таблицы БД sql server 2008. Там есть тип для столбца image, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru