powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / SQL Query within cursor (MSSQL ODBC) - проблема
12 сообщений из 12, страница 1 из 1
SQL Query within cursor (MSSQL ODBC) - проблема
    #32822699
Alexander Kolotinets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени суток!

PB 9.0.1 6533, MSSQL ODBC

Опишу проблему:
В разработке и сопровождении проект, который разрабатывался еще под PB7.
Программа работает с DB Oracle & MS SQL through ODBC bridge ( не OLE DB ).

При работе с ораклом нет проблем, вот с MS SQL есть одна неприятность ( вернее, неприятность скорей всего с дровами ODBC ):

В коде программы полно мест, в которых используются курсорные циклы, внутри которых вызываются хранимые процедуры. В PB 7, 8 все работало как часы, а вот в 9-ке:

SQLSTATE = S1000[Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt
SQLReturnData = Microsoft SQL Server
SQLCode = -1
SQLNRows = 0

Никто с таким траблом не сталкивался?

Мы выходим из положения заменой курсора на ds, но сколько еще таких точек оге - ответить трудно.
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823680
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От:Steve_Katz_[TeamSybase] (Steve_Katz_[TeamSybase])
Тема:Re: Error trying to run a stored procedure from within powerbuilder
Группы новостей:powersoft.public.powerbuilder.general
Дата:2001-07-16 17:58:32 PST
This error means that the transaction object your are using for the sp call
is currently in the middle of processing something else and hasn't
concluded it's conversation with the database. For example, if you have a
cursor open and for each row in the cursor, you want to use values from the
row and call a stored proc, you MUST use a second transaction object for
the stored proc call.
You need to look at where the stored proc is being called and determine if
something has not completed. Running a database trace is helpful here. Add
the keyword "Trace" before the DBMS value on the transaction object before
connecting (e.g. "ODBC" becomes "Trace ODBC"). When you connect, a
messagebox will indicate that tracing is enabled and where the trace log
will be written.
HTH,
steve
[TeamSybase]
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823703
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander KolotinetsНикто с таким траблом не сталкивался?
Да вроде нет.

Девяточку посвежее не пробовали ставить?
А драйвер Merant или Microsoft?
А менять драйвер не пробовали?

Alexander KolotinetsВ PB 7, 8 все работало как часы
Странно странно.
Мне почему то казалось что при открытом курсоре ничего кроме FETCH делать нельзя. Или это справедливо только для Db-lib ? или это как-то зависит от типа курсора?
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823704
Alexander Kolotinets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейОт:Steve_Katz_[TeamSybase] (Steve_Katz_[TeamSybase])
Тема:Re: Error trying to run a stored procedure from within powerbuilder
Группы новостей:powersoft.public.powerbuilder.general
Дата:2001-07-16 17:58:32 PST
This error means that the transaction object your are using for the sp call
is currently in the middle of processing something else and hasn't
concluded it's conversation with the database. For example, if you have a
cursor open and for each row in the cursor, you want to use values from the
row and call a stored proc, you MUST use a second transaction object for
the stored proc call.
You need to look at where the stored proc is being called and determine if
something has not completed. Running a database trace is helpful here. Add
the keyword "Trace" before the DBMS value on the transaction object before
connecting (e.g. "ODBC" becomes "Trace ODBC"). When you connect, a
messagebox will indicate that tracing is enabled and where the trace log
will be written.
HTH,
steve
[TeamSybase]

Спасибо, Андрей, все понятно.
Но вызов ХП внутри курсора был доступен в версиях ПБ < 9.
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823719
Alexander Kolotinets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрей Alexander KolotinetsНикто с таким траблом не сталкивался?
Да вроде нет.

Девяточку посвежее не пробовали ставить?
А драйвер Merant или Microsoft?
А менять драйвер не пробовали?

Alexander KolotinetsВ PB 7, 8 все работало как часы
Странно странно.
Мне почему то казалось что при открытом курсоре ничего кроме FETCH делать нельзя. Или это справедливо только для Db-lib ? или это как-то зависит от типа курсора?

Драйвер Microsoft

Менять драйвер не пробовали, да и вряд ли будем это делать, софт распространен достаточно большими партиями.

Данный баг проявился только в версии ПБ 9.0.1 build 6533, более свежий EBF не устанавливали
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823743
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно будет проще завести второй transaction object и использовать его для вызова процедур.

Хотя вариант решения с datastore мне нравится больше.
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823748
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Kolotinetsда и вряд ли будем это делать
Йопт! Ну нельзя ж так....
Я ж не предлагаю бежать сразу и всем клиентам ставить драйвер другой!
Надо ж разобраться сначала. Для диагностики можно было бы и проверить проявляется это только на одном драйвере или для обоих.
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823760
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander KolotinetsДанный баг проявился только в версии ПБ 9.0.1 build 6533

Неужели? Только в девятке?
А вот есть и про пятерку:

автор This SELECT is used on the same orders table. However, whenever I use the SELECT I get an error stating: SQLSTATE = S1000[Microsoft][ODBC SQL Server Driver]Connection is busy with results
for another hstmt". Am I in some locking problem ? Any resolutions. Any
help is appreciated, because this seems to be my last major bug in my
almost complete system ! Thanks
Using: PowerBuilder 5.0.02, MS-SQL Server 6.5
Jamiel Humayun
Sharpe Capital, Inc.

Так что странно что он у Вас раньше не проявлялся :-)
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823777
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL Server ODBC Driver HelpUsing Default Result Sets

