Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с текстом сообщения RAISERROR  [new]
Петр К
Member

Откуда:
Сообщений: 53
Клиентская программа на VFP. Работает с MS SQL 2008 R2 через ODBC драйвер SQL. Запись данных в поля реализована с поддержкой обработки ошибок (TABLEUPDATE, AERROR, TABLEREVERT). Соответственно, на серверной стороне в триггерах и хранимых процедурах используется RAISERROR. На части клиентских компьютерах почему-то сообщение, генерируемое с помощью RAISERROR, искажается - произвольным образом обрезается. Но не на всех. На моем не искажается. На компьютере одного из интенсивных пользователей все было нормально, но после очередной замены ОС (привет от Касперского) и повторной установки прикладной программы началось искажение. При этом наблюдается следующая картина: убираем весь текст сообщения в хранимой на сервере, оставив буквально пару слов. Возврат клиенту неискаженный. Начинаем добавлять слово за словом - начиная с некоторого момента - точнее, с какой-то добавленной буквы - возвращенный клиенту текст обрезан с начала (в некоторых случаях буквально посреди слова), остается только хвост фразы. Смысловая часть, естественно, теряется. Закономерность уловить не могу. Предполагал, что такое только с русскими буквами, но нет - сегодня полностью заменил текст в сообщении на латиницу (транслитом), но не помогло. Всякий раз приходится химичить, добиваясь такого текста, который бы передавался клиенту неискаженным, причем приходится результат отслеживать через дистанционное управление компьютером пользователя - на моем этот эффект не наблюдаю. Очень сложно и геморройно. Кто-нибудь сталкивался с проблемой?
2 дек 14, 13:38    [16937144]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Glory
Member

Откуда:
Сообщений: 104751
Петр К
На части клиентских компьютерах почему-то сообщение, генерируемое с помощью RAISERROR, искажается - произвольным образом обрезается.

Отображает серверные сообщения клиентское приложение, а не сервер.
Вам известен фрагмент кода вашего клиента, который обрабатывает и отображает сообщения ?
2 дек 14, 13:40    [16937156]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
Явно проблема в клиентском приложении. Например, окно сообщения переносит строки по словам, но размер окна на меняет.
Если пользователь изменит размер шрифта, или сам шрифт, то картина будет различаться.
2 дек 14, 14:00    [16937294]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Петр К
Кто-нибудь сталкивался с проблемой?
При чём тут SQL Server?
Или вы подозреваете, что сервер шлёт по сети клиенту уже обрезанное сообщение? Проверьте это, запустив хранимую процедуру в SSMS.
Если всё нормально, задавайте вопрос в разделе VFP
2 дек 14, 14:02    [16937313]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Петр К
Member

Откуда:
Сообщений: 53
Добавлю пару пояснений. Насчет клиентского приложения: дело в том, что оно, естественно одинаково на всех машинах. Но при его работе на ряде машин наблюдается искажение сообщения RAISERROR, на ряде - нет. В данном конкретном случае на моем компьютере (разработчика) ничего не искажается. Поэтому мне нет никакого смысла проверять возврат сервером через Enterprise Manager, например. Проверял - не искажается. А на компьютере пользователя - немилосердно режется. Причем "еще вчера" не резалось, т.е. глюк выглядит так в развитии: был комп, все работало (данная ошибка - это штатная ситуация, информирующая пользователя о превышении некоего заданного лимита, обрабатывается в хранимой вызовом из триггера, пользователь информируется через RAISERROR-TABLEUPDATE-AERROR-TABLEREVERT). Потом Каспер угрохал комп пользователя (это он умеет). У наших системщиков одно решение - забрать комп у пользователя, нафиг все снести, поставить систему с нуля. Сказано - сделано. Мы после них ставим только VFP RunTime и ярлыки запуска. Т.е. с моей т.з. ничего на компе не изменилось - экзешник тот же самый, все базы выборок те эе самые, параметры коннекта заданы в базах, используется стандартный ODBC SQL Server. А результат, простите, разный. Я подозреваю - только подозреваю - что связано это с разной работой ODBC после замены ОС (там же нескончаемым потоком обновления идут).
Upd: Вот сегодня опять решил поиграться с глюком и не могу повторить его! Т.е. дистанционно коннектюсь к компу пользователя, точно так же играюсь с текстом RAISERROR - и текст не искажается. Единственная разница вчера и сегодня - опять к нам системщики заслали обновления.
3 дек 14, 14:42    [16943768]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Петр К
Member

