Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

на сервере встроенная функция t-sql sp_getapplock отрабатывает нормально в 1С нет

на сервере встроенная функция t-sql sp_getapplock отрабатывает нормально в 1С нет
Я
   Яшка Копытин
 
02.08.18 - 13:17
на сервере встроенная функция t-sql EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'SC5197',@LockMode = 'exclusive';
отрабатывает нормально
из 1С 8 нет

пСтрСоед = "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
 
 
   sitex
 
1 - 02.08.18 - 13:37
(0) Я могу ошибаться , но попробуйте так GlobalCommand.Execute("И сюдать СтрокаЗапроса");
   sitex
 
2 - 02.08.18 - 13:39
(1) + Как пример GlobalCommand.EXECUTE("SELECT @@VERSION")
   Яшка Копытин
 
3 - 02.08.18 - 13:46
(0)
Ошибка при вызове метода контекста (Execute)
GlobalCommand.Execute("EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource =  'SC5197',@LockMode = 'exclusive';COMMIT TRAN;")  ;

по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Процедура или функция "sp_getapplock" ожидает параметр "@LockMode", который не был указан.
на самом сервере
Выполнение команд успешно завершено.
   Яшка Копытин
 
4 - 02.08.18 - 13:47
(1) и (2)
Ошибка при вызове метода контекста (Execute)
GlobalCommand.Execute("EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource =  'SC5197',@LockMode = 'exclusive';COMMIT TRAN;")  ;

по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Процедура или функция "sp_getapplock" ожидает параметр "@LockMode", который не был указан.
на самом сервере
Выполнение команд успешно завершено.
   sitex
 
5 - 02.08.18 - 13:50
(4) Убери  -> '
   sitex
 
6 - 02.08.18 - 13:58
   Яшка Копытин
 
7 - 02.08.18 - 14:07
(5) сделал так
 GlobalCommand.Execute("EXEC sp_getapplock ; bPrincipal = ""dbo"", @Resource =  ""SC5197"",@LockMode = ""exclusive""")  ;

Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Процедура или функция "sp_getapplock" ожидает параметр "@LockMode", который не был указан.
   sitex
 
8 - 02.08.18 - 14:14
(7) ссылку выше открывал? найди абзац "А.Вызов EXECUTE с передачей единственного аргумента" там же расписано требуется.
   Яшка Копытин
 
9 - 02.08.18 - 14:40
уважаемый sitex  здесь сказано
https://msdn.microsoft.com/ru-ru/library/ms188332(v=sql.120).aspx

в абзаце А.Вызов EXECUTE с передачей единственного аргумента
При выполнении переменная может быть явно поименована.
EXEC dbo.uspGetEmployeeManagers @EmployeeID = 6;
GO
у меня нормально заходят параметры @bPrincipal = ""dbo"", @Resource =  ""SC5197"" чем они отличаются от @LockMode = ""exclusive""" ? да ни  чем 
@LockMode такая же именованная процедура
как и @Resource
вот в чем затык.
   Яшка Копытин
 
10 - 02.08.18 - 14:42
Парни поделитесь плиз, примером кода 
для передачи из 1С во встроенную функцию T-sql
бъюсь уже какой день
 
 Рекламное место пустует
   Вафель
 
11 - 02.08.18 - 14:43
делай через текст, без параметров
   Яшка Копытин
 
12 - 02.08.18 - 14:47
(11)
Для функции sp_getapplock  нужны параметры без них даж на сервере не работает.
и к тому же мне нужно конкретную таблицу блокировать
SC5197 и журнал.
   mr freeman
 
13 - 02.08.18 - 14:51
Про getapplock на скульру тебе подсказали. Зачем тебе этот трэш, юзай упр. блокировки 1С
   mr freeman
 
14 - 02.08.18 - 14:56
Ты там пишешь, это нужно для сообщения юзеру что процесс занят и проводить нельзя. Это выдирание гланд через задницу.
   sitex
 
15 - 02.08.18 - 14:59
Текст = " BEGIN TRANSACTION
| DECLARE @result int
| EXEC @result = sp_getapplock @DbPrincipal = 'dbo' @Resource = 'SC5197', @LockMode = 'Exclusive' ";   и дальше  GlobalCommand.Execute(Текст);  Пробуй !
   sitex
 
16 - 02.08.18 - 15:00
(10) Так же тут прочитай https://msdn.microsoft.com/ru-ru/library/ms189823(v=sql.120) Разрешения какие нужны.
   sitex
 
17 - 02.08.18 - 15:01
Вообще тоже не понимаю для чего это вообще нужно.
   Яшка Копытин
 
18 - 02.08.18 - 15:06
(14)(17) это нужно для 1С 77
а отлаживаюсь я на 8ке
sitex          не хотит работать как в (15) =((
   Яшка Копытин
 
19 - 02.08.18 - 15:08
кто нибудь может платной консультацией поделиться ?
вообще возможно ли всё то что я затеваю
   mr freeman
 
20 - 02.08.18 - 15:16
Платная консультация: не занимайся херней. С тебя тыща рублей
   sitex
 
21 - 02.08.18 - 15:19
(18) А так  -> Текст = " BEGIN TRANSACTION
| DECLARE @result int
| EXEC @result = sp_getapplock 'dbo', 'SC5197',  'Exclusive' ";
   hhhh
 
22 - 02.08.18 - 15:38
что с запятыми? где-то есть запятая, где-то нет. Это шаманство такое?
   sitex
 
23 - 02.08.18 - 15:40
(22) Если  в (15) то да там одна , пропущена.
   hhhh
 
24 - 02.08.18 - 15:43
(23) вообще тут нет двух топиков, где бы запятые одинаково стояли
   sitex
 
25 - 02.08.18 - 15:43
Только что протестировал, на базе test  WS 2008R2 , что в 15 и ---> " BEGIN TRANSACTION
| DECLARE @result int
| EXEC @result=sp_getapplock @DbPrincipal=N'test', @Resource=N'1',@LockMode=N'Exclusive' ";  все норм работает. Хз что у тебя там не пашет
   Яшка Копытин
 
26 - 02.08.18 - 15:50
(25)    sitex
Да заработала в (21)
Текст = " BEGIN TRANSACTION
| DECLARE @result int
| EXEC @result = sp_getapplock 'dbo', 'SC5197',  'Exclusive' ";
   sitex
 
27 - 02.08.18 - 15:52
(26) Ну ТС в след раз пиши какая там у тебя версия sql.
   Яшка Копытин
 
28 - 02.08.18 - 15:58
sitex Спасибо большое ! выручил

SQL Server 2008 R2    
10.50.6560.0
   Яшка Копытин
 
29 - 02.08.18 - 16:35
еще вопрос, запускаю в студии
что бы снять блокировки 
USE SMP_2018;
GO
BEGIN TRAN;
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984', @LockOwner = 'Transaction' ;
GO

смотрю
    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 в таком синтаксисе ?
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'SC2984', @LockOwner = 'Transaction'  ;


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует