Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
megazoid007 Member Откуда: Сообщений: 225 |
Как послать сообщение об ошибке клиентскому приложению Delphi подключенному по ADO? Конструкции типа:rollback transaction raiserror ('Плохо Бро,хочешь что бы твой отпуск закончился раньше чем ты устроился или позже чем уволил', 16, -1) returnне помогают. В Delphi сообщение достается вот так: try ADOCommand1.Execute; except if dm.ADOConnection1.Errors.Count < 1 then Exit; for i:=0 to dm.ADOConnection1.Errors.Count-1 do begin case dm.ADOConnection1.Errors[i].NativeError of 2627: MessageDlg ('Такая дата уже существует в базе, будте внимательны ;-)', mtError, [mbOK], 0); else MessageDlg (dm.ADOConnection1.Errors[i].Source+' '+dm.ADOConnection1.Errors[i].Description, mtError, [mbOK], 0); end; end; end; |
16 май 13, 09:47 [14303420] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
"Конструкция типа" используется в хп? SET NOCOUNT ON есть в ее первых строках? |
16 май 13, 09:58 [14303471] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
pkarklin, нет нету это тригер, код тригера есть в этом топике: https://www.sql.ru/forum/1021869/chto-neponyatno-v-sql-kode-pomogite |
16 май 13, 10:00 [14303478] Ответить | Цитировать Сообщить модератору |
DmitryZ78 Member Откуда: Каменск-Уральский Сообщений: 87 |
megazoid007,try ADOCommand1.Execute; except on e: Exception do MessageBox(e.Message) end; |
16 май 13, 10:12 [14303569] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
DmitryZ78, чета компилятор ругается: [DCC Error] AddVocationUnit.pas(127): E2010 Incompatible types: 'HWND' and 'string' |
16 май 13, 10:30 [14303677] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
megazoid007, ну вообще тем макаром что у меня, успешно перехватываются сообщения об нарушении ограничений CHECK, нарушения целостности и проч, но вот мои месаги чет не хочет |
16 май 13, 10:38 [14303732] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Это конструкция ждет exception Это вовсе не означает, что сообщение сервером не было отправлено. |
||
16 май 13, 10:41 [14303750] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
Блин что за бред не понимаю что не так вот функция:procedure TAddVocationForm.cxButton2Click(Sender: TObject); var QuaryStr1,QuaryStr2: String; colday, i: integer; saly: real; begin ValiDataForm; colday:=DaysBetween(cxDateEdit2.Date,cxDateEdit3.Date); with ComboBox1 do begin saly:=(TEmpl(Items.Objects[ItemIndex]).avesal/29.7)*colday; QuaryStr1:=EmptyStr; QuaryStr2:=EmptyStr; QuaryStr1:='insert into vocation (idemployee'; QuaryStr2:=' values('+IntToStr(TEmpl(Items.Objects[ItemIndex]).id); if Trim(cxTextEdit1.Text)<>'' then begin QuaryStr1:=QuaryStr1+',ordernum'; QuaryStr2:=QuaryStr2+','''+Trim(cxTextEdit1.Text)+''''; end; if cxDateEdit1.Text<>'' then begin QuaryStr1:=QuaryStr1+',orderdate'; QuaryStr2:=QuaryStr2+','''+DateToStr(cxDateEdit1.Date,myformat)+''''; end; QuaryStr1:=QuaryStr1+',datestart'; QuaryStr2:=QuaryStr2+','''+DateToStr(cxDateEdit2.Date,myformat)+''''; QuaryStr1:=QuaryStr1+',dateend'; QuaryStr2:=QuaryStr2+','''+DateToStr(cxDateEdit3.Date,myformat)+''''; QuaryStr1:=QuaryStr1+',vocdays'; QuaryStr2:=QuaryStr2+','+IntToStr(colday); QuaryStr1:=QuaryStr1+',paiddays'; QuaryStr2:=QuaryStr2+','+IntToStr(colday); QuaryStr1:=QuaryStr1+',vacationsum)'; QuaryStr2:=QuaryStr2+','+StringReplace(FloatToStr(saly),',','.',[])+')'; end; ADOCommand1.CommandText:=EmptyStr; ADOCommand1.CommandText:=QuaryStr1+QuaryStr2; Application.MessageBox(PAnsiChar(QuaryStr1+QuaryStr2),'Worning',0); try ADOCommand1.Execute; except on e: Exception do MessageBox(e.Message); end; VocationForm.ADODataSet1.Requery; end; в ней вылазит такое сообщение: [DCC Error] AddVocationUnit.pas(126): E2010 Incompatible types: 'HWND' and 'string' |
16 май 13, 10:49 [14303807] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
на строке on e: Exception do MessageBox(e.Message); |
16 май 13, 10:50 [14303811] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
megazoid007, в общем эта конструкция тоже ничего не возвращает: try ADOCommand1.Execute; except on e: Exception do Application.MessageBox(PAnsiChar(e.Message),'Worning',0); end; |
16 май 13, 11:09 [14303949] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Это значит - except срабатывает, но ничего не отображается ? или - except не срабатывает ? |
||
16 май 13, 11:12 [14303972] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
Glory, ну т.е. сообщение не выводится, исключений никаких не возбуждается, все ровно кроме того что в базу запись не добавляться (из за триггера), а в sql management studio если вставить некорректное данные (с точки зрения триггера) то сообщение выводится |
16 май 13, 11:19 [14304026] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И как вы тогда проверяете, что сообщение не было отослано то ?
А sql management studio тоже клиентское приложение между прочим Которое точно также работает с сервером через коннект. |
||||
16 май 13, 11:21 [14304053] Ответить | Цитировать Сообщить модератору |
DmitryZ78 Member Откуда: Каменск-Уральский Сообщений: 87 |
megazoid007, чем исключение генерите, raiserror или print) ? |
16 май 13, 11:29 [14304112] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
Glory, об исключениях полученных от сервера до сегодняшнего случая я определял:try ADOCommand1.Execute; except if dm.ADOConnection1.Errors.Count < 1 then Exit; for i:=0 to dm.ADOConnection1.Errors.Count-1 do begin case dm.ADOConnection1.Errors[i].NativeError of 2627: MessageDlg ('Такая дата уже существует в базе, будте внимательны ;-)', mtError, [mbOK], 0); else MessageDlg (dm.ADOConnection1.Errors[i].Source+' '+dm.ADOConnection1.Errors[i].Description, mtError, [mbOK], 0); end; end; end; но это касалось исключений сервера предопределенных разработчиками, ну тоесть ограничений целостности или еще каких нить ограничений указанных при создании таблицы. Ну вообще я не утверждал что я как то это определял, просто по идее сервак вроде как должен отправить, а клиент получить, а как на самом деле я собственно за помощью и обратился |
16 май 13, 11:32 [14304144] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
DmitryZ78, raiserror |
16 май 13, 11:32 [14304150] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
megazoid007, Вам уже намекнули на set nocount on. |
16 май 13, 11:38 [14304207] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
invm, да но мне это непомогло |
16 май 13, 11:49 [14304305] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
Ну хотя бы скажи, по средством raiserror 100% сообщение до клиента должно доходить или надо что то дополнительно колдовать, просто что бы определить где разбираться на сервере или на клиенте |
16 май 13, 12:04 [14304461] Ответить | Цитировать Сообщить модератору |
hoha_ftf Member Откуда: ЕКБ Сообщений: 42 |
megazoid007, может пошаманить с тем, что активирует триггер? тот же nocount или ошибка перехватывается |
16 май 13, 12:54 [14304870] Ответить | Цитировать Сообщить модератору |
hoha_ftf Member Откуда: ЕКБ Сообщений: 42 |
оу, не посмотрел: там инсерт собирается |
16 май 13, 12:56 [14304887] Ответить | Цитировать Сообщить модератору |
hoha_ftf Member Откуда: ЕКБ Сообщений: 42 |
а еще вот что интересно:
|
||
16 май 13, 13:00 [14304935] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
hoha_ftf, т.е. вы имеете ввиду использовать отрицательное значение или завышенное что бы вызвать исключение ? |
16 май 13, 13:09 [14305016] Ответить | Цитировать Сообщить модератору |
megazoid007 Member Откуда: Сообщений: 225 |
state на сколько я понял нужно использовать когда нужно отличать сообщения с одинаковым кодом |
16 май 13, 13:17 [14305091] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
На клиенте надо читать _все_ сообщения, которые передает сервер. |
||
16 май 13, 13:19 [14305100] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |