Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / И снова про русский sysmessages / 17 сообщений из 17, страница 1 из 1
14.08.2002, 11:30:36
    #32043100
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Уважаемые коллеги!

Просмотрел архив форума по столь животрепещущей теме, очень много полезных советов, но к сожалению все они больше похожи на рукопашную. Согласитесь перелопачивать таблицу системных сообщений, в которой не меньше 3000 записей, не барское дело, а обрабатывать их на клиенте и подавно.
Подскажите, есть ли какой нибудь системный подход к этой проблеме. Наверняка ведь кто нибудь уже всё перевёл и выложил на интернет соответствующий скрипт или горячо любимый майкрософт выпустил соответствующий патч.
...
Рейтинг: 0 / 0
14.08.2002, 12:01:54
    #32043117
KonstN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Переводы системных сообщений... Не надоело?
Юзверям будешь показывать? Не поймут всё равно.
Добьёшься только того, что к тебе будут прибегать с квадратными глазами после прочтения сообщения типа "Невозможно добавить дублирующую ключевую строку в объект тра-ля-ля с уникальным индексом тра-ля-ля" (Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'.)
Им надо показывать удобочитаемые сообщения, обрабатывая ошибку по её номеру, который что на русском, что на английском одинаков до безобразия.
А сам будешь читать, так почти 100% риск запутаться.
Я как-то с дури заказал экзамен по WinNT4Wrkst на русском... Намучился переводя с русского на английский, чтобы понять о чём речь.
Иллюстрация: при переводе MS-DOS на русский язык системное сообщение "Abort, retry or ignore?" было переведено как "Нефиг, нафиг или пофиг?"
...
Рейтинг: 0 / 0
14.08.2002, 12:50:39
    #32043149
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Ну с duplicate key row согласен не поймут.
А вот "Cannot insert the value NULL into column 'name', table 'serv.dbo.table'; column does not allow nulls. UPDATE fails." "Невозможно установить пустое значение в поле 'name', таблицы 'serv.dbo.table'; пустое значение в поле недопустимо. ОБНОВЛЕНИЕ не состоялось." после пяти раз у юзера, если он конечно не совем потерянный, обморок вызывать не будет, да и причину, из-за которой у него не сохраняется форма, немого пояснит.
Обработка ошибок денег стоит, а заказчики их платить не любят. Так вот и хочется сделать дёшево и сердито.
...
Рейтинг: 0 / 0
14.08.2002, 16:29:48
    #32043237
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Пользователю можно выдовать только два сообщения:
1. Ты что, ОХРЕНЕЛ!!!
2. Хватай пиво и беги за админом!!!
:-))
...
Рейтинг: 0 / 0
14.08.2002, 16:42:07
    #32043245
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Может ему это, того ... ничего не выдавать то, а ?
...
Рейтинг: 0 / 0
15.08.2002, 05:08:52
    #32043384
Sergey Vinogradov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
To: akuz

Жуткую вещь просто описываете.
У вас что пользователь из формы прямо на сервер пишет,
без какого-либо промежуточного слоя?

Вобще-то ошибки принято исправлять , а не пользователю показывать. Их можно в лог писать, а пользователям действительно сообщать только, что действие обломилось.
Имеются в виду ошибки синтаксиса, отсутствие таблиц/процедур на сервере и т.п.

А то, что было перечислено, ошибками не является, так как легко может быть выявлено и показано пользователю до того, как сервер начнет это обрабатывать.
...
Рейтинг: 0 / 0
15.08.2002, 08:05:24
    #32043395
MarchCat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
все тихо должно писаться в лог ... а потом тихо исправляться ... а пользователю временно можно и соврать ... или сообщение о плохой погоде выдать ...
РАБОТАТЬ НУЖНО ПРОСТО И ВЕСЕЛО!!!
...
Рейтинг: 0 / 0
15.08.2002, 09:49:13
    #32043415
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
To: Sergey Vinogradov

Промежуточный слой простой - сторед просида в которую через параметры передаются значения с адошного клиента.
В начале просиды открывается транзакция и, если нет ошибок, в конце она закрывается, а если ошибка произошла то откатывается и вызывается исключение.

ОК назовём это не ошибками, а нарушением целостности данных, попросту различные констрейнты, которые в очень удобной форме можно поддерживать на сервере SQL, вместо того, чтобы проверять на клиенте во всех возможных местах.

Если же пользователя просто обламывать, то он тут-же побежит к админу, а тот к разработчику.
...
Рейтинг: 0 / 0
15.08.2002, 10:31:34
    #32043423
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
To akuz
можно поддерживать на сервере SQL, вместо того, чтобы проверять на клиенте во всех возможных местах.

Так наверное процедура - это и есть сервер, откуда не вызови :)

Обычно при любой ошибке пишется что-то типа:
"Ошибка при изменении (удалении или чего еще)"

И все, что можно и так проверить, проверяется до начала транзакции, тогда и ошибка конкретная выдается - нет наименования, например.

Системные сообщения наверно уж не для юзеров сделаны, а для программеров :)))))))
...
Рейтинг: 0 / 0
15.08.2002, 11:16:54
    #32043451
Sergey Vinogradov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
To: akuz

