Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет / 21 сообщений из 21, страница 1 из 1
02.08.2018, 12:09
    #39682502
YanMalyakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
на сервере встроенная функция t-sql EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive';
отрабатывает нормально
из 1С 8 нет

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
пСтрСоед = "driver={SQL Server};"+"server="+СокрЛП("test1c")+";"+"uid="+СокрЛП(Login)+"; "+"pwd="+СокрЛП(Password)+";"+"Database="+СокрЛП("SMP_2018");
 
GlobalConnection = Новый COMОбъект("ADODB.Connection"); 
GlobalConnection.Provider = "SQLOLEDB"; 
GlobalConnection.ConnectionTimeout = 15; 
GlobalConnection.CommandTimeOut    = 30; 
GlobalConnection.ConnectionString = пСтрСоед; 
GlobalConnection.Open();
GlobalCommand = Новый COMОбъект("ADODB.Command"); 
GlobalCommand.ActiveConnection = GlobalConnection; 
GlobalCommand.CommandType = 1;  ////ставил типы 1, 4,8
GlobalCommand.prepared = "true";
GlobalCommand.namedParameters   = "true";

///Здесь пытаюсь вызвать функцию

GlobalCommand.CommandText = "sp_getapplock"; 

////и пытаюсь передать в неё параметр 

GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@LockMode", 200, 3, 16, )); 
GlobalCommand.Parameters(0).value = "exclusive";
GlobalCommand.Execute(); 

///пишет
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Процедура или функция "sp_getapplock" ожидает параметр "@LockMode", который не был указан.

///пробую сделать по другому

GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@DbPrincipal", 200, 3, 16,"dbo")); 
GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@Resource", 200, 1, 12, "SC5197")); 
GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@LockMode", 200, 1, 16, "exclusive")); 
GlobalCommand.Execute(); 
///пишет
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Процедура или функция "sp_getapplock" ожидает параметр "@LockMode", который не был указан.


///и даже вот так 
СтрокаЗапроса =   "BEGIN TRAN;EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive';";
GlobalCommand.CommandText = СтрокаЗапроса;
GlobalCommand.Execute(); 
///ошибок не выдает но и результата блокировки тоже нет


//////третий параметр менял с 0 до 4 не помогает
GlobalCommand.Parameters.Append(GlobalCommand.CreateParameter("@LockMode", 200, 1, 16,"exclusive")); 


подскажите пожалуйста как правильно передать LockMode
...
Рейтинг: 0 / 0
02.08.2018, 15:08
    #39682630
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
Тема перенесена по просьбе автора.

Модератор: Тема перенесена из форума "1С".
...
Рейтинг: 0 / 0
02.08.2018, 15:15
    #39682638
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
YanMalyakov///ошибок не выдает но и результата блокировки тоже нет
Это единственное, что имеет смысл обсуждать в данном разделе. Как передавать параметры из 1с на сервер, спрашивайте в разделе 1с.

Выполните в студии команду

BEGIN TRAN;EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive';exec sp_lock @@spid

Если рузультат не отличается, то проблема опять в 1с, смотрите профайлером, что у вас происходит.
...
Рейтинг: 0 / 0
02.08.2018, 15:16
    #39682639
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
Так же процедура sp_getapplock возвращает результат, которые неплохо бы проанализировать, когда что-то идет не так.
...
Рейтинг: 0 / 0
02.08.2018, 15:54
    #39682670
YanMalyakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
Заработал такой вариант
Код: sql
1.
2.
3.
СтрокаЗапроса =   "BEGIN TRAN;EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984';" ;

 GlobalCommand.CommandText = СтрокаЗапроса;



Всем спасибо!
...
Рейтинг: 0 / 0
02.08.2018, 16:02
    #39682675
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
YanMalyakov,

вам справку запрещают читать?
@LockOwner выставьте и не извращайтесь
...
Рейтинг: 0 / 0
02.08.2018, 16:33
    #39682696
YanMalyakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
TaPaK,
еще вопрос, запускаю в студии
что бы снять блокировки
USE SMP_2018;
GO
BEGIN TRAN;
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984', @LockOwner = 'Transaction' ;
GO

смотрю
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	SELECT 
		dm_tran_locks1.request_type,
		dm_tran_locks1.resource_database_id,
		dm_tran_locks1.resource_description,
		dm_tran_locks1.request_session_id, 
		dm_tran_locks1.request_status,
		dm_tran_locks1.request_mode,
		dm_tran_locks1.request_owner_type,
		dm_tran_locks1.resource_associated_entity_id
		from  sys.dm_tran_locks as dm_tran_locks1


показывает что блокировки остались не снятыми,правильно ли снимать sp_getapplock с помощью
sp_releaseapplock в таком синтаксисе ?
Код: sql
1.
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984', @LockOwner = 'Transaction'  ;
...
Рейтинг: 0 / 0
02.08.2018, 16:37
    #39682700
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
YanMalyakov,

я вообще не понимаю ваших танцев... Вам запрещено хелп открывать? Моргните.

так не снимет блокировку
BEGIN TRAN;
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984', @LockOwner = 'Transaction' ;
GO
EXEC sp_releaseapplock ...
...
Рейтинг: 0 / 0
02.08.2018, 16:39
    #39682703
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
блокировку на транзакции можно снять только внутри этой же транзакции или она сам снимется после окончаниия, длоя сессии всё тоже самое
...
Рейтинг: 0 / 0
02.08.2018, 16:43
    #39682706
YanMalyakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
TaPaK,а принудительно нельзя снять блокировку ?
я так подумал логически в начале работы модуля проведения документа
sp_getapplock
перед самым завершением
sp_releaseapplock
https://docs.microsoft.com/ru-ru/sql/relational-databases/system-stored-procedures/sp-releaseapplock-transact-sql?view=sql-server-2017

подскажи как правильно сделать пожалуйста.
...
Рейтинг: 0 / 0
02.08.2018, 16:46
    #39682707
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
YanMalyakovTaPaK,а принудительно нельзя снять блокировку ?
я так подумал логически в начале работы модуля проведения документа
sp_getapplock
перед самым завершением
sp_releaseapplock
https://docs.microsoft.com/ru-ru/sql/relational-databases/system-stored-procedures/sp-releaseapplock-transact-sql?view=sql-server-2017

подскажи как правильно сделать пожалуйста.
что значить принудительно? С другой сессии?

авторв начале работы модуля проведения документа
sp_getapplock
перед самым завершением
sp_releaseapplock
больше похоже на сессию, хотя я без понятия как у вас
...
Рейтинг: 0 / 0
02.08.2018, 16:46
    #39682708
YanMalyakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
TaPaK,
в 1С в самом документе есть
НачатьТранзакцию(); в начале
между ними
sp_getapplock
перед самым завершением
sp_releaseapplock
а в самом конце ЗафиксироватьТранзакцию();
верно делаю нет ?
...
Рейтинг: 0 / 0
02.08.2018, 16:48
    #39682711
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
YanMalyakovTaPaK,
в 1С в самом документе есть
НачатьТранзакцию(); в начале
между ними
sp_getapplock
перед самым завершением
sp_releaseapplock
а в самом конце ЗафиксироватьТранзакцию();
верно делаю нет ?
похоже на то.
...
Рейтинг: 0 / 0
03.08.2018, 13:32
    #39683073
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
TaPaKпохоже на то.
Похоже на то, что нужно сначала ресурс получіть, а потом уже трансакцію начінать.
...
Рейтинг: 0 / 0
03.08.2018, 13:46
    #39683084
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
ШыфлПохоже на то, что нужно сначала ресурс получіть, а потом уже трансакцію начінать.
Откуда такая уверенность?
...
Рейтинг: 0 / 0
03.08.2018, 14:03
    #39683102
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
ШыфлTaPaKпохоже на то.
Похоже на то, что нужно сначала ресурс получіть, а потом уже трансакцію начінать.
а как получить ресурс = транзакцию до её открытия?

ну и

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN TRAN;
EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive',  @LockOwner = 'Transaction';

exec sp_lock @@spid

EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC5197', @LockOwner = 'Transaction' 

COMMIT TRAN

exec sp_lock @@spid
...
Рейтинг: 0 / 0
03.08.2018, 15:22
    #39683139
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
msLexШыфлПохоже на то, что нужно сначала ресурс получіть, а потом уже трансакцію начінать.
Откуда такая уверенность?

Простая логика. Трансакция SQL по любому откроется, а вот ресурс получить ещё надо...

Сначала надо вынуть бумажку из ящика и показать всем, что она у вас в руках, а потом уже делать ваши аrхісложные проводки по таблицам. А то вы говорите вслух "я буду делать проводку", а ящик ещё и не отрывали - вдруг там нет ничего. Тогда ваши слова прозвучали зря...
...
Рейтинг: 0 / 0
03.08.2018, 15:25
    #39683140
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
ШыфлmsLexпропущено...

Откуда такая уверенность?

Простая логика. Трансакция SQL по любому откроется, а вот ресурс получить ещё надо...

Сначала надо вынуть бумажку из ящика и показать всем, что она у вас в руках, а потом уже делать ваши аrхісложные проводки по таблицам. А то вы говорите вслух "я буду делать проводку", а ящик ещё и не отрывали - вдруг там нет ничего. Тогда ваши слова прозвучали зря...
При чём здесь все эти сравнения? Просто пофилософствовать? sp_getapplock по сути ничего не блокирует. Это объявление, с разной длительностью жизни (транзакция/сессия) которое можно проверить в других сессиях/транзакциях
...
Рейтинг: 0 / 0
03.08.2018, 15:27
    #39683143
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
TaPaK,
1C - это про проводки. Ресурсы - это бумажки. А SQL трансакции - это чтобы пріхо і расход пісалісь вместе.
...
Рейтинг: 0 / 0
03.08.2018, 15:41
    #39683155
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
ШыфлTaPaK,
1C - это про проводки. Ресурсы - это бумажки. А SQL трансакции - это чтобы пріхо і расход пісалісь вместе.
ох
...
Рейтинг: 0 / 0
03.08.2018, 15:45
    #39683160
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет
развели тут 1с-щину, автор сам не понял, зачем ему это надо, а вы его ещё путаете дополнительно.

ТС, чего транзакции то не хватает? если тебе надо другие сессии блокировать в момент пока твоя транзакция работает, то этот код тебя всё равно не спасёт без глобальной переделки твоего клиента 1с
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / на сервере встроенная функция t-sql sp_getapplock отрабатывает корректно,из 1С нет / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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