![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
регистр при именовании переменных
stud © (2006-07-14 18:04:00)субд - MSSQL2000.
проблема следующая: на одну таблицу разработчики повесили триггер, в котором объявлены две одинаковые переменные, но записанные в разном регистре.
сам sql сервер настроен на различие регистра, но когда я пытаюсь внести изменения в эту таблицу то при срабатывании триггера получаю ошибку:
переменная ААА уже объявлена.
для доступа пользуюсь АДО 2.8. нужны ли какие настройки на самом клиенте чтобы избежать подобной проблемы?
stud (2006-07-17 16:37:00) [1]с разработчиками разобрались, они сами переименовали эти переменные.
очевидно "ихний" билдер настроен как-то хитро, что действительно игнорирует подобные вещи!?
хотя как и почему - не понятно....
вот еще вопрос в догонку:
а насколько корректно в самом триггере откатывать транзакию?
просто просмотрел весь текст и нашел в конце - если какие-либо условия не соблюдаются то в триггере происходит откат транзакции.
Fay (2006-07-17 14:41:00) [2]2 sniknik © (17.07.06 14:38) [34]
> я сомневаюсь в том что не вижу, и не могу проверить.
Такая же фигня 8)
sniknik (2006-07-17 14:38:00) [3]Fay © (17.07.06 14:36) [33]
твой то? не сомневаюсь, добавляются, не вижу там слова instead в тригере.
я сомневаюсь в том что не вижу, и не могу проверить.
Fay (2006-07-17 14:36:00) [4]2 stud © (17.07.06 13:42) [31]
> каким образом запись всетаки добавляется у "них" в бд?
2 sniknik © (17.07.06 14:25) [32]
а я знаю?
Проверьте код из [24] - записи прекрасно добавляются.
sniknik (2006-07-17 14:25:00) [5]> каким образом запись всетаки добавляется у "них" в бд?
а я знаю? и откуда бы мог узнать?... уже сколько намекаю на реальный код, чтобы сэмулировать глюк... ?
вот на 31м только посте узнал кодировку... приду домой попробую с ней. опять по догадкам...
и потом, чем может помешать добавлятся записям "слет" тригера, если он не instead of конечно?
stud (2006-07-17 13:42:00) [6]колатион cirilyc_general_bin
sniknik © (17.07.06 13:20) [30]
а происходит ошибка которая их программой просто "проглатывается", тригер естественно не отрабатывает
[jhjij
хорошо, если триггер не отрабатывает (возникает исключение) каким образом запись всетаки добавляется у "них" в бд?
если исключение гасится на клиенте, то сервер по идее все равно не должен дать внести изменения в бд, если в работе тригера возникло исключение?
sniknik (2006-07-17 13:20:00) [7]> а происходит проверка на дубликаты и т.д.
судя по всему не происходит... а происходит ошибка которая их программой просто "проглатывается", тригер естественно не отрабатывает.
последняя проверка, для уверенности, какой у тебя коллатион сервера? (свойства на сервере в IE, вкладка "general")
stud (2006-07-17 13:15:00) [8]это на одном и том же сервере, на одной и той же бд.
этот вопрос возникал давно и они его подправили, но после очередного обновления опять вернулся старый код тригера.
в самом тригере данные не изменяются, а происходит проверка на дубликаты и т.д.
sniknik (2006-07-17 13:07:00) [9]stud © (17.07.06 13:02) [27]
и это на том же самом sql сервере, на котором "их" программа работает? и тригер этот выполняется? (по изменяемым в нем данным можно посмотреть)
или это ты перенес "их" базу, на свой с другими настройками sql сервер?
stud (2006-07-17 13:02:00) [10]declare .....
@CCTCodechar(5),
@CCTPassDeal varchar(50),
@Len int,
@Queue int,
@Status int,
@DelStatus int,
@TestedCurrencyCheck smallint,
@CctCode
вот виновники, а вот ошибка:
project ... raised exception class EOleException with message 'The variable name '@CctCode' has already been declared. variable names must be unique within a query batch or stored procedure'
stud (2006-07-17 12:52:00) [11]sniknik © (17.07.06 12:46) [25]
но реальный "грешный" код был бы лучше.
ща копаю. сегодня очередное обновление было
sniknik (2006-07-17 12:46:00) [12]Fay © (17.07.06 12:27) [24]
возможно, но тогда коллатион тут вообще не причем.
как же тогда
> триггера получаю ошибку: переменная ААА уже объявлена.
вообще догадки конечно развивают сообразительность, но реальный "грешный" код был бы лучше.
Fay (2006-07-17 12:27:00) [13]2 sniknik © (17.07.06 12:21) [23]
Аналог глюка автора? Прикольно, но я, кажется, понял 8)
create table T1 (
ID int not null primary key
)
go
create table T2 (
ID int not null primary key
)
go
create trigger tr_t2_i
on T2
for insert
as
raiserror 50001 'qwe'
go
create procedure p_Jopa
as
insert into t1 values (1)
insert into t2 values (1)
insert into t1 values (2)
go
на клиенте
ADOConnection1.Execute('exec p_Jopa')// Молча
ADOConnection1.Execute('insert into T2 values (3)')// Вслух
Т.е. PowerBuilder, видимо, игнорирует ошибки. Там ведь нет компонентов VCL, которые вымучивают исключения на основании какой-то из возвращённых в recordset-ах ошибок.
sniknik (2006-07-17 12:21:00) [14]> Не удивительно, что всё работает.
в смысле? что тогда надо поставить чтобы не работало?
сделать аналог глюка автора, так чтобы одна программа работала, а другая там же выдавала вот этот глюк.
Fay (2006-07-17 12:16:00) [15]2 sniknik © (17.07.06 12:10) [20]
Не удивительно, что всё работает.
stud (2006-07-17 12:10:00) [16]Fay © (17.07.06 11:42) [16]
Это невдолбенно сложный вопрос. Даже как-то в голову ничего не приходит...
я понимаю, понедельник - день тяжелый, но не настолько же!
меня интересует почему при инициировании этого тригера моей программой возникает исключение, а при выполнении тех же операций билдеровской прогой этого исключения не возникает?!
(это не потому что я обрабатываю исключения и вывожу сообщения об ошибках, а потому что оно действительно возникает!
да, билдерская программа тоже обрабатвает исключения.)
sniknik (2006-07-17 12:10:00) [17]p.s. если нужны какието проверки дополнительные, то только вечером, на работе не хочу все "портить".
sniknik (2006-07-17 12:08:00) [18]sniknik © (15.07.06 00:44) [9]
> Cyrillic_General_CS_AS
Fay (2006-07-17 12:06:00) [19]2 sniknik © (17.07.06 12:04) [17]
Какой collation у сервера?
sniknik (2006-07-17 12:04:00) [20]вообщето в суботу (раз уж все поменял), делал тест, тригер в котором 2 переменные с различием только в регистре, никаких проблем с регистром при обновлении... да и вообще проблем как таковых (не учитывая того, что весде приходится регистр учитывать... ну это то как раз ожидалось)
т.что проблема скорее всего с способах реализации, и не тригера, т.к. "их" программа работает без ошибок.
ну и думаю дальше "теорию" обсуждать бесмысленно, т.к. у "них" работает, у меня тоже, значит проблема в ... (догадайтесь ;)