powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как, работая через vfp oledb prov v9, обрабатывать блокировки?
9 сообщений из 9, страница 1 из 1
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33480374
mifodi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим строится сетевое многопользовательское приложение.
Как от провайдера узнать, что таблица заблокирована другим пользователем?
...
Рейтинг: 0 / 0
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33480432
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственный путь обработать ошибку открытиятаблицы.
Правда есть ещё один - не открывать таблицы в монопольном режиме :))
...
Рейтинг: 0 / 0
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33481602
qwertyqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обрабатывать ошибки установки свойства mode, если ADO.
В ADO.connection есть объект ERROR, коды ошибок, смотри:
Microsoft Data Access SDK 2.8 - ErrorValueEnum.

А можно хранимую процедуру использовать, смотри "Supported Visual FoxPro Commands and Functions in OLE DB Provider" в хелпе.
...
Рейтинг: 0 / 0
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33483107
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi mifodi!

Таблицы не должны блокироваться на продолжительное время, равно как и
одиночные записи. Совершенно недопустимо блокировать что-то на время
выполнения интерактивных операций - т.е. например на время пока пользователь
правит запись (он может уйти на обед и оставить всё в заблокированном
положении). Блокироваться данные должны лишь в момент "сброса" изменений -
т.е. на время выполнения команд INSERT/UPDATE/DELETE - при этом блокировку
делает сам фокс (и провайдер в том числе). При попытке одновременного
изменения кто-то один из вносящих изменения получит ошибку - при этом
неважно будет это программа напрямую работающая с таблицей, или программа
работающая через OLEDB провайдер.
Как разрешать этот конфликт - это уже твоя фантазия должна подсказать -
можно пользователю сообщить что "занято", можно просто "молча" попробовать
через некоторое время повторить операцию... В самом фоксе кстати есть
настройка SET REPROCESS управляющая тем сколько раз фокс сам будет повторять
попытки внесения изменений, прежде чем сгенерирует ошибку 108/109. Не знаю
работает ли эта настройка в провайдере...
При этом конечно возникает обычная проблема оптимистического способа
блокировки - некто может изменить ту самую запись, которую мы правим в
промежутке между тем как мы её прочитали и тем как мы её пытаемся записать
обратно - но такие конфликты (Update Conflict) также легко определяются и
есть несколько стратегий по их разрешению - можно переписать чужие
изменения, можно отменить свои...
Короче почитай материалы по буферизации и оптимистической блокировке данных
(последнее кстати не чисто фоксовое изобретение - это используется во многих
СУБД и программах работающих с данными - в сетевом/совместном режиме
конечно)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33484064
mifodi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тогда другой вопрос: а почему я не могу выполнить несколько команд в одной конструкции?
Напрмер, нужно выполнить несколько DML-инструкций (update/insert/delete) в одной конструкции, не вызывая несколько раз ExecuteNonQuery()?
Вообще, записать несколько инструкций получается, но выполняется всегда первая.
...
Рейтинг: 0 / 0
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33484217
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mifodiтогда другой вопрос: а почему я не могу выполнить несколько команд в одной конструкции?
Напрмер, нужно выполнить несколько DML-инструкций (update/insert/delete) в одной конструкции, не вызывая несколько раз ExecuteNonQuery()?
Вообще, записать несколько инструкций получается, но выполняется всегда первая.
Если мне не изменяет память с VFP 9.0 OLE DB Provider можно только одну за раз:
MS VFP HelpVisual FoxPro OLE DB Provider does not support multiple result sets.

Если есть желание, то можно самому написать все эти вещи, например, я передаю на Web Service таблицу в формате XML а далее Web Service уже работает отдельно с каждой записью из этой таблицы... Результат выполнения посылается исочнику и там уже разбираю ошибки... Хотя, конечно, хочется работать с DBF файлами как и с MS SQL, но увы - Большой брат говорит пока "Ни-ни", так как кто-то должен покупать и MS SQL Server

Good luck!
...
Рейтинг: 0 / 0
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33493132
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Sergey!

Я сильно сомневаюсь что тут дело в "multiple result sets" - это касается
ВОЗВРАТА множественных результатов, а не просто ВЫПОЛНЕНИЯ нескольких
команд. Но ограничение вполне может иметь место, увы...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33493367
mifodi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что на самом деле означает эта фраза: "multiple result sets"?
Перевод я понимаю, смысл ее мне не понятен. Или это тоже самое, как в MSSQL: "multibatch statements"? Но там получение множественных результатов отключается так: "set nocount on". По хорошему здесь должно быть подобное, имхо.
Ну и опять же по аналогии: в само фоксе команды же выполняются в одном пакете, а не по мере поступления.
...
Рейтинг: 0 / 0
Как, работая через vfp oledb prov v9, обрабатывать блокировки?
    #33493397
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mifodiА что на самом деле означает эта фраза: "multiple result sets"?
Перевод я понимаю, смысл ее мне не понятен. Или это тоже самое, как в MSSQL: "multibatch statements"? Но там получение множественных результатов отключается так: "set nocount on". По хорошему здесь должно быть подобное, имхо.
Ну и опять же по аналогии: в само фоксе команды же выполняются в одном пакете, а не по мере поступления.

"multiple result sets" - это означает возврат несколькиз курсоров (наборов данных)

"set nocount on" - отключает вывод промежуточных результатов, типа 10 row affected, но не отключает вывод результирующих курсоров

Код: plaintext
1.
2.
3.
4.
create procedure p1 as 
set nocount on
select  1 
select  2 
go

в итоге на клиенте получим 2 курсора.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как, работая через vfp oledb prov v9, обрабатывать блокировки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]