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

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

23.05.2014, 17:01. Показов 2759. Ответов 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
23.05.2014, 18:39
Вставить картинку можно одним из миллионов способов, каким образом вставлялись картинки в эту БД?
0
0 / 0 / 0
Регистрация: 13.10.2010
Сообщений: 22
23.05.2014, 19:41  [ТС]
Через добавление объекта - Bitmap image
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru