AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.05.2008, 12:24   #1  
andtorino is offline
andtorino
Участник
 
2 / 10 (1) +
Регистрация: 25.11.2007
Thumbs up
Добрый День! Подскажите, формирую отчет на базе хранимой процедуры SQL
имеем
SQL Server 2005, Nav4

ADOConnection.Open('Provider=SQLOLEDB.1;Persist Security Info=False;User ID=MyUser;
Password=a;Initial Catalog=mybase;Data Source=myserver';

SQL=' exec mybase.selectvalue';
В хранимой процедуре mybase.selectvalue выполняется выбока из [Value entry] + left join нескольких таблиц

ADORecordset.Open(SQL,ADOConnection,3,3,-1);

Сам запрос выполняется несколько минут.
Но после открытия ADORecordset блокируется таблица [Value Entry], следовательно пользователи не могут учесть заказ пока формирую отчет.

Подскажите, как можно с этим бороться? Я думал, что уж если используешь выборку , без всяких update, то проблем быть не должно с блокировками...
Старый 15.05.2008, 15:00   #2  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от andtorino Посмотреть сообщение
Добрый День! Подскажите, формирую отчет на базе хранимой процедуры SQL
имеем
SQL Server 2005, Nav4

ADOConnection.Open('Provider=SQLOLEDB.1;Persist Security Info=False;User ID=MyUser;
Password=a;Initial Catalog=mybase;Data Source=myserver';

SQL=' exec mybase.selectvalue';
В хранимой процедуре mybase.selectvalue выполняется выбока из [Value entry] + left join нескольких таблиц

ADORecordset.Open(SQL,ADOConnection,3,3,-1);

Сам запрос выполняется несколько минут.
Но после открытия ADORecordset блокируется таблица [Value Entry], следовательно пользователи не могут учесть заказ пока формирую отчет.

Подскажите, как можно с этим бороться? Я думал, что уж если используешь выборку , без всяких update, то проблем быть не должно с блокировками...
Как минимум запускать процедуру в отличное от учета время или заускать ее на "зеркальной" или "реплицированной" БВ.

Ну а если что-то более корректное - пробуй оптимизировать стредвами 2005 (если знаешь как - собвери статистику и вперед..)
Старый 15.05.2008, 15:05   #3  
artkashin is offline
artkashin
Участник
MCBMSS
 
519 / 18 (2) ++
Регистрация: 06.12.2006
Цитата:
Сообщение от andtorino Посмотреть сообщение
ADORecordset.Open(SQL,ADOConnection,3,3,-1);
попробуй вместо второй тройки поставить либо 1 либо -1
Старый 19.05.2008, 09:31   #4  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Цитата:
Сообщение от msdn
adLockBatchOptimistic (4) - Indicates optimistic batch updates. Required for batch update mode.

adLockOptimistic (3) - Indicates optimistic locking, record by record. The provider uses optimistic locking, locking records only when you call the Update method.

adLockPessimistic (2) - Indicates pessimistic locking, record by record. The provider does what is necessary to ensure successful editing of the records, usually by locking records at the data source immediately after editing.

adLockReadOnly (1) - Indicates read-only records. You cannot alter the data.

adLockUnspecified (-1) - Does not specify a type of lock. For clones, the clone is created with the same lock type as the original.
Т.о. оптимистическая блокировка (3) должна блокировать источник действительно только при обновлении.
Старый 19.05.2008, 11:30   #5  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Добавьте в хранимке:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
и
ADORecordset.CursorLocation := 3; //на клиенте
перед открытием рекордсета.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:05.