Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ADP: Как подавить сообщения сервера об ошибках? / 14 сообщений из 14, страница 1 из 1
14.07.2003, 16:59
    #32207464
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
...это даже не ошибки, а сообщения об игнорировании duplicate key, правда с 16-тым уровнем.
==
Form_Error почему-то опять не катит - ошибку отлавливает но не дает ее игнорировать - хотя записи добавляются нормально

==
чувствую - сумбурно описал проблему, но по другому пока не могу :(
...
Рейтинг: 0 / 0
14.07.2003, 17:05
    #32207476
rootadmin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
on error resume next
так пробовал?
...
Рейтинг: 0 / 0
14.07.2003, 17:06
    #32207479
VIG
VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
Resume Next устроит?
...
Рейтинг: 0 / 0
14.07.2003, 17:09
    #32207483
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
Видимо не устроит. Если упоминалось Form_Error - значит речь идет о добавлении через форму, а не программно.
Правильно я стелепатировал?
...
Рейтинг: 0 / 0
14.07.2003, 17:16
    #32207493
VIG
VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
Victor
тебе же объяснили на на форуме по SQL Server что то что ты хочешь сделать-достаточно опасно.Имхо лучше переделать запрос и не вставлять дубликаты.
...
Рейтинг: 0 / 0
14.07.2003, 17:35
    #32207516
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
2VIG

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

На всякий случай привижу сам триггер. Прошу конструктивно охаить :) мои первые потуги. А так же ответить на вопрос - можно ли в вынести логику работы триггера в ХП.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
Alter   TRIGGER [trig_I_tbl3AccountsName] ON [dbo].[tbl3AccountsName] 
FOR  INSERT
AS
set nocount on
SET XACT_ABORT OFF

DECLARE @RC int
DECLARE @param int
DECLARE @id_AccName nvarchar( 100 )
declare @temp as INT
set @temp=(select Count(*) From Inserted)

if @temp= 1  
	begin
		 -- единичное обновление ->
 
		 --print (%af_src_str_0)
 
		select top  1  @param=i.auAccountsName,@id_AccName=i.ID_AccountsName from inserted as i
		 --print %af_src_str_1 + CAST(@param AS nvarchar(50))
 
		 --print %af_src_str_2 + CAST(@id_AccName AS nvarchar(50))
 
		 --EXEC @RC = dbo.xp_TriggerOnAccountsName @param, @id_AccName
 
		 --print %af_src_str_3 + cast(@rc as nvarchar (100))
 
		 -- if @rc=1 rollback tran
 
if @param is null or @param= 0  
	begin
		raiserror ('Переданный параметр не должен быть пустым или равным 0', 16 , 1 )
		rollback tran		
		 --return 1
 
	end
if LEN(@id_AccName)= 0  or @id_AccName is null
	begin
		raiserror ('Номер счета не может быть пустым!', 16 , 1 )
		rollback tran
		 --return 1
 
	end

 --print %af_src_str_6 + cast(@param as nvarchar(255)) + %af_src_str_7+ cast(@id_AccName as nvarchar(255))
 
 -- возвращает полный список всех пар и вставляет его в соответсвующую таблицу
 

INSERT INTO tbl3AccountsBilateral ( auAccountsName_debit, auAccountsName_credit )
SELECT D,C FROM fn_TableAllAccountsBielat (@param)
 
 --print %af_src_str_8 + cast (@@rowcount as nvarchar(255))
 


set @temp= 0   -- Обнуляем
 
 
 -- Дебетовый обороты -его код в таблице dbo.tbl0DataHierachesMain=3
 

 -- определим есть ли в иерархии иерархия с именем равным наименованию кода счета (а именно это имя по умолчанию становится именем иерархии)
 
 -- auDH_Name=3 - дебетовый оборот
 
