Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / EXEC возаращает пустой recordset (ADODB) / 16 сообщений из 16, страница 1 из 1
08.06.2021, 18:19
    #40076475
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
Ситуация следующая, выполняю запрос "EXEC proc_name", который возвращает некую непустую таблицу. Для подключения использую ADODB С++.
Тестирую у себя создав такую тестовую процедуру - все ок. А на сервере заказчика приходит пустой recordset без ошибок. Причем если заказчик запускает тоже самое ("EXEC proc_name") через Sql Management Studio, то возвращаются N-записей, как и должно быть.
Далее самое интересное - попробовал в качестве коннектора использовать старый delphi7 (там ADODB deprecated-версии) - и в таком случае с сервером заказчика все работает как и должно - записи возвращаются.
Кто-то сталкивался с подобным?
...
Рейтинг: 0 / 0
08.06.2021, 19:12
    #40076485
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
в вашей proc_name добавьте:

Код: sql
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE proc_name
...
AS
SET NOCOUNT ON;
...
GO
...
Рейтинг: 0 / 0
08.06.2021, 20:01
    #40076490
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
речь не про AFFECTED ROWS, а про возвращаемый recordset данных
...
Рейтинг: 0 / 0
08.06.2021, 21:19
    #40076499
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
victorov1, подключаете к нужному серверу профайлер, настраиваете на отлов нужных сессий, убеждаетесь что из студии с "возвращаются N записей" и запрос "возвращает пустой рекордсет" отловлен профайлером, сравниваете настройки сессий и выполняемые команды побуквенно
а то вариантов много: пользователь не тот, сервер не тот, база не та, процедура не та, параметры не те, настройки сессий разные...
...
Рейтинг: 0 / 0
08.06.2021, 22:50
    #40076507
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
victorov1
речь не про AFFECTED ROWS, а про возвращаемый recordset данных


при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне.
...
Рейтинг: 0 / 0
09.06.2021, 02:03
    #40076518
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
Владислав Колосов
victorov1
речь не про AFFECTED ROWS, а про возвращаемый recordset данных


при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне.

Воистину.
При этом и Delphi и SQLManagementStudio прекрасно в этом ориентируются.
...
Рейтинг: 0 / 0
09.06.2021, 06:59
    #40076526
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
У меня нет доступа к серверу заказчика и я не могу там ничего менять.
На моём локальном тесте set nocount on/off вообще никак не меняет ситуацию и Recordset::RecordCount правильный всегда.
Вопрос здесь в другом, почему для одного случая он равен нулю, а в другом правильный при прочих равных. Используется sql native client.
И чтобы понимали - если на сервере заказчика выполняется select ... то все работает. Почему то только с Exec проблема.
...
Рейтинг: 0 / 0
09.06.2021, 07:12
    #40076527
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
... а ТС - упорный
...
Рейтинг: 0 / 0
09.06.2021, 07:31
    #40076529
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
Владислав Колосов
victorov1
речь не про AFFECTED ROWS, а про возвращаемый recordset данных


при SET NOCOUNT OFF; вам прилетает два рекордсета, емнип. Зависит от обработки ответа на принимающей стороне.


Нет возможности лезть на сервер заказчика.
Да и беру всегда первый рекордсет как в Delphi, так и с++
...
Рейтинг: 0 / 0
09.06.2021, 08:43
    #40076532
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
victorov1
Да и беру всегда первый рекордсет как в Delphi, так и с++
Тот рекордсет скрытый от обычных средств получения. Но получить данные в некоторых библиотеках доступа мешает.
victorov1
На моём локальном тесте set nocount on/off вообще никак не меняет ситуацию и Recordset::RecordCount правильный всегда.
Так и должно быть.
court
... а ТС - упорный
+1
...
Рейтинг: 0 / 0
09.06.2021, 09:01
    #40076535
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
По сабжу: такое наблюдается в QlikView при зачитке из ХП.
И там SET NOCOUNT ON обязателен.
...
Рейтинг: 0 / 0
09.06.2021, 11:14
    #40076557
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
L_argo
По сабжу: такое наблюдается в QlikView при зачитке из ХП.
И там SET NOCOUNT ON обязателен.


Вообще не понимаю, почему МС не сделали этот параметр принимаемым для всех хранящихся кусков кода равны ОН по умолчанию, и ОФФ только при явно указании этого.
...
Рейтинг: 0 / 0
09.06.2021, 11:16
    #40076558
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
victorov1,

Вы должны убедиться, что SET NOCOUNT ON выполняете в том же сеансе, что и запрос.
...
Рейтинг: 0 / 0
09.06.2021, 14:55
    #40076638
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
Владислав Колосов
victorov1,

Вы должны убедиться, что SET NOCOUNT ON выполняете в том же сеансе, что и запрос.


SET NOCOUNT ON;
EXEC AAA;
GO

так?
...
Рейтинг: 0 / 0
09.06.2021, 19:13
    #40076739
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
victorov1,

В SSMS это так будет выглядеть.
...
Рейтинг: 0 / 0
11.06.2021, 16:42
    #40077256
victorov1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXEC возаращает пустой recordset (ADODB)
Спасибо, помогло.

А delphi-код работал по след. причине: они игнорируют все закрытые recordsetы и возвращают первый opened:

while Recordset.State = adStateClosed do
try
FRecordsetObject := Recordset. NextRecordset (VarRecsAffected);
if Recordset = nil then Abort;
except
DatabaseError(SNoResultSet, Self);
end;
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / EXEC возаращает пустой recordset (ADODB) / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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