Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Как выполнить запрос на SQL, не затрагивающий те записи, которые сейчас редактируются  [new]
Диам
Member

Откуда:
Сообщений: 1498
Здравствуйте. Подскажите, есть какой-нибудь ключик/параметр для SQL-запроса, с которым мой запрос обновит все записи в таблице, а те, с которыми сейчас кто-то работает - не тронет.
Иногда надо "на лету" изменять статусы клиентов. Но в этот момент кто-то может работать с документом, в котором разрешено изменение данных клиента прямо в документе. Не хотелось бы получить проблем в случае массового обновления статусов не по графику.

---------------------------------
http://ag-vba.ucoz.ru/ - сервис распознавания капчи теперь и для VBA!!!
17 авг 12, 09:37    [13024540]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос на SQL, не затрагивающий те записи, которые сейчас редактируются  [new]
guest_rusimport
Guest
Диам,

можно "тупым" методом - ввести поле - признак редактирования записи , и по нему отбирать
17 авг 12, 10:57    [13025028]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос на SQL, не затрагивающий те записи, которые сейчас редактируются  [new]
Диам
Member

Откуда:
Сообщений: 1498
guest_rusimport,
)) это действительно тупой метод, требующий доработки существующих документов. Он явно не пойдет. Я думаю, может использовать какую-либо подсказку в запросе? Только какую?
17 авг 12, 11:12    [13025149]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос на SQL, не затрагивающий те записи, которые сейчас редактируются  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Диам,

А сами данные у Вас где? В "родных" таблицах Access или в SQL Server?
Если в SQL Server то по моему как то можно колдовать на стороне сервера.
17 авг 12, 11:59    [13025512]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос на SQL, не затрагивающий те записи, которые сейчас редактируются  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Диам,

Есть очень старинная статья вот здесь.
Там есть вот такой отрывок:
+ Блокировка страницы
Блокировка страницы

Самым нижнем уровнем блокировки является уровень таблицы. Процессор Microsoft Jet автоматически устанавливает блокировку страницы и не может контролироваться вашей программой. Страница данных может содержатьнесколько записей, размер его равен 26 кб. Блокировка страницы означает блокировкувсех записей, находящейся на этой странице. Если длина записи – 512 байтов, то будет заблокированно 4 записи, а если 50 байтов то 40 записей. Точное число записей нельзя заранее ни определить ни задать, т.к. таблица может содержать удаленные записи (которые удаляются только во время уплотнения). Но, не смотря на это объект Recordset имеет свойство LockEdits, которое позволяетуправлять страничной блокировкой из программы.

Блокировка на уровне таблицы имеетдва режима – пессимистический (LockEdits ю True) и оптимистический (LockEdits = False). По умолчанию устанавливается пессимистическая блокировка.

Пессимистическая блокировка блокирует страницу при вызове методов Edit и AddNew, и остается заблокированной до тех пор пока не будетвыполнен метод Update или CancelUpdate. В течении всего времени ни одна программа не имеет доступа к забликированной странице.

Преимущества. Обеспечивается максимально возможныйуровень целостности данных.
Недостатки. Страница может быть заблокирована в течении продолжительного времени.

Оптимистическая блокировка блокирует страницу только при вызове метода Update. Это означает, что пользователь вызывает методы Edit и AddNew, производит действия с дсанными, и только в момент сохранения обновления процессор Microsoft Jet пытается заблокировать страницу. Если все проходит успешно, то запись попадает в таблицу, но если обнаружится, что эта запись уже была отредактированна, то обновление отменяется и пользователь получаетсообщение о том, что данные были уже кем-то изменены.

Преимущества. Страница блокируется на минимально возвожное время, тен самым уменьшаетсячисло сообщений о блокировках.
Недостатки. Может привести к ошибкам блокировки при одновременном редактировании записи двумя пользователями, когда они будут проводить обновление.

Програмно это осуществляется следующим образом:

* для элемента Data - Data1.Recordset.LockEdits = True (или False);

* для объекта DAO – rs.LockEdits = True (или False);

При работе с пессиместической и оптимистической блокировкой используется вызов Idle. Этот метод приостанавливает выполнение программы на Visual Basic на время обнавления динамических и статических наборов, которые были открыты этой программой. Вызов этого метода гарантирует, что в вашу программу попадут самые последние изменения в наборе данных.

Програмно это осуществляется следующим образом:

Rs.Update

DBEngine.Idle dbFreeLock ‘сделать паузу

Вот и все.

Я так понимаю речь там скорее всего идёт о "родных" таблицах Access. И не знаю поможет ли Вам всё это. :(
17 авг 12, 12:05    [13025563]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос на SQL, не затрагивающий те записи, которые сейчас редактируются  [new]
Диам
Member

Откуда:
Сообщений: 1498
Таблицы SQL на сервере. На нем же и процедура будет запускаться.
17 авг 12, 12:45    [13025964]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить запрос на SQL, не затрагивающий те записи, которые сейчас редактируются  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Диам,

Ну тогда переадресуйте Ваш вопрос нашим соседям.
Там больше Вам помогут. Наверняка для SQL Server вполне выполнимая задача.
17 авг 12, 13:18    [13026260]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить