Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SET NOCOUNT [ON или OFF]? / 10 сообщений из 10, страница 1 из 1
08.06.2004, 10:21
    #32551840
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
Ситуация:

MS SQL Server 2000 (sp3a)
В настройках коннекта по умоланию настроиваю эту опцию.

Везде рекомендуют ставить ON (у меня сложилось такое ощущение)

При этом пропали сообщение типа "Запись была изменена другим пользователем" в проектах ADP

Подключаюсь к серверу через ODBC и линкую таблицы к Акс97 (mdb)
На основе таблицы делаем форму на изменение данных
При некоторых условиях в форме необходимо сохранить редактируемую запись
Например: Me.Refresh или DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
На этой строке получаю сообщение об ошибке "ODBC --update on a linket table 'TableName' faliled."
Более того, если происходят изменения на форме, и я закрываю форму, то не происходит "привычного" сохранения записи :(

Если ставить SET NOCOUNT OFF, то в Аск97 все работает нормально (запись в связанной таблице сохраняется)

Может у меня руки кривые?
Или ODBC-драйвер, действительно, использует серверные сообщения?

Прошу высказывать свои мысли по данному поводу.

Спасибо.
...
Рейтинг: 0 / 0
08.06.2004, 10:44
    #32551897
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
SET NOCOUNT OFF
Сервер старается угадать, что возвратит ХП
работает быстрее но иногда угадывает неправильно.
SET NOCOUNT ON
работает медленнее но работает

ИМХО
всегда делаем SET NOCOUNT OFF
если что (например ХП возвращает разные наборы в зависимости от IF)
делаем SET NOCOUNT ON
...
Рейтинг: 0 / 0
08.06.2004, 11:07
    #32551953
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
ИМХО: При SET NOCOUNT OFF - работает медленнее (увеличение сетевого трафика - как минимум)

Да, и ХП в приведенном примере не используются, понятно что в ХП можно установить любое значение на время выполнения этой ХП (не вопрос) :)

Вопрос как раз в поведении клиента Акс2000(adp) и Акс97(mdb+odbc) при непосредственной привязке формы к данным :(
...
Рейтинг: 0 / 0
08.06.2004, 11:07
    #32551956
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
авторИли ODBC-драйвер, действительно, использует серверные сообщения?
ОБЯЗАТЕЛЬНО использует.
АДО тоже ОБЯЗАТЕЛЬНО использует
ИМХО client-side рекордсет никак "правильно" не заработает,
при SET NOCOUNT ON

PS
paparome, поставь BOL - любой.

пока не поставил, вот цитата (красным выделено про "попытку угадать, иногда неправильно")

SET NOCOUNT
Stops the message indicating the number of rows affected by a Transact-SQL statement from being returned as part of the results.

Syntax
SET NOCOUNT { ON | OFF }

Remarks
When SET NOCOUNT is ON, the count (indicating the number of rows affected by a Transact-SQL statement) is not returned. When SET NOCOUNT is OFF, the count is returned.

The @@ROWCOUNT function is updated even when SET NOCOUNT is ON.

SET NOCOUNT ON eliminates the sending of DONE_IN_PROC messages to the client for each statement in a stored procedure. When using the utilities provided with Microsoft® SQL Server™ to execute queries, the results prevent "nn rows affected" from being displayed at the end Transact-SQL statements such as SELECT, INSERT, UPDATE, and DELETE.

For stored procedures that contain several statements that do not return much actual data, this can provide a significant performance boost because network traffic is greatly reduced.

The setting of SET NOCOUNT is set at execute or run time and not at parse time.

Permissions
SET NOCOUNT permissions default to all users.

Examples
This example (when executed in the osql utility or SQL Query Analyzer) prevents the message (about the number of rows affected) from being displayed.

USE pubs
GO
-- Display the count message.
SELECT au_lname
FROM authors
GO
USE pubs
GO
-- SET NOCOUNT to ON and no longer display the count message.
SET NOCOUNT ON
GO
SELECT au_lname
FROM authors
GO
-- Reset SET NOCOUNT to OFF.
SET NOCOUNT OFF
GO
...
Рейтинг: 0 / 0
08.06.2004, 11:14
    #32551970
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
авторвот цитата (красным выделено про "попытку угадать, иногда неправильно")
авторThe @@ROWCOUNT function is updated even when SET NOCOUNT is ON.

И где здесь написано, что он пытается угадать?

ИМХО - здесь написано, что @@ROWCOUNT заполняется при любом значение параметра NOCOUNT

Вот выдержка из книги (перевод на русский):
Независимо от установки NOCOUNT количество строк, измененных последней командой, храниться в переменной @@ROWCOUNT

PS: А BOL у меня стоит, и читать я тоже умею :)
...
Рейтинг: 0 / 0
08.06.2004, 11:19
    #32551990
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
авторчитать я тоже умею
это хорошо.
я вот, к сожалению, не возьмусь похвастать...
...
Рейтинг: 0 / 0
08.06.2004, 11:23
    #32552003
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
в сочетании с
When SET NOCOUNT is ON, the count (indicating the number of rows affected by a Transact-SQL statement) is not returned
это и значит, что "неправильно" :0)
...
Рейтинг: 0 / 0
08.06.2004, 11:50
    #32552075
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
assaв сочетании с
When SET NOCOUNT is ON, the count (indicating the number of rows affected by a Transact-SQL statement) is not returned
это и значит, что "неправильно" :0)

Что-то я сегодня не могу читать между строк :(
А где здесь сказано, что не правильно?
При SET NOCOUNT = ON, количество (индикация о кол-ве измененных/добавленных/выбранных записей) не возвращается сервером (ИМХО - вольный перевод)
т.е. не возвращается надпись типа: (240 row(s) affected)
но при этом SELECT @@ROWCOUNT честно вернет, 240? или нет?
...
Рейтинг: 0 / 0
08.06.2004, 12:01
    #32552114
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
авторSELECT @@ROWCOUNT честно вернет, 240? или нет
вернет (если его никто не успеет попортить, например следующая команда в батче типа IF @@ERROR)
...
Рейтинг: 0 / 0
08.06.2004, 13:37
    #32552408
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET NOCOUNT [ON или OFF]?
Согласен.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SET NOCOUNT [ON или OFF]? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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