|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Всем, Добрый день! Парни, не могу понять в чем грабли. Добавляю из программы пользователей Цепочка такая: 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. Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 11:58 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Может быть попробовать после каждого вызова процедуры ставить COMMIT ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 14:07 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Commit есть :)). В том то и дело никак не пойму в чем грабли. SQLCA.AutoCommit = TRUE еще стоит. Ладно бы если не добовлялся логин и пользователь при первом добавлении. Для следущего добавления это актуально только. Через процедуру тоже не получаеться, сиквел не компилит, требует явное объявление в синтексе, как константу, через переменную не воспринимает. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 14:43 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Если не сложно, полностью код вызова ХП покажите. Может ошибка в чем другом на самом деле, надо посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 14:49 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Грубо это написано так: 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; ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 14:57 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Тогда еще вопрос для уточнения: А в Query Analizer скрипт нормально отрабатывает ? То есть если там батчем накатать создание пары пользователей ? Если ответ на вопрос будет положительный, то по идее можно попробовать воспользоваться execute immediate - собрать все в стринг и выполнить единым скриптом. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 15:20 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
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 . ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 15:41 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Когда столкнулся с проблемой, начал методом научного тыка искать :)). Для чистоты эксперемента заново сделал: 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 16:23 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
в процедуре sp_addlogin стоит следующий код, который Вас и рубит: Код: plaintext 1. 2. 3. 4.
Проверьте из PB, равно ли кол-во транзакций нулю перед и после вызовов ХП: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Если транзакции есть перед вызовом, значит у Вас где то они в коде приложения не закрылись своевременно и надо искать ошибку, ну а если сразу после вызова ХП, так значит это у них намудренно и надо COMMIT-ами все открытые транзакции закрывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 17:06 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Кстати вдогонку - попробуйте еще отключить AUTOCOMMIT на всякий случай. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 17:09 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Нет варианта,что ко второму употреблению autocommit соскочил на FALSE? Может messagebox или setmicrohelp поставите строчкой до EXECUTE,шоб понять,что в SQLCA сидит не вообще,а,именно в момент запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 17:21 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
При для первого юзвера i= 0, при добавление 2-го i>0. Интересно, а как другие регистрируют пользователей на сиквеле? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 17:35 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
В догонку для KOLCHOZ_POSTEVENT использую один объект транзакций SQLCA, который создаеться при запуске, больше ни где disckonnect'a нет, и нет других объектов транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 17:40 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Для "funikovyuri" регистрация в ЕМ-это просто супер!!! :)) Следующая ступень для выборки данных пользователем нужно использовать Query Analizer. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 17:44 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
а у вас пользователи сами регистрируются? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 17:48 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Для "funikovyuri"........ Есть пользователь типа admin, в программе он может ТОЛЬКО добалять пользователей и просматривать аудит, остальное делать не может. Естественно пользователь "менеджер" не может добавлять других пользователей. :)) Вот так. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 17:53 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Да понимаю я это отлично. Это я просто так развлекаюсь под вечер ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 18:01 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Если кол-во транзакций после выполнения добавления первого юзера равно нулю и перед вызовом добавления второго не равно нулю, значит ошибка у вас где то в логике (конечно если только Вы их сразу один за одним в цикле не создаете - но тогда "ничего не понимаю"). Ищите, где то неявно Вы вызываете транзакцию, которую потом не закрываете. Это может быть или SQL прямо в скрипте, или же тот же datawindow.update() без commit (только вот не должно быть этого при включенном AutoCommit). Попробуйте по логике задачи поотлавиливать @@trancount, сделайте в меню вызов MessageBox, который показывает значение @@trancount и заходя в каждый из своих режимов/подрежимов проверяйте, где он начнет увеличиваться. Если хоть примерно место найдете, где сия гадость происходит уже легче будет найти и обезвредить :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 18:26 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Все так,но нельзя ли в строчку перед exec поставить,что-то в роде: if SQLCA.autocommit=TRUE then messagebox("","TRUE") if SQLCA.autocommit=FALSE then messagebox("","FALSE") Просто для уверенности,что на exec Вы выходите с autocommit,выставленным на true. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 18:27 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 19:45 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
>Интересно, а как другие регистрируют пользователей на сиквеле? Другие юзают: execute immediate :as_SQLStatement using SQLCA; и не знают кто такой SQLSA. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 20:28 |
|
Добавление юзеров?!
|
|||
---|---|---|---|
#18+
Для cbusel: /*Другие юзают: execute immediate :as_SQLStatement using SQLCA; и не знают кто такой SQLSA.*/ А разница есть? . Сочуствую тем, кто не знает кто такой SQLSA :)) Проблема не в том, чем юзать, а в том что есть активная транзакция, при которой EXEC sp_addlogin теряется, не зная в рамках , какой выполнять процедуру. Поэтому хотелось бы подробнее про @@trancount поговорить с ASCRUS! Это актуально только для sp_addlogin ? Т.к. у меня класс DW, где все нужные события сделаны. Для других таблиц все ОК, Засада только при добавлении логинов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2003, 11:09 |
|
|
start [/forum/topic.php?fid=15&msg=32227515&tid=1339559]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 167ms |
0 / 0 |