Откуда:
Сообщений: 53
Glory
Отображает серверные сообщения клиентское приложение, а не сервер.

Одна добавочка: клиент отображает сообщение, получив его от ODBC драйвера.
Glory
Вам известен фрагмент кода вашего клиента, который обрабатывает и отображает сообщения ?

Безусловно. Там вообще нет ничего заумного: попытка записи на сервер - проверка результата - если отрицательный, отобразить текст ошибки, переданный через RAISERROR в окне MESSAGEBOX и отменить изменения.
3 дек 14, 14:46    [16943810]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Glory
Member

Откуда:
Сообщений: 104751
Петр К
Одна добавочка: клиент отображает сообщение, получив его от ODBC драйвера.

И вы уже как-то убедились, что именно драйвера усекают что-то ?

Петр К
Glory
Вам известен фрагмент кода вашего клиента, который обрабатывает и отображает сообщения ?

Безусловно. Там вообще нет ничего заумного: попытка записи на сервер - проверка результата - если отрицательный, отобразить текст ошибки, переданный через RAISERROR в окне MESSAGEBOX и отменить изменения.

Как ведут себя другие программы выполняющие ту же процедуру через тот же ODBC драйвер ?
3 дек 14, 14:49    [16943845]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1570
Петр К
Glory
Отображает серверные сообщения клиентское приложение, а не сервер.

Одна добавочка: клиент отображает сообщение, получив его от ODBC драйвера.
Glory
Вам известен фрагмент кода вашего клиента, который обрабатывает и отображает сообщения ?

Безусловно. Там вообще нет ничего заумного: попытка записи на сервер - проверка результата - если отрицательный, отобразить текст ошибки, переданный через RAISERROR в окне MESSAGEBOX и отменить изменения.
Вот этот самый "текст ошибки, переданный через RAISERROR" в клиенте и надо проверить. До показа в окне.
3 дек 14, 14:51    [16943871]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Sergey Sizov
Вот этот самый "текст ошибки, переданный через RAISERROR" в клиенте и надо проверить. До показа в окне.

упс.. ну и логика однако. Так вот может у вас и барахдит как раз обработчик коллекции еррорс...перед тем так его рисуют клиенту. И скорее всего ошибка именно в аппликейшене и сервер здесь совершенно не при чем
3 дек 14, 14:58    [16943929]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Петр К
Member

Откуда:
Сообщений: 53
упс.. ну и логика однако. Так вот может у вас и барахдит как раз обработчик коллекции еррорс...перед тем так его рисуют клиенту. И скорее всего ошибка именно в аппликейшене и сервер здесь совершенно не при чем


Господи, ну чем там барахлить-то? Там же просто все, как три копейки. Есть нативная функция AERROR VFP, возвращающая массив информации об ошибке. Один из элементов которого - текст, возвращаемый RAISERROR. Берем этот текст и передаем его параметром MESSAGEBOX. Все!
Я не утверждаю, что сервер тут "при чем". Если бы так было, искажение текста RAISERROR было бы на всех компах без исключения. Но точно так же я не могу принять ошибку в клиентской части, потому что а) искажение текста наблюдается не на всех клиентских компьютерах (хотя запускаемый экзешник у всех один) и б) в данном конкретном примере у клиента все работало нормально, пока не была в очередной раз заменена ОС, и даже тогда буквально на следующий день глюк почему-то пропал (подозреваю, что из-за очередного потока обновлений ОС). Уже на следующий день я не смог его повторить, хотя вернул текст сообщения к начальному варианту, который был за день до того немилосердно резался на клиенте. Трассировать программу бесполезно: на моем компьютере разработчика глюк не наблюдается вообще (единственная разница с клиентскими: на нем стоит предустановленная Windows 7 при покупке, на обычных клиентских компьютерах системщики ее уничтожают и заменяют на подготовленный ими образ Win 7 - не спрашивайте меня, зачем, логику здесь искать бесполезно). А на компьютере пользователя я трассировку произвести не могу - на нем нет ни полноценного SQL клиента (Enterprise Manager), ни полномасштабного VFP - только RunTime.
Я вообще-то предполагал (и полагаю), что проблема в обработке информации, переданной сервером клиенту, на этапе до передачи ее клиенту VFP - т.е. ODBC драйвером. На это указывает хотя бы тот факт, что ошибка на клиенте исчезла после очередного потока бесконечных обновлений от Microsoft. Проблема в том, что хотелось бы знать это точно и иметь некую инструкцию насчет того, какой же собственно пакет обновлений надо ставить на клиентскую машину и какие настройки задавать ODBC драйверу, чтобы избежать ситуации в будущем. (В клиентском коннекте настройки сведены до минимума: Driver=SQL Server, Server=XXXX, Database=XXXX, TrustedConnection=Yes; в идеале это все. К сожалению, пришлось добавить инструкцию Network=DBNMPNTW, инструктирующую ODBC драйвер взаимодействовать с сервером по именованным каналам вместо штатного протокола TCP/IP - к сожалению, потому что Каспер, управляемый нашими системщиками, контролирует обмен по этому протоколу таким образом, что страшно замедляет взаимодействие с сервером вплоть до таймаутов соединения; чтобы снять проблему, пришлось перевести взаимодействие на именованные каналы, найти общий язык с системщиками не удалось.)
Я предполагал, что на форуме есть люди, сталкивавшиеся с проблемой. Обычно вряд ли оказываешься в первопроходцах. Видимо, в данном случае это не так. Жаль.
4 дек 14, 10:36    [16947794]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
правильный проходящий.
Guest
Петр К
Я не утверждаю, что сервер тут "при чем".
Но, тем не менее, продолжаете именно тут чего-то добиваться.
Если бы так было, искажение текста RAISERROR было бы на всех компах без исключения.
Вот именно.
Но точно так же я не могу принять ошибку в клиентской части, потому что а) искажение текста наблюдается не на всех клиентских компьютерах (хотя запускаемый экзешник у всех один) и б) в данном конкретном примере у клиента все работало нормально, пока не была в очередной раз заменена ОС, и даже тогда буквально на следующий день глюк почему-то пропал (подозреваю, что из-за очередного потока обновлений ОС). Уже на следующий день я не смог его повторить, хотя вернул текст сообщения к начальному варианту, который был за день до того немилосердно резался на клиенте. Трассировать программу бесполезно: на моем компьютере разработчика глюк не наблюдается вообще (единственная разница с клиентскими: на нем стоит предустановленная Windows 7 при покупке, на обычных клиентских компьютерах системщики ее уничтожают и заменяют на подготовленный ими образ Win 7 - не спрашивайте меня, зачем, логику здесь искать бесполезно). А на компьютере пользователя я трассировку произвести не могу - на нем нет ни полноценного SQL клиента (Enterprise Manager), ни полномасштабного VFP - только RunTime.
Еще раз - вставьте в клиент запись содержимого результат AERROR() и хоть обизучайтесь и отрассируйтесь.
Я вообще-то предполагал (и полагаю), что проблема в обработке информации, переданной сервером клиенту, на этапе до передачи ее клиенту VFP - т.е. ODBC драйвером.
Прелестно.
На это указывает хотя бы тот факт, что ошибка на клиенте исчезла после очередного потока бесконечных обновлений от Microsoft.
Ну так может закончить пустое теоритизирование и начать делать хоть что-то практически для локализации проблемы?
Проблема в том, что хотелось бы знать это точно и иметь некую инструкцию насчет того, какой же собственно пакет обновлений надо ставить на клиентскую машину и какие настройки задавать ODBC драйверу, чтобы избежать ситуации в будущем. (В клиентском коннекте настройки сведены до минимума: Driver=SQL Server, Server=XXXX, Database=XXXX, TrustedConnection=Yes; в идеале это все. К сожалению, пришлось добавить инструкцию Network=DBNMPNTW, инструктирующую ODBC драйвер взаимодействовать с сервером по именованным каналам вместо штатного протокола TCP/IP - к сожалению, потому что Каспер, управляемый нашими системщиками, контролирует обмен по этому протоколу таким образом, что страшно замедляет взаимодействие с сервером вплоть до таймаутов соединения; чтобы снять проблему, пришлось перевести взаимодействие на именованные каналы, найти общий язык с системщиками не удалось.)
Я предполагал, что на форуме есть люди, сталкивавшиеся с проблемой. Обычно вряд ли оказываешься в первопроходцах. Видимо, в данном случае это не так. Жаль.
Тут работают с сервером, а не с драйверами и прочей клиентской ерундой.
4 дек 14, 11:59    [16948355]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Петр К
Member

