Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.08.2017
Сообщений: 86

Адаптация базы Под Аксесс 64бит

24.04.2018, 14:55. Показов 1349. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начну сразу с вопроса. Возможно ли это? А то очередная беда пришла сисадмин новый Офис поставил. По его мнению 32бит это вчерашний день... От такого внезапно свалившегося счастья все Базы которые ранее исправно работали разом засияли краснотой. Порывшись в сети как казалось выявил решение проблемы. Это замена Declare Function на Declare PtrSafe Function с использованием "#If Win64 Then", "#Else", "#End If". В общем нашел образцы http://www.cadsharp.com/docs/Win32API_PtrSafe.txt. Красным где надо теперь не горит, однако Аксесс все равно ругается. Похоже проблема серьезней...
Не работает несколько модулей взятых мною из баз уважаемых форумчан, размещенных в разделе наработок.
Модуль блокировки кнопки выхода.
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
Option Compare Database
Option Explicit
'Блокировка закрытия окна Access
 
#If VBA7 Then
'-----------------------------------------[Api функции 64 бит]
Private Declare PtrSafe Function GetSystemMenu Lib "user32" (ByVal hwnd As LongPtr, _
   ByVal bRevert As LongPtr) As LongPtr
Private Declare PtrSafe Function EnableMenuItem Lib "user32" (ByVal hMenu As _
   LongPtr, ByVal wIDEnableItem As LongPtr, ByVal wEnable As LongPtr) As LongPtr
Declare PtrSafe Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As _
   LongPtr, ByVal un As Long, ByVal b As Long, lpMenuItemInfo As MENUITEMINFO) As Long
   
#Else
'-----------------------------------------[Api функции 32 бит]
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _
   ByVal bRevert As Long) As Long
 
Private Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As _
   Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long
 
Private Declare Function GetMenuItemInfo Lib "user32" Alias _
   "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As _
   Long, lpMenuItemInfo As MENUITEMINFO) As Long
 
#End If
 
#If VBA7 Then
Private Type MENUITEMINFO
#Else
Private Type MENUITEMINFO
#End If
    cbSize As Long
    fMask As Long
    fType As Long
    fState As Long
    wID As Long
#If VBA7 Then
    hSubMenu As LongPtr
    hbmpChecked As LongPtr
    hbmpUnchecked As LongPtr
    dwItemData As LongPtr
#Else
    hSubMenu As Long
    hbmpChecked As Long
    hbmpUnchecked As Long
    dwItemData As Long
#End If
    dwTypeData As String
    cch As Long
#If VBA7 Then
    '#if(WINVER >= 0x0500)
    hbmpItem As LongPtr
    '#endif /* WINVER >= 0x0500 */
#End If
End Type
 
Const MF_GRAYED = &H1&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060&
 
Public Property Get Enabled() As Boolean
    #If VBA7 Then
    Dim hwnd As LongPtr
    #Else
    Dim hwnd As Long
    #End If
    #If VBA7 Then
    Dim hMenu As Long
    #Else
    Dim hMenu As LongPtr
    #End If
 
    Dim result As Long
    Dim MI As MENUITEMINFO
    
    MI.cbSize = Len(MI)
    MI.dwTypeData = String(80, 0)
    MI.cch = Len(MI.dwTypeData)
    MI.fMask = MF_GRAYED
    MI.wID = SC_CLOSE
    hwnd = Application.hWndAccessApp
    hMenu = GetSystemMenu(hwnd, 0)
    result = GetMenuItemInfo(hMenu, MI.wID, 0, MI)
    Enabled = (MI.fState And MF_GRAYED) = 0
End Property
 
Public Property Let Enabled(boolClose As Boolean)
    #If VBA7 Then
    Dim hwnd As LongPtr
    #Else
    Dim hwnd As Long
    #End If
    Dim wFlags As Long
    #If VBA7 Then
    Dim hMenu As Long
    #Else
    Dim hMenu As LongPtr
    #End If
    Dim result As Long
    
    hwnd = Application.hWndAccessApp
    hMenu = GetSystemMenu(hwnd, 0)
    If Not boolClose Then
        wFlags = MF_BYCOMMAND Or MF_GRAYED
    Else
        wFlags = MF_BYCOMMAND And Not MF_GRAYED
    End If
    result = EnableMenuItem(hMenu, SC_CLOSE, wFlags)
End Property
И модуль открытия файла
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
Option Compare Database
 
' класс вызова диалога открытия и сохранения файла "clsOpenDialog"
Private Type OpenFileName
lpStructSize As Long
hWndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Private mstrStartDir As String
Private mstrFilter As String
Private mstrTitle As String
Private mstrFileExt As String
Private mstrPath As String
Private mstrFileName As String
Private mstrFullName As String
 
#If VBA7 Then
Public Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias _
    "GetOpenFileNameA" (pOpenfilename As OpenFileName) As Long
Public Declare PtrSafe Function GetSaveFileName Lib "comdlg32.dll" Alias _
    "GetSaveFileNameA" (pOpenfilename As OpenFileName) As Long
#Else
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
    Alias "GetOpenFileNameA" (pOpenFileName As OpenFileName) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
    Alias "GetSaveFileNameA" (pOpenFileName As OpenFileName) As Long
#End If
    
    
Private Sub Initialize()
   mstrStartDir = "c:"
   mstrFilter = "Все файлы;*.*"
   mstrTitle = "Открытие файла"
   mstrFileExt = ""
   mstrPath = ""
   mstrFileName = ""
    
End Sub
 
Public Function OpenDialogFileName(Optional lngHwin As Long = 0) As String
    Dim ofs As OpenFileName
    Dim Res As Long
    Dim s As String
    Dim SS As String
    Dim i As Byte
   ofs.lpstrInitialDir = mstrStartDir ' Здесь твой каталог по умолчанию
   ofs.lpStructSize = 76
   ofs.nMaxFile = 1024
   ofs.nMaxFileTitle = 256
   ofs.lpstrFile = String(1024, vbNullChar)
   ofs.lpstrFileTitle = String(1024, vbNullChar)
   ofs.hWndOwner = lngHwin
   ofs.lpstrTitle = mstrTitle
   ofs.lpstrFilter = CreateFilterString(mstrFilter)
   Res = GetOpenFileName(ofs)
   s = ""
    For i = 1 To 255
      SS = Mid(ofs.lpstrFile, i, 1)
      If SS <> Chr(0) Then s = s & SS Else Exit For
    Next i
   OpenDialogFileName = s
   mstrFullName = s
   mstrFileExt = Mid(s, ofs.nFileExtension + 1, Len(s) - ofs.nFileExtension)
   mstrPath = Left(s, ofs.nFileOffset)
   mstrFileName = Mid(s, ofs.nFileOffset + 1, Len(s) - ofs.nFileOffset)
End Function
Public Function SaveDialogFileName(Optional lngHwin As Long = 0) As String
    Dim ofs As OpenFileName
    Dim Res As Long
    Dim s As String
    Dim SS As String
    Dim i As Byte
   ofs.lpstrInitialDir = mstrStartDir ' Здесь твой каталог по умолчанию
   ofs.lpStructSize = 76
   ofs.nMaxFile = 1024
   ofs.nMaxFileTitle = 256
   ofs.lpstrFile = String(1024, vbNullChar)
   ofs.lpstrFileTitle = String(1024, vbNullChar)
   ofs.hWndOwner = lngHwin
   ofs.lpstrTitle = mstrTitle
   ofs.lpstrFilter = CreateFilterString(mstrFilter)
   Res = GetSaveFileName(ofs)
   s = ""
    For i = 1 To 255
      SS = Mid(ofs.lpstrFile, i, 1)
      If SS <> Chr(0) Then s = s & SS Else Exit For
    Next i
   SaveDialogFileName = s
   mstrFullName = s
   mstrFileExt = Mid(s, ofs.nFileExtension + 1, Len(s) - ofs.nFileExtension)
   mstrPath = Left(s, ofs.nFileOffset)
   mstrFileName = Mid(s, ofs.nFileOffset + 1, Len(s) - ofs.nFileOffset)
End Function
К сожалению я слеп из-за отсутствия необходимых знаний. Такой код для меня совем не понятен. Если кто увидит, что еще нужно поправить, прошу поделиться своим мнением.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2018, 14:55
Ответы с готовыми решениями:

Адаптация модуля подключения и запуска Аксесс-MySQL
Форумчане, доброго времени суток! Прошу помочь разобраться с модулем создающим связи и запускающим работу Аксесс-MySQL Вопросы: В этом...

64бит ос на виртуалке под 32бит ос, процессор 64бит
Конкретно интересует следующее: Возможно ли запустить x64 ОС на виртуалке (VMware, например) из-под 32-битной ОС, если проц 64-битный?

Размер базы Аксесс
Странно, порою мне кажется что при удалении из базы какой-либо таблицы размер файла не уменьшается, а наоборот увеличивается Как с этим...

2
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
24.04.2018, 17:26
Ваш админ устроил диверсию. Мало того, что нужно переделать все API вызовы, нужно проверить весь код, который использует эти вызовы на предмет соотвествия типов переменных. А еще большой сюрприз - если в приложении были использованы ActiveX компоненты типа TreeView, то в 64-х битной версии они просто перестанут работать, причем 64-х битной версии просто нет, придется искать замену или переписывать на VBA. При этом вы не получите практически никаких преимуществ, используя 64 битный офис. Преимущества, конечно, есть, но нормальным людям они просто не нужны

Если есть возможность, переубедите админа насчет разрядности. Если это невозможно, придется переделывать. Я много приложений переделывал, занимает примерно 5 минут на каждый API вызов для простых случаев. Сложные могут занимать часы работы.
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
25.04.2018, 02:59
Ладно API, а если там COM-объекты используются? Хотя бы та же почта CDO работать будет? Думаю вряд-ли.
У меня это шоу было в 2011 году и сделали мы его для эксперимента. Короче 64-битный Акцесс прожил у нас менее суток

Вообще не понимаю, как мальчик - ламер стал сисадмином? Ведь нормальный человек почитает, прежде чем ставить. А в интернете давно уже это всё обсуждено и описано. Может он офис с виндой перепутал?

Пишите бумагу руководству, требуйте прекращения диверсии.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2018, 02:59
Помогаю со студенческими работами здесь

Базы данных. Аксесс
сделайте плиз)

Разработка базы данных на основе МС Аксесс
Нужна помощь! Полное задание: Для бази данних, що зберігає дані про предмети, -побудувати відношення; -нормалізувати відношення; ...

Медленно работает Аксесс 97 под Windows 7
База работает под Акс97. Кратко алгоритм таков. Открывается связанная таблица как рекордсет. Организуется цикл по записям в ВБА. ...

Адаптация под разрешение
Здравствуйте. Подскажите, кто как справлялся. Мне нужно подгонять размеры элементов на форме по разрешению экрана, как лучше сделать?...

Адаптация под планшеты
Здравствуйте, сайт http://elzarimariam.kz , в сервисах проверки адаптации отображается норм, а по факту на некоторых планшетах (в частности...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru