powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Добавление юзеров?!
24 сообщений из 24, страница 1 из 1
Добавление юзеров?!
    #32227279
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем, Добрый день!
Парни, не могу понять в чем грабли. Добавляю из программы пользователей
Цепочка такая:
PREPARE SQLSA FROM "EXEC sp_adduser ?, ?";
PREPARE SQLSA FROM "EXEC sp_adduser ?, ?";

и т.д. После каждого вызова проверяю SQLCODE.
Ну и вот, добавление одного юзера срабатывает, все Ок. Добавляю следующего-ошибка:
Db Error Code:-1r
DB Error Message: The procedure 'sp_addlogin' cannot be executed within a transaction.
Заранее спасибо.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227515
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть попробовать после каждого вызова процедуры ставить COMMIT ?
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227568
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Commit есть :)). В том то и дело никак не пойму в чем грабли.
SQLCA.AutoCommit = TRUE еще стоит. Ладно бы если не добовлялся логин и пользователь при первом добавлении. Для следущего добавления это актуально только. Через процедуру тоже не получаеться, сиквел не компилит, требует явное объявление в синтексе, как константу, через переменную не воспринимает.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227582
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не сложно, полностью код вызова ХП покажите. Может ошибка в чем другом на самом деле, надо посмотреть.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227596
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грубо это написано так:
ELSE
PREPARE SQLSA FROM "EXEC sp_addlogin ?, '', 'ware'";
EXECUTE SQLSA USING :str_user.login;
IF SQLCA.SQLCODE <> 0 Then
MessageBox ("Îøèáêà", &
"Îøèáêà ñîçäàíèÿ ëîãèíà" + &
"~r~nDBParm: " + SQLCA.DBParm + &
"~r~nDb Error Code:" + String (SQLCA.SQLCODE) + &
"r~n" + "DB Error Message: " + SQLCA. SQLErrText, &
StopSign!, OK!, 1)
This.triggerevent("u_delete")
ELSE
COMMIT;
PREPARE SQLSA FROM "EXEC sp_adduser ?, ?";
EXECUTE SQLSA USING :str_user.login, :str_user.login;
IF SQLCA.SQLCODE <> 0 Then
MessageBox ("Ñîåäèíåíèå ñ áàçîé", &
"Îøèáêà ñîçäàíèÿ ïîëüçîâàòåëÿ" + &
"~r~nDBParm: " + SQLCA.DBParm + &
"~r~nDb Error Code:" + String (SQLCA.SQLCODE) + &
"r~n" + "DB Error Message: " + SQLCA. SQLErrText, &
StopSign!, OK!, 1)
This.triggerevent("u_delete")
ELSE
COMMIT;
PREPARE SQLSA FROM "EXEC sp_addrolemember 'db_owner', ?";
EXECUTE SQLSA USING :str_user.login;
IF SQLCA.SQLCODE <> 0 Then
MessageBox ("Ñîåäèíåíèå ñ áàçîé", &
"Îøèáêà îøèáêà äîáàëåíèÿ ïîëüçîâàòåëÿ â ðîëü" + &
"~r~nDBParm: " + SQLCA.DBParm + &
"~r~nDb Error Code:" + String (SQLCA.SQLCODE) + &
"r~n" + "DB Error Message: " + SQLCA. SQLErrText, &
StopSign!, OK!, 1)
This.triggerevent("u_delete")
ELSE
COMMIT;
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227637
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда еще вопрос для уточнения:
А в Query Analizer скрипт нормально отрабатывает ? То есть если там батчем накатать создание пары пользователей ?

Если ответ на вопрос будет положительный, то по идее можно попробовать воспользоваться execute immediate - собрать все в стринг и выполнить единым скриптом.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227665
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EXEC sp_addlogin 'Admin1', 'Admin', 'ware'
GO
EXEC sp_adduser 'Admin1', 'Admin1'
go
EXEC sp_addrolemember 'db_owner', 'Admin1'
GO

EXEC sp_addlogin 'Admin2', 'Admin', 'ware'
GO
EXEC sp_adduser 'Admin2', 'Admin2'
go
EXEC sp_addrolemember 'db_owner', 'Admin2'
GO

Без проблем отрабатывает, GO не пречем , без него тоже все ОК из Query Analizer .
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227729
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда столкнулся с проблемой, начал методом научного тыка искать :)). Для чистоты эксперемента заново сделал:

l_string="EXEC sp_addlogin '" +str_user.login+"', '', 'ware' EXEC sp_adduser '"+str_user.login+"','"+str_user.login+"'"
Все так же, первый добавляется, на втором ошибка:

DB Error Message: Procedure has not been executed or has no results
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227795
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в процедуре sp_addlogin стоит следующий код, который Вас и рубит:
Код: plaintext
1.
2.
3.
4.
IF (@@trancount >  0 )
begin
  raiserror( 15002 ,- 1 ,- 1 ,'sp_addlogin')
  return ( 1 )
end


Проверьте из PB, равно ли кол-во транзакций нулю перед и после вызовов ХП:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int i

select top  1  @@trancount
into :i from SysObjects;

if i >  0  then
  MessageBox('Error', 'Trancount > 0')
end if


Если транзакции есть перед вызовом, значит у Вас где то они в коде приложения не закрылись своевременно и надо искать ошибку, ну а если сразу после вызова ХП, так значит это у них намудренно и надо COMMIT-ами все открытые транзакции закрывать.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227805
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати вдогонку - попробуйте еще отключить AUTOCOMMIT на всякий случай.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227827
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет варианта,что ко второму употреблению autocommit соскочил на FALSE?
Может messagebox или setmicrohelp поставите строчкой до EXECUTE,шоб понять,что в SQLCA сидит не вообще,а,именно в момент запроса?
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227852
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int i

select top  1  @@trancount
into :i from SysObjects;

if i >  0  then
  MessageBox('Error', 'Trancount > 0')
end if

При для первого юзвера i= 0, при добавление 2-го i>0.

Интересно, а как другие регистрируют пользователей на сиквеле?
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227857
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в EM
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227860
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку для KOLCHOZ_POSTEVENT
использую один объект транзакций SQLCA, который создаеться при запуске,
больше ни где disckonnect'a нет, и нет других объектов транзакций.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227869
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для "funikovyuri" регистрация в ЕМ-это просто супер!!! :))
Следующая ступень для выборки данных пользователем нужно использовать Query Analizer.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227877
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а у вас пользователи сами регистрируются?
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227883
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для "funikovyuri"........
Есть пользователь типа admin, в программе он может ТОЛЬКО добалять пользователей и просматривать аудит, остальное делать не может. Естественно пользователь "менеджер" не может добавлять других пользователей. :)) Вот так.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227892
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да понимаю я это отлично. Это я просто так развлекаюсь под вечер
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227942
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кол-во транзакций после выполнения добавления первого юзера равно нулю и перед вызовом добавления второго не равно нулю, значит ошибка у вас где то в логике (конечно если только Вы их сразу один за одним в цикле не создаете - но тогда "ничего не понимаю"). Ищите, где то неявно Вы вызываете транзакцию, которую потом не закрываете. Это может быть или SQL прямо в скрипте, или же тот же datawindow.update() без commit (только вот не должно быть этого при включенном AutoCommit). Попробуйте по логике задачи поотлавиливать @@trancount, сделайте в меню вызов MessageBox, который показывает значение @@trancount и заходя в каждый из своих режимов/подрежимов проверяйте, где он начнет увеличиваться. Если хоть примерно место найдете, где сия гадость происходит уже легче будет найти и обезвредить :)
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32227944
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все так,но нельзя ли в строчку перед exec поставить,что-то в роде:
if SQLCA.autocommit=TRUE then messagebox("","TRUE")
if SQLCA.autocommit=FALSE then messagebox("","FALSE")
Просто для уверенности,что на exec Вы выходите с autocommit,выставленным на true.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32228011
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 KOLCHOZ_POSTEVENT
Все так,но нельзя ли в строчку перед exec поставить,что-то в роде:
if SQLCA.autocommit=TRUE then messagebox("","TRUE")
if SQLCA.autocommit=FALSE then messagebox("","FALSE")
Просто для уверенности,что на exec Вы выходите с autocommit,выставленным на true.


Вообще-то, для проверки значения переменной принято использовать отладчик :-)

2 ASCRUS
Кстати вдогонку - попробуйте еще отключить AUTOCOMMIT на всякий случай.
нельзя отключать:

Some DBMSs require you to execute certain SQL statements outside the scope of a transaction. For example, when connected to a SQL Server database, you must execute SQL Data Definition Language (DDL) statements such as CREATE TABLE and DROP TABLE outside a transaction. There are two reasons for this:

· It ensures that the structure of your database cannot change during a transaction.
· It improves database performance, because DDL statements are costly operations to recover.

Therefore, to execute DDL statements or stored procedures containing DDL statements in a SQL Server database, you must set AutoCommit to True to issue the DDL statements outside the scope of a transaction.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32228036
cbusel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Интересно, а как другие регистрируют пользователей на сиквеле?
Другие юзают:
  execute immediate :as_SQLStatement using SQLCA;
и не знают кто такой SQLSA.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32228372
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для cbusel:
/*Другие юзают:
execute immediate :as_SQLStatement using SQLCA;
и не знают кто такой SQLSA.*/
А разница есть? . Сочуствую тем, кто не знает кто такой SQLSA :))
Проблема не в том, чем юзать, а в том что есть активная транзакция, при которой EXEC sp_addlogin теряется, не зная в рамках , какой выполнять процедуру.
Поэтому хотелось бы подробнее про @@trancount поговорить с ASCRUS!
Это актуально только для sp_addlogin ?
Т.к. у меня класс DW, где все нужные события сделаны. Для других таблиц все ОК, Засада только при добавлении логинов.
...
Рейтинг: 0 / 0
Добавление юзеров?!
    #32228571
Pers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снят, не хочеться лопатить свой класс DW(не стоит трудов, везде все ок). Использовал стандартный DW. Все работает.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Добавление юзеров?!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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