powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка при отображении текста RAISERROR
7 сообщений из 7, страница 1 из 1
Ошибка при отображении текста RAISERROR
    #38824877
Петр К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сразу оговорюсь: серверные гуру в теме Microsoft SQL Server меня послали. Дескать, рукава у нас пошиты правильно, а то, что костюмчик не сидит - дело не наше. Точно так же меня могут послать и в этой теме - из текста ниже будет понятно, почему.
Итак, проблема: есть некая база данных на SQL Server и есть клиентское приложение. К таблице в БД есть триггер, который формирует сообщения об ошибке и откатывает трансакции если это надо. В конкретном случае ошибка генерируется при вводе пользователем данных, приводящих к превышению некоего лимита. В теле триггера формируется строка, информирующая об ошибке с подробным пояснением, что и почему, и что пользователю надо сделать. Далее, сообщение возвращается клиенту с помощью RAISERROR и трансакция откатывается через ROLLBACK TRANSACTION. На клиенте VFP есть база выборок с коннектом через стандартный ODBC драйвер Microsoft. Строка коннекта максимально кратка: Driver=SQL Server, Server=XXX, Database=XXX, TrustedConnection=YES (последнее, согласно принятой политике безопасности внутри предприятия). Это необходимый минимум. К сожалению, примерно год назад был вынужден добавить опцию NETWORK=DBNMPNTW, чтобы переключить взаимодействие с сервером на протокол именованных каналов. Именно - к сожалению, причина - отдельный топик. Пользователь на клиенте вводит данные, вызывается TABLEUPDATE(), если он неудачный, то вызывается AERROR(), а потом TABLEREVERT(). Текст сообщения об ошибке в возвращаемом массиве AERROR() показывается пользователю посредством MESSAGEBOX. Все дубово просто, как ...
Это преамбула. А вот амбула: на WinXP все работало зашибись. На Win7 в некоторых случаях и на некоторых машинах наблюдается глюк: текст сообщения RAISERROR произвольным образом обрезается - иногда сначала, иногда с конца - и пользователю показывается оставшийся кусок. При этом буквально на соседней машине этого не наблюдается в тот же день и в тот же час, с тем же приложением и в той же ситуации. Последний раз столкнулся с этим позавчера, причем события во времени развертывались так: пользователь работал на Win7 и горя не знал. Каспер (в очередной раз!) угробил машину. У наших системщиков нет иного метода, кроме как с перхотью отрубить голову: на машине сносится все, ставится эталонная ОС из образа. Я потом просто ставлю (опять-таки в очередной раз) VFP RunTime, сгенерированный InstallShield, и ярлыки на экзешники. Ничего не меняя в аплликейшен вообще. Пользователь начинает работать - и звонит с претензией. Я запускаю тот же самый экзешник - у меня ничего подобного, сообщение неискаженное. Дистанционно подключаюсь к юзеру - искажено. Далее начинаю играться с текстом сообщения. Грохаю все, кроме пары слов - все зашибись показывает. Начинаю добавлять в текст слово за словом. До некоторого момента все идет отлично, но с некоторой очередной буквы (!!!) все нахрен пропадает. В хелпе на SQL написано, что текст RAISERROR ограничен 2038 символами, при превышении данной длины будет показано 2045 символов и три точки. Более никаких ограничений нет. Я к этому лимиту и близко не приближаюсь. В некоторых случаях данного глюка помогала замена русских букв на транслит, но не в последнем случае. Кое-как подхимичил сообщение, подсократив там и сям. Чтобы пользователь мог работать. На следующий день решил еще поиграться. Но глюк исчез - т.е. возврат к предыдущему тексту искажение текста уже не вызвал. Экзешник не менялся ни на байт, настройки не менялись тоже. Единственная разница: в очередной раз прилетел бесконечный поток обновлений от системщиков.
Я предполагаю, что собака порылась либо во взаимодействии ODBC драйвера клиента с сервером, либо во взаимодействии его же с VFP. Но в последнее верится меньше, поскольку Microsoft VFP давно уже не занимается, обновлений на него нет. Но хотелось бы понять, какие собственно обновления надо обязательно ставить на новую машину, чтобы избежать этой неприятности. Нечто вроде хотфикса. Потому что понять, что к чему в том потоке, который идет от наших системщиков, мягко говоря, очень трудно. Может, кто сталкивался с такой проблемой?
...
Рейтинг: 0 / 0
Ошибка при отображении текста RAISERROR
    #38824896
Петр К,

а теперь тут еще раз: запротоколируйте выход функции Aerror() и только после этого можно что-то дальше думать. Как протоколировать я уже писал в той теме, где я вам написал, что там занимаются только сервером.
...
Рейтинг: 0 / 0
Ошибка при отображении текста RAISERROR
    #38824906
Петр Кправильный проходящий.,
"вставьте в клиент сообщение AERROR и хоть обизучайтесь" - а что я, по-вашему, делаю? Вы хоть читали текст? Именно на этом и построена обработка ошибок. Означенный текст берется и показывается клиенту.Это ДВА действия - получение данных и их отображение. Вас просят показать результат ПЕРВОГО действия. Дабы выяснить после какого действия происходит искажение.
...
Рейтинг: 0 / 0
Ошибка при отображении текста RAISERROR
    #38824934
Петр К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
правильный проходящий.,

Да не вопрос. Вообще-то можно было сразу попросить воспользоваться strtofile без нравоучений ("делайте хоть что-нибудь"). Сделаю. Как только глюк проявится в следующий раз. Сейчас-то он ушел у пользователя, повторить уже не могу. Появится - запротоколирую. Вообще было высказано предположение, что виновата экранная лупа. В данном случае это не так - я пользователям пользоваться ей запрещаю, потому что был опыт с OCX TreeView от Microsoft, который приводил к крашу программы. Только 100%.
Как я понимаю, я вообще первый, кто обращается на _данном_ форуме с таким вопросом? Я-то предполагал, что у людей есть опыт.
...
Рейтинг: 0 / 0
Ошибка при отображении текста RAISERROR
    #38824956
Петр Кправильный проходящий.,

Да не вопрос. Вообще-то можно было сразу попросить воспользоваться strtofile без нравоучений ("делайте хоть что-нибудь"). Вам мало указаний на направление действий, вам надо все разжевать и в рот положить? Вот этого мало было:
Вот этот самый "текст ошибки, переданный через RAISERROR" в клиенте и надо проверить. До показа в окне. Или вы просто про указанную вам Владом Колосовым функцию не знали? Так спросили бы. Так что не надо тут изображать оскорбленную невинность.
Я-то предполагал, что у людей есть опыт.Он и есть. Может не конкретно тот, который вам нужен, но он есть. И какой опыт нужен в вашем случае еще не ясно ибо пока еще не поставлен диагноз.
...
Рейтинг: 0 / 0
Ошибка при отображении текста RAISERROR
    #38824962
Петр К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
правильный проходящий.,

Все, далее можете мне не отвечать. Надоело.
...
Рейтинг: 0 / 0
Ошибка при отображении текста RAISERROR
    #38824970
Петр Кправильный проходящий.,

Все, далее можете мне не отвечать. Надоело.Спасибо за разрешение, мне его очень не хватало.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка при отображении текста RAISERROR
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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