|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
Ситуация следующая, выполняю запрос "EXEC proc_name", который возвращает некую непустую таблицу. Для подключения использую ADODB С++. Тестирую у себя создав такую тестовую процедуру - все ок. А на сервере заказчика приходит пустой recordset без ошибок. Причем если заказчик запускает тоже самое ("EXEC proc_name") через Sql Management Studio, то возвращаются N-записей, как и должно быть. Далее самое интересное - попробовал в качестве коннектора использовать старый delphi7 (там ADODB deprecated-версии) - и в таком случае с сервером заказчика все работает как и должно - записи возвращаются. Кто-то сталкивался с подобным? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 18:19 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
в вашей proc_name добавьте: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 19:12 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
речь не про AFFECTED ROWS, а про возвращаемый recordset данных ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 20:01 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
victorov1, подключаете к нужному серверу профайлер, настраиваете на отлов нужных сессий, убеждаетесь что из студии с "возвращаются N записей" и запрос "возвращает пустой рекордсет" отловлен профайлером, сравниваете настройки сессий и выполняемые команды побуквенно а то вариантов много: пользователь не тот, сервер не тот, база не та, процедура не та, параметры не те, настройки сессий разные... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 21:19 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
victorov1 речь не про AFFECTED ROWS, а про возвращаемый recordset данных при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2021, 22:50 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
Владислав Колосов victorov1 речь не про AFFECTED ROWS, а про возвращаемый recordset данных при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне. Воистину. При этом и Delphi и SQLManagementStudio прекрасно в этом ориентируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 02:03 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
У меня нет доступа к серверу заказчика и я не могу там ничего менять. На моём локальном тесте set nocount on/off вообще никак не меняет ситуацию и Recordset::RecordCount правильный всегда. Вопрос здесь в другом, почему для одного случая он равен нулю, а в другом правильный при прочих равных. Используется sql native client. И чтобы понимали - если на сервере заказчика выполняется select ... то все работает. Почему то только с Exec проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 06:59 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 07:12 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
Владислав Колосов victorov1 речь не про AFFECTED ROWS, а про возвращаемый recordset данных при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне. Нет возможности лезть на сервер заказчика. Да и беру всегда первый рекордсет как в Delphi, так и с++ ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 07:31 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
victorov1 Да и беру всегда первый рекордсет как в Delphi, так и с++ victorov1 На моём локальном тесте set nocount on/off вообще никак не меняет ситуацию и Recordset::RecordCount правильный всегда. court ... а ТС - упорный ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 08:43 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
По сабжу: такое наблюдается в QlikView при зачитке из ХП. И там SET NOCOUNT ON обязателен. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 09:01 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
L_argo По сабжу: такое наблюдается в QlikView при зачитке из ХП. И там SET NOCOUNT ON обязателен. Вообще не понимаю, почему МС не сделали этот параметр принимаемым для всех хранящихся кусков кода равны ОН по умолчанию, и ОФФ только при явно указании этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 11:14 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
victorov1, Вы должны убедиться, что SET NOCOUNT ON выполняете в том же сеансе, что и запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 11:16 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
Владислав Колосов victorov1, Вы должны убедиться, что SET NOCOUNT ON выполняете в том же сеансе, что и запрос. SET NOCOUNT ON; EXEC AAA; GO так? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 14:55 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
victorov1, В SSMS это так будет выглядеть. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2021, 19:13 |
|
EXEC возаращает пустой recordset (ADODB)
|
|||
---|---|---|---|
#18+
Спасибо, помогло. А delphi-код работал по след. причине: они игнорируют все закрытые recordsetы и возвращают первый opened: while Recordset.State = adStateClosed do try FRecordsetObject := Recordset. NextRecordset (VarRecsAffected); if Recordset = nil then Abort; except DatabaseError(SNoResultSet, Self); end; ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2021, 16:42 |
|
|
start [/forum/topic.php?fid=46&fpage=22&tid=1684606]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 269ms |
total: | 418ms |
0 / 0 |