The default ODBC cursor attributes are:

SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_FORWARD_ONLY);
SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, SQL_CONCUR_READ_ONLY);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, 1);

Whenever these attributes are set to their defaults, the Microsoft® SQL Server™ ODBC driver uses a SQL Server default result set. Default result sets can be used for any SQL statement supported by SQL Server, and are the most efficient method of transferring an entire result set to the client.

Default result sets do not support multiple active statements on the same connection. After an SQL statement is executed on a connection, the server does not accept commands (except a request to cancel the rest of the result set) from the client on that connection until all the rows in the result set have been processed. To cancel the remainder of a partially processed result set, call SQLCloseCursor or SQLFreeStmt with the fOption parameter set to SQL_CLOSE. To finish a partially processed result set and test for the presence of another result set, call SQLMoreResults. If an ODBC application attempts a command on a connection handle before a default result set has been completely processed, the call generates SQL_ERROR and a call to SQLGetDiagRec returns:

szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server ODBC Driver]
Connection is busy with results for another hstmt."
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823799
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторThe cursor library implements a cursor by fetching the entire result set from the underlying driver and caching the result set on the client. When using the ODBC cursor library, the application is limited to the cursor functionality of the cursor library; any support for additional cursor functionality in the underlying driver is not available to the application.

Вот это вроде бы включается если добавить в DBParm
CursorLib='ODBC_Cur_Lib'

Еще можно попробовать поменять CursorScroll на
'Dynamic' или какое другое значение отличное от дефолта.
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32823858
Alexander Kolotinets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрей авторThe cursor library implements a cursor by fetching the entire result set from the underlying driver and caching the result set on the client. When using the ODBC cursor library, the application is limited to the cursor functionality of the cursor library; any support for additional cursor functionality in the underlying driver is not available to the application.

Вот это вроде бы включается если добавить в DBParm
CursorLib='ODBC_Cur_Lib'

Еще можно попробовать поменять CursorScroll на
'Dynamic' или какое другое значение отличное от дефолта.

Он у нас как раз и есть Dynamic, с остальными параметрами попробуем поиграться, спасибо!
...
Рейтинг: 0 / 0
SQL Query within cursor (MSSQL ODBC) - проблема
    #32824325
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, у меня тоже при работе PB6 и PB7 через ODBC драйвер с MS SQL 2000, при открытых курсорах вложенные селекты не работали. А через натив - работало. Но я все равно переделал, т.к. мне показалось не слишком логичным держать открытый курсор.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / SQL Query within cursor (MSSQL ODBC) - проблема
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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