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

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


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


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

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


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


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


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

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

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


SET NOCOUNT ON;
EXEC AAA;
GO

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

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

А 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
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / EXEC возаращает пустой recordset (ADODB)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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