|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
Всем доброго времени суток! При выполнении хранимой процедуры из exe-шника (сервер - MS SQL Server 2012) постоянно вылетает ошибка "Слишком глубокая вложенность предложений DO или выражения". На форуме MS SQL Server пишут, что эта ошибка не серверная. Я уж и не знаю, куда копать... Может кто с таким сталкивался? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2016, 16:19 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
9IKOB, Номер ошибки? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2016, 16:41 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
9IKOB, увеличь значение STACKSIZE в config.fpw (max 64000) Но без фанатизма. По умолчанию 128. Видимо так наворотили вызовов, что превысили сей предел. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2016, 16:43 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
правильный проходящий.9IKOB, увеличь значение STACKSIZE в config.fpw (max 64000) Но без фанатизма. По умолчанию 128. Видимо так наворотили вызовов, что превысили сей предел. Спасибо. Может на будущее пригодится. А я поступил следующим образом: выполнил код хранимой процедуры в Management Studio - вывалилось несколько ошибок. После их исправления проблема решилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 08:04 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
9IKOBСпасибо. Может на будущее пригодится. А я поступил следующим образом: выполнил код хранимой процедуры в Management Studio - вывалилось несколько ошибок. После их исправления проблема решилась. Не пригодиться, да и проблему ты не решил. У тебя кривой код, который некорректно работал при ошибке в SQL запросе. То что ты исправил запрос означает что перестал отрабатывать твой код с ошибкой. Как только возникнет ошибка на стороне SQL-сервера, твоя прога опять переглючит. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 08:26 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
9IKOB, полностью согласен с Dima T - причина ошибки не устранена. Описанное поведение очень похоже на зацикливание обработчика ошибок. Если это действительно так, то при следущей подобной ошибке в SQL коде опять будет выскакивать это сообщение. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 14:11 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
Dima T, правильный проходящий., Большое спасибо за советы. Действительно, у обработчика ошибок SQLEXEC весьма корявый код. Проблема, похоже, в следующем: при возникновении ошибки ODBC с кодами 10054, 232, 233, 64, 11, 4, 0 выполняется SQLIDLEDISCONNECT(), и если SQLIDLEDISCONNECT() возвращает значение > 0, то рекурсивно выполняется функция с SQLEXEC; и так до бесконечности. Видимо, когда происходит попытка рекурсивного вызова функции с SQLEXEC в 129-й раз, тогда и вываливается ошибка FoxPro. Ещё подскажите, пожалуйста, как у вас реализована обработка ошибки при потере связи с сервером? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 17:01 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
9IKOBЕщё подскажите, пожалуйста, как у вас реализована обработка ошибки при потере связи с сервером? Завершаю работу приложения. В нормальном режиме связь не теряется. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 17:30 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
Т.е. есть объект-обертка над соединением с MS Sql, если в запросе происходит ошибка, не важно по какой причине, то делается запись в лог и возвращается управление коду выше, а он сам решает что дальше делать, как-то обработать или тоже завершиться и т.д. до самого верха. схематично так Код: sql 1. 2. 3. 4. 5.
внутри loSql.Execute() однократный вызов SQLEXEC(). Само соединение устанавливается при старте проге, хэндл хранится как глобальная переменная. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 17:40 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
Dima TТ.е. есть объект-обертка над соединением с MS Sql, если в запросе происходит ошибка, не важно по какой причине, то делается запись в лог и возвращается управление коду выше, а он сам решает что дальше делать, как-то обработать или тоже завершиться и т.д. до самого верха. схематично так Код: sql 1. 2. 3. 4. 5.
внутри loSql.Execute() однократный вызов SQLEXEC(). Само соединение устанавливается при старте проге, хэндл хранится как глобальная переменная. А что это такое - объект-обертка, он что оборачивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 19:08 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
sg12А что это такое - объект-обертка, он что оборачивает? Я уже написал в том посте ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 20:12 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
Dima Tsg12А что это такое - объект-обертка, он что оборачивает? Я уже написал в том посте Т.е. для каждого вызова SQLEXEC() вы почему-то каждый раз создаете этот странный объект, запускаете его, и он разово выполняет вашу процедуру с SQLEXEC()? Зачем, если можно просто выполнить эту вашу процедуру, записав ее куда-нибудь, даже хотя бы в .prg? К тому же, похоже, что у ТС проблема другая, с циклом пары SQLIDLEDISCONNECT()-пустой SQLEXEC(), что-то типа этого: http://www.sql.ru/forum/1111775/oshibka-konnektora-my-sql?hl=sqlidledisconnect ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 20:44 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
sg12Т.е. для каждого вызова SQLEXEC() вы почему-то каждый раз создаете этот странный объект, запускаете его, и он разово выполняет вашу процедуру с SQLEXEC()? Зачем, если можно просто выполнить эту вашу процедуру, записав ее куда-нибудь, даже хотя бы в .prg? Поток сознания какой-то, не понимаешь - твои проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 21:23 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
Dima Tsg12Т.е. для каждого вызова SQLEXEC() вы почему-то каждый раз создаете этот странный объект, запускаете его, и он разово выполняет вашу процедуру с SQLEXEC()? Зачем, если можно просто выполнить эту вашу процедуру, записав ее куда-нибудь, даже хотя бы в .prg? Поток сознания какой-то, не понимаешь - твои проблемы. Не груби, нехорошо это. Аналогичный пример работы c SQLEXEC() есть и в поставке VFP9, правда не совсем удобный: ffc/_dataquery.vcx/_execsp ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 21:34 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
9IKOB, ты спрашивай что непонятно, отвечу, на sg12 не обращай внимания, это тролль. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 21:34 |
|
Слишком глубокая вложенность предложений DO или выражения
|
|||
---|---|---|---|
#18+
Dima T9IKOB, ты спрашивай что непонятно, отвечу, на sg12 не обращай внимания, это тролль. А я бы с этой проблемой посоветовал погуглить по "SQLIDLEDISCONNECT()": http://forum.foxclub.ru/read.php?28,580830,580939#msg-580939 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2016, 22:21 |
|
|
start [/forum/topic.php?fid=41&msg=39349581&tid=1582033]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 412ms |
0 / 0 |