drronnie писал(а):Нельзя, с базой работают другие программы, для которых таблица должна оставаться исходной.
Sebas писал(а):drronnie писал(а):Нельзя, с базой работают другие программы, для которых таблица должна оставаться исходной.
Вопрос компетенции)
SSecurity писал(а):резонный вопрос - как узнать, что программа спросившая БД относится к первой или второй (т.е. как разграничить 10/100 записей)
или обе проги авторизуются?
drronnie писал(а):Пардон за заблуждение, речь идет не об ADO, а о DAO.
Ещё один нюанс: я внутри программы могу запустить скрипт на VBS, внутри которого могу получить объект DAO.Database. Может быть как-нибуть можно заменить адрес Invoke своей функцией, в результате чего я смогу вызывать оригинальный Invoke, а параметры изменять?
Sebas писал(а):проще, таблицы на вьюхи заменить...
drronnie писал(а):Нельзя, с базой работают другие программы, для которых таблица должна оставаться исходной.
drronnie писал(а):Sebas писал(а):проще, таблицы на вьюхи заменить...drronnie писал(а):Нельзя, с базой работают другие программы, для которых таблица должна оставаться исходной.
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Const PAGE_EXECUTE_READWRITE& = &H40&
Private Declare Function VirtualProtect Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
Public Sub Doo(Obj As Object)
Dim mem As Long, lacc As Long
CopyMemory mem, ByVal ObjPtr(Obj), 4
mem = mem + 28 + 1 * 4
VirtualProtect mem, 4&, PAGE_EXECUTE_READWRITE&, lacc
CopyMemory ByVal mem, adr(AddressOf Repl), 4 'put VT entry
VirtualProtect mem, 4&, lacc, ByVal 0&
End Sub
Public Function Repl(ByVal This As Long) As Long
MsgBox "A"
Repl = 22
End Function
Private Function adr(ByVal a As Long) As Long
adr = a
End Function
Private Sub Form_Load()
Dim db As DAO.Database
Set db = OpenDatabase("C:\1.mdb")
MsgBox db.CollatingOrder
Doo db
MsgBox db.CollatingOrder
End Sub
alibek писал(а):Независимо от того, правильно сделано или нет, советую убирать MsgBox (и вообще всякую интерактивность) из подобных мест.
Лучше использовать Debug.Print или выводить в файл.
Property* CreateProperty([in, optional] VARIANT Name, [in, optional] VARIANT Type, [in, optional] VARIANT Value, [in, optional] VARIANT DDL);
Что значит не получается? Я сомневаюсь, что страница в памяти какого-нибудь Access'а будет иметь атрибут супервизора. Скорее всего код кривой. Что возвращает VirtualProtect? Как ты ее вызываешь?а изменить его при помощи VirtualProtect не получается
Начнем с того, что PAGE_WRITECOPY эквивалентна PAGE_READONLY (не по значению константы, а по поведению). Имеменно поэтому "память не может быть written".когда пытаюсь изменить его на PAGE_EXECUTE_READWRITE, он меняется на PAGE_WRITECOPY, ну и соответственно при записи - память не может быть "written"
You can set the access protection value on committed pages only. If the state of any page in the specified region is not committed, the function fails and returns without modifying the access protection of any pages in the specified region.
Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 67