SP есть - уже лучше.
Там и проверять, и как правильно заметил tigra, до начала транзакции.

А в на клиенте все равно можно кое-что продублировать - чтоб он не MessageBox-ами сразу кидался, а допустим, поля/кнопки подсвечивал/блокировал и т.п. Юзабилити, так сказать.
Хотя, конечно, смотря какой клиент.
...
Рейтинг: 0 / 0
15.08.2002, 12:11:15
    #32043473
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
А есть ещё такая штучка - "ограничения" называется, её даже к отдельному полю можно прикрутить... Так вот, если милый юзарь захочет к примеру в поле даты своё имя любимое прописать, ему сразу можно по мозгам дать, фразой типа: "Ты что братишка творишь, документацию поди почитай!!!"...
Не гневитесь на мою иронию, я с сегодняшнего дня в отпуске, т.ч. мыслить по серьёзному не получается :))
Кстати, в реляционной теории очень много фичей предусмотрено, именно для того, что бы ошибки пользователей гасить ещё на подлёте, вспомните хотя бы того же Дейта...
...
Рейтинг: 0 / 0
15.08.2002, 14:01:24
    #32043534
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
To: Sergey Vinogradov

Это ж сколько строчек кода надо написать вместо!
On Error GoTo err_check
'Вызов процедуры
err_check:
MsgBox err.Description, vbCritical
err.Clear

А зачем тогда нужны констрейнты, проверил всё на клиенте и вперёд!

Нет уж, за сиквел сервер работать не собираюсь.

Лучше подскажите как из сообщения параметры вытащить.
...
Рейтинг: 0 / 0
16.08.2002, 05:09:42
    #32043742
Sergey Vinogradov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Вот упрямый какой. :)

Если в процедуре написать

Код: plaintext
1.
2.
if [Name] is null or [Name] = ''
    raiserror( 'Нельзя сохранить с пустым наименованием',  16 ,  1  )


а затем сделать все тот же On Error GoTo ...,
что появится в том MessageBox-е?

Все равно все ограничения бизнес-логики на констрейнты тяжело посадить, а в процедуре им самое место (и как раз все будет в одном месте).

А sysmessages я сам года три назад, когда был молодой и такой же глупый, переводил на русский ... Сократом. :)
Сразу же и обнаружил, что это совершенно бессмысленно
и нормальной обработки ошибок нисколько не заменяет.
Так что тот sysmessages был благополучно похерен через пару месяцев при переезде на другой сервер.
...
Рейтинг: 0 / 0
16.08.2002, 11:19:31
    #32043817
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Короче говоря, получается, способа использовать системные сообщения для обработки ошибок в TSQL не существует.
Всё что можно добиться от сикуля - это код ошибки.
"Невозможно вставить NULL в какое-то поле какой-то таблицы."
Даже текст сообщения с проставленными параметрами можно увидеть только на клиенте.
Так что девелопер бери лопату и копай!

Или я что-то не так понял?
...
Рейтинг: 0 / 0
16.08.2002, 12:06:56
    #32043839
Sergey Vinogradov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Все верно. Такая уж у нас работа. :)

Что-то я слышал про то, что на констрейны можно вешать собственные сообщения, но как это сделать, понятия не имею.
В BOL про это ни слова. Может народ подскажет, можно таки или нельзя?
...
Рейтинг: 0 / 0
16.08.2002, 19:33:15
    #32044054
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Есть правда один способ, вытащить сообщение с параметрами из ADO, а затем запихнуть обратно в сикуль в какую нибудь специальную просиду типа error_check.
Сравнить с маской из sysmessages по коду ошибки, вычленить параметры и спокойненько их обрабатывать.
А в конце вернуть через параметр подготовленную строку.
В этом случае вся обработка будет в одном месте и на сикуле. А в бейсюке останется:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
On Error GoTo err_check 
 --Вызов процедуры 
 
err_check: 
Description = err.Description
If err.Source = 'Microsoft OLE DB Provider for SQL Server' Then
 --Вызов обработчика из SQL с пар-ми err и Description
 
End If
MsgBox Description, vbCritical 
err.Clear

Согласитесь неплохо.
Но всё-таки русский sysmessages было бы проще :)
...
Рейтинг: 0 / 0
19.08.2002, 10:52:11
    #32044188
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова про русский sysmessages
Ну ты посмотри, а может SQL сервер заставить и базу самому разрабатывать, вот хорошо, только программер тогда зачем? :)))

Если хочешь sysmessages юзерам показывать, то тогда представь, что тебе, как программеру, разработчики сервака (микрософтовские) решили не показывать sysmessages - на фиг, программер сам разберется, а решили показывать типа того:
В объекте № 123 на странице данных №345 произошла ошибка №678 по причине прерывания №890. В случае непонятия обращайтесь в службу поддержки MS

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

:)))))


Я тоже пытался что-нибудь сделать с sysmessages, но понял, что если юзер это увидит, то инфаркт будет у него, а нас всех - программеров - начальство повешает :)

Нет, есть еще способ - можно констрайнам давать имена по-русски, типа create constrain "Не указан год рождения пациента" on table и т.д.
Оно так и будет выдаваться, с этим именем.

Но это маразм.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / И снова про русский sysmessages / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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