set @temp=(
SELECT TOP  1  auDH_Main FROM dbo.tbl0DataHieraches
WHERE     (auDH_Name =  3 ) AND 
(ID_Parent_auDH_Main IS NULL) AND 
(NameOfDataHieraches_rus = @id_AccName)
)

 --print %af_src_str_9 + cast(@temp as char(10))
 
if isnull(@temp, 0 )= 0    -- т.е. не обнаружено
 
begin
	 -- нет такого имене в иерархии - создаем такую иерархию с именем @id_AccName
 
	 -- 3 Дебетовый оборот 
 
 --print %af_src_str_10 
 
	INSERT INTO dbo.tbl0DataHieraches 
	(auDH_Name, ID_Parent_auDH_Main,NameOfDataHieraches_rus ,NameOfDataHieraches_ger)
	VALUES ( 3 , NULL,@id_AccName , @id_AccName)
	set @temp=@@IDENTITY  -- номер счетчика и есть значение auDH_Main
 
end
 -- на ELSE не проверяем ибо @temp и так получить свое значение 
 
 --print %af_src_str_11+ cast(@temp as char(50))
 
INSERT INTO dbo.tbl3AccountsDH (auBilateralAccounts,auDH_Main) 
SELECT auBilateralAccounts, @temp FROM dbo.tbl3AccountsBilateral 
WHERE auAccountsName_debit=@param
 --print %af_src_str_12 + cast(@@rowcount as char(50))
 

 -- Кредитовые обороты - его код в таблице dbo.tbl0DataHierachesMain=4
 

 -- определим есть ли в иерархии иерархия с именем равным наименованию кода счета (а именно это имя по умолчанию становится именем иерархии)
 
 -- auDH_Name=4 - кредетовый  оборот
 
set @temp=(
SELECT TOP  1  auDH_Main FROM dbo.tbl0DataHieraches
WHERE     (auDH_Name =  4 ) AND 
(ID_Parent_auDH_Main IS NULL) AND 
(NameOfDataHieraches_rus = @id_AccName)
)

 --print %af_src_str_13 + cast(isnull(@temp,0) as char(10))
 
if isnull(@temp, 0 )= 0    -- т.е. не обнаружено
 
	begin
			 -- нет такого имене в иерархии - создаем такую иерархию с именем @id_AccName
 
			
			INSERT INTO dbo.tbl0DataHieraches 
			(auDH_Name, ID_Parent_auDH_Main,NameOfDataHieraches_rus ,NameOfDataHieraches_ger)
			VALUES ( 4 , NULL, @id_AccName , @id_AccName )
			set @temp=@@IDENTITY  -- номер счетчика и есть значение auDH_Main
 
		 -- print %af_src_str_14 + cast (@temp as char(10))
 
	
	end
 -- на ELSE не проверяем ибо @temp и так получить свое значение 
 

INSERT INTO dbo.tbl3AccountsDH (auBilateralAccounts,auDH_Main) 
SELECT auBilateralAccounts, @temp FROM dbo.tbl3AccountsBilateral 
WHERE auAccountsName_credit=@param

 --print %af_src_str_15 + cast(@@rowcount as char(10))
 
 -- Добавление в dbo.tbl3AccountsDH все возможные значение
 
 -- ****************ДЕБЕТ***********************%af_src_str_16ERROR %af_src_str_17Цикл%af_src_str_18Значение @@ROWCOUN <= 0. Нет обновления!'
 
		end 

SET XACT_ABORT ON
...
Рейтинг: 0 / 0
14.07.2003, 17:45
    #32207531
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
2VIG
2Лох

Resume Next не устроит ибо оно и не работает так как должно бы :(
прикол в том что запись добавляется, триггер выполняется, но...
выдается сообщение о том, что было проигнорирована попытка вставить дупликаты и все. Пока форму не закрою ( с руганью акеса) никуда с записи деться нельзя :(
==
чую где-то у меня глупость зарыта, а то и две... глупости
...
Рейтинг: 0 / 0
14.07.2003, 18:27
    #32207577
VIG
VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
На вскидку (сильно не вникал т.к к концу дня голова не соображает).
можно ли в вынести логику работы триггера в ХП.
Да.Триггер -та же самая ХП ,только срабатывает при наступлении соответствующего события. Ты можеш загнать всю логику в хп и вызывать их сам в соответствующих местах и случаях.
По программе:
Ты используешь top 1 без order by.Ты уверен что получишь нужную запись?
...
Рейтинг: 0 / 0
14.07.2003, 21:44
    #32207704
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
2VIG
> Ты можеш загнать всю логику в хп и вызывать их сам в соответствующих местах и случаях.

А транзакция так и останеться единой? Т.е. я в добавляю запись, получаю ее ID, передаю этот ID как парметр ХП - там далее добавляется в таблицу(цы) записи с этим ID (еще не зафиксированным). На все таблицы стоит DRI. Если в теле триггера - то все ОК.

>Ты используешь top 1 без order by.Ты уверен что получишь нужную запись?

Я сдела так (правильно ли?)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
set @temp=(select Count(*) From Inserted)
 -- получили кол-во записей в таблице Inserted
 
if @temp= 1 
...  1  запись - значит можно и TOP  1 
If @temp> 1 
... много записей - буду делать обработку через курсор


==
Да, VIG, главное: Спасибо
...
Рейтинг: 0 / 0
14.07.2003, 21:46
    #32207705
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
2Victor
if @param is null or @param=0
begin
raiserror ('Переданный параметр не должен быть пустым или равным 0',16,1)
rollback tran
--return 1
end
if LEN(@id_AccName)=0 or @id_AccName is null
begin
raiserror ('Номер счета не может быть пустым!',16,1)
rollback tran
--return 1
end


эти условия наверно проще на клиенте проверить?
или в этом есть какой-то особый смысл?
т.е. сначала на клиенте проверить данные - это же простые условия - за них должен отвечать клиент . это проще обработать на клиенте , и не гонять на сервер не проверенные на простое заполнение данные.
...
Рейтинг: 0 / 0
15.07.2003, 09:05
    #32207847
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
2вадя
>эти условия наверно проще на клиенте проверить?

Они на клиенте и проверяются. Это просто перестраховка, дабы из-за какой-либо причины триггер не за фонтанировал сообщениями об ошибках.
...
Рейтинг: 0 / 0
15.07.2003, 10:12
    #32207929
Артист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
мож тебе его разбить на нескоко тригеров и отлаживать поочередно отключая их...
...
Рейтинг: 0 / 0
15.07.2003, 10:33
    #32207957
VIG
VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
2Senin Viktor
А как тебе такой вариант?
В хп загоняешь
Код: plaintext
1.
2.
INSERT table1 (.....)
SELECT .... FROM table2 LEFT OUTER JOIN table1 ON table2.id = table1.id 
WHERE table1.id IS NULL

Таким образом ты гарантированно получаешь записи которых нет в table1
(Естествено,что вместо table2 м.б запрос отбирарающий нужные тебе записи)
а в триггере реализуешь дополнительную(при необходимости) логику
...
Рейтинг: 0 / 0
15.07.2003, 10:54
    #32207994
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADP: Как подавить сообщения сервера об ошибках?
2VIG
>Таким образом ты гарантированно получаешь записи которых нет в table1

Ужу вынес телдо триггера в отдельную ХП.
Щас мучаю запрос, чтобы отбирал только уникальные.
Как домучаю - кину тело триггера вам на потрошение :)

2Артист
>мож тебе его разбить на нескоко тригеров и отлаживать поочередно
отключая их...

Да уже впринципе все отлажено. Кроме ебучего запроса.
У меня так бывает - заклинит и все. Пока не собирусь и не удалю все нафиг и не начну заново - не проходит :)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ADP: Как подавить сообщения сервера об ошибках? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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