Откуда:
Сообщений: 53
правильный проходящий.,
"вставьте в клиент сообщение AERROR и хоть обизучайтесь" - а что я, по-вашему, делаю? Вы хоть читали текст? Именно на этом и построена обработка ошибок. Означенный текст берется и показывается клиенту. Вот только при одном и том же экзешнике на разных компах _в некоторых случаях_ результат почему-то разный. Что конкретно вы предлагаете с этим текстом сделать еще? Предложите, готов рассмотреть.
"тут речь ведут о сервере, а не о драйверах и прочей ерунде" - вообще-то ODBC драйвер это составная часть SQL Server, а не конкретного клиента. Open Database Connectivity, понимаете ли. Специально разработанная технология для клиентов, оную поддерживающих. Любых. На форуме нет отдельной ветки, касающихся только ODBC драйверов.
4 дек 14, 12:22    [16948602]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Glory
Member

Откуда:
Сообщений: 104751
Петр К
Я предполагал, что на форуме есть люди, сталкивавшиеся с проблемой. Обычно вряд ли оказываешься в первопроходцах. Видимо, в данном случае это не так. Жаль.

Постоянно сталкиваюсь с некорректным клиентским кодом. И с отрицанием программистом некорректности этого кода.
4 дек 14, 13:24    [16949230]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Петр К
"тут речь ведут о сервере, а не о драйверах и прочей ерунде" - вообще-то ODBC драйвер это составная часть SQL Server, а не конкретного клиента. Open Database Connectivity, понимаете ли. Специально разработанная технология для клиентов, оную поддерживающих. Любых. На форуме нет отдельной ветки, касающихся только ODBC драйверов.
Да ведь вы уже установили, что это не проблема ODBC драйвера, чего вы одно и то же толчёте???
Петр К
На форуме нет отдельной ветки, касающихся только ODBC драйверов.
Задайте уже вопрос в ветке по VPF.
4 дек 14, 13:54    [16949450]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
Петр К
Берем этот текст и передаем его параметром MESSAGEBOX.


Пишите сообщение также и в файл функцией strtofile(), потом ясно будет - messagebox() криво работает или именно так поступают сообщения с сервера.
Были прецеденты некорректного отображения при изменением размера шрифта на 125%.
4 дек 14, 14:09    [16949564]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Петр К
Member

Откуда:
Сообщений: 53
Владислав Колосов,

Хоть один конструктивный намек :-) - это я про 125%. Но в данном случае не катит - я пользователям в обязательном порядке указываю не пользоваться персонализацией 125% - и дело даже не в искажениях текста - есть такой OCX от Microsoft - TreeView, так вот он летит к черту при 125%. Я настраиваю пользователям шрифты только через "Изменение цветов и метрик окна".
Но насчет StrToFile - сделаю, это несложно. Проверю. Как только глюк проявится в следующий раз.
4 дек 14, 14:35    [16949808]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Glory
Member

Откуда:
Сообщений: 104751
Петр К
Хоть один конструктивный намек

Вы хотите уверить, что написанное на VFP неизвестно кем приложение является наилучшим средством мониторинга того, что происходит на сервере и в драйвере ?
4 дек 14, 14:52    [16949975]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Glory
Вы хотите уверить, что написанное на VFP неизвестно кем приложение является наилучшим средством мониторинга того, что происходит на сервере и в драйвере ?

еснно его ж писал ГЕНИЙ ,а не команда из какого-то Редмонда (последние лет 20 подряд)
4 дек 14, 15:40    [16950344]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с текстом сообщения RAISERROR  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
Владислав Колосов
Пишите сообщение также и в файл функцией strtofile(), потом ясно будет - messagebox() криво работает или именно так поступают сообщения с сервера.
Достаточно просто выводить размер сообщения.

Да в общем, найти причину такой простой ошибки, как обрезание строки, настолько просто, даже говорить не о чем. Особенно, если это воспроизводимая ошибка, тогда это дело минут.
Если редкая, случайная, то конечно нужно писать что нибуть в лог, без этого никак.
4 дек 14, 20:18    [16952233]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить