Ответ 1
Я не верю, что это было изменение в этой статье базы знаний. Однако вы должны иметь в виду, как была зафиксирована блокировка записи.
Помните, что когда какая-либо таблица любого пользователя в сети открывается, и они блокируют блокировку строк, тогда не имеет значения, как DAO/ADO/ACE открывает эту таблицу в коде.
Любые существующие пользователи с блокировкой строк будут принудительно блокировать блокировку записи THAT, которую они используют. И, поскольку очень редко, что этот код набора записей будет держать запись открытой/заблокированной в течение любого разумного промежутка времени, тогда блокировка страницы или блокировка строк редко будут иметь значение здесь. Поэтому в большинстве случаев блокировка необходима, когда у вас есть пользователь, редактирующий данные в форме. В случае кода это, как правило, редкая проблема.
Таким образом, параметры пользователя в параметрах tools- > действительно определяют этот выбор для пользователя. Чтобы быть действительно ясными здесь и не расщеплять волосы, эта функция блокировки строк для пользовательского интерфейса действительно не отменяет выбор, так как по умолчанию он СИЛИЗИВАЕТ проблему.
Помните, как работает блокировка строк, когда вы включаете эту функцию, реактивный двигатель просто расширяет размер записи до одной страницы и поэтому просто использует обычную старую блокировку страниц, как раньше. Это то, что я имею в виду под воздействием этой проблемы. Это не приведет к тому, что холм beans отличается, если пользователь включил блокировку строк, а затем попытался захватить запись, заблокированную пользователем с набором записей, который не открыл reocrdsset с блокировкой строк (в отличие от блокировка страницы). Вам не разрешается блокировать и редактировать запись, потому что это снова возвращается к разрешению страницы.
Нет такой вещи, как настоящая блокировка строки. Однако, если вы увеличиваете размер записи на всегда одну страницу, то вы достигаете той же цели обходным путем.
Учитывая приведенную выше информацию, это означает две вещи:
Прежде всего, это не будет иметь никакого значения, если вы откроете свой reocdset как страницу или строку, если пользователь уже заблокировал запись с помощью формы. Пользователь, редактирующий данные, определит, какая часть страницы будет использоваться (и это полная страница данных, если включена блокировка строки).
Вторая проблема. Вы хотите думать долго и трудно об использовании этой опции, поскольку он вызывает файлы раздуваться очень быстро, так как каждая редактируемая запись будет вынуждена занимать одну страницу базы данных. Если вы используете код, который обновляет тысячи записей, то вы, вероятно, не хотите этого делать. Однако пользователь не может редактировать это много записей за день, а с ежедневной программой сжатия, это снова не проблема.
Логически это означает, что этот параметр действительно полезен только для пользователей, редактирующих данные КОГДА они срабатывают друг над другом. Однако для кода набора записей он редко помогает или даже подходит для использования блокировки строк.
В конце дня функция действительно подходит только в том случае, если у вас есть несколько пользователей, которые пытаются получить одни и те же данные в одной и той же форме. Таким образом, это скорее функция пользовательского интерфейса, чем использование кода + reocordsets.
Вы можете обнаружить, что ACE + dao может открыть reocrdset с блокировкой строк, но зачем беспокоиться? Ты не пользуешься дао, и тебе все равно не нравится. И, в любом случае, это не похоже на изменение пользовательских сценариев.
- изменить:
У меня нет ссылки, которая объясняет эту блокировку записи. Я знаю, что я читал это где-то, но у меня нет ссылки.
Я был очень занят в течение последних нескольких дней (я являюсь частью бета-версии Access 2010, а в понедельник также выпущен CTP для публичных людей, которые подписались). Итак, я был очень занят в последнее время.
Однако вы можете попробовать код, который покажет это. Следующий код вызывает около 1 мегакраса раздувания в mdb с блокировкой NO row. (от 5,8 до 6,5).
Dim rst As DAO.Recordset
Dim i As Long
Dim t As Single
Set rst = CurrentDb.OpenRecordset("contacts")
t = Timer
Me.Text1 = "working..."
DoEvents
Do While rst.EOF = False
rst.Edit
i = i + 1
rst!City = "ci " & i
rst.Update
rst.MoveNext
If i Mod 500 = 0 Then
Me.Text1 = i
DoEvents
End If
Loop
t = Timer - t
Me.Text1 = "done in " & t & " seconds"
Beep
Если запустить код SAME с блокировкой записи, файл становится колоссальным размером в 123 мегабайта. Вот ссылка на образец mdb с указанным выше кодом
http://www.kallal.ca/test/bloat.zip
Итак, скачайте выше. Запустите его с помощью инструментов- > options- > advanced- > open с блокировкой уровня строки.
Затем очистите таблицу. Компактность и ремонт. Измените приведенную выше настройку и запустите ее снова (убедитесь, что вы выходите, а затем повторно введите базу данных после изменения этой настройки).
Если вы бежите выше без блокировки строки, файл увеличивается примерно на одну мегабайт. Если вы запустите его с блокировкой строк, вы получите более 110 мегабайт файла данных. Это действительно большая разница.