Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

регистр при именовании переменных   Найти похожие ветки 

 
stud ©   (2006-07-14 18:04) [0]

субд - MSSQL2000.
проблема следующая: на одну таблицу разработчики повесили триггер, в котором объявлены две одинаковые переменные, но записанные в разном регистре.
сам sql сервер настроен на различие регистра, но когда я пытаюсь внести изменения в эту таблицу то при срабатывании триггера получаю ошибку:
переменная ААА уже объявлена.
для доступа пользуюсь АДО 2.8. нужны ли какие настройки на самом клиенте чтобы избежать подобной проблемы?


 
Fay ©   (2006-07-14 20:23) [1]

2 stud ©   (14.07.06 18:04)
> сам sql сервер настроен на различие регистра
Сам сервер или база?


 
Fay ©   (2006-07-14 20:26) [2]

2 stud ©   (14.07.06 18:04)
Не забудь обратиться к разработчикам. Использование отичающихся лишь регистром имён переменных - баг, т.к. они (разработчики) не должны вносить требования к настройкам сервера.


 
sniknik ©   (2006-07-14 20:39) [3]

> в котором объявлены две одинаковые переменные, но записанные в разном регистре.
как это они умудрились?
т.е. вот это
> сам sql сервер настроен на различие регистра
как сделать? не должно быть такого, данные да, можно коллатионами задать и с различием регистра и без, но переменных то это не касается. и настроек таких нет. (или может я чегото не знаю?)


 
sniknik ©   (2006-07-14 20:42) [4]

кстати, вот это
DECLARE @A INT
DECLARE @а INT
у вас сработает (скопировать) если выполнить одним блоком, но вовсе не изза раззличия регистра сервером для переменных...


 
Fay ©   (2006-07-14 21:23) [5]

2 sniknik ©   (14.07.06 20:42) [4]
За различие рестраа имён переменных отвечает collation сервера. В курсе?


 
Fay ©   (2006-07-14 21:24) [6]

8))
#define рестраа регистра


 
sniknik ©   (2006-07-14 23:31) [7]

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


 
sniknik ©   (2006-07-14 23:33) [8]

вообще всегда считал, что это то, что получит база при создании своего рода дефаултная настройка. то что она и язык затрагивает... нонсенс!


 
sniknik ©   (2006-07-15 00:44) [9]

блин...
сменил мастера (rebuildm), не заняло много времени, колатион поставил Cyrillic_General_CS_AS (стал у сервера такой), действительно влияет на язык... переменные @A и @a различаются. не ожидал.


 
Fay ©   (2006-07-15 07:18) [10]

2 sniknik ©   (15.07.06 0:44) [9]
> не ожидал
Ага, а я просто угадал


 
stud ©   (2006-07-17 11:03) [11]

Fay ©   (14.07.06 20:26) [2]
Не забудь обратиться к разработчикам. Использование отичающихся лишь регистром имён переменных - баг, т.к. они (разработчики) не должны вносить требования к настройкам сервера.

обращался. обещали исправить.
но тут есть один непонятный момент, тригер выполняется на сервере, по идее клиент тут вообще должен быть не при делах?? кроме того программа этих самых разработчиков, написаная правда на Powerbilder работает нормально.


 
Stanislav ©   (2006-07-17 11:04) [12]

У нас такое было,но наоборот, т.е. был collation не чувствительный к регистру, в хранимках обявиляли переменную как @A, а использовали как @a. После переноса базы на сервак с другим collation, либо изменили на базе collation(непомню точно). Перестало все работать, пока collation не вернули.


 
Desdechado ©   (2006-07-17 11:14) [13]

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


 
Fay ©   (2006-07-17 11:21) [14]

2 stud ©   (17.07.06 11:03) [11]
Ничего не понял.
> по идее клиент тут вообще должен быть не при делах
А он и так ни при делах

> программа этих самых разработчиков, написаная правда на Powerbilder
триггер тоже написан на Powerbilder? убиться с тумбочки.


 
stud ©   (2006-07-17 11:31) [15]

Desdechado ©   (17.07.06 11:14) [13]
Но инициатива обавления записи происходит из клиента, значит, ошибки ему же и отдаются. Все так и задумано.

разумеется инициирует клиент, но сам тригер выполняется на сервере, с настройками того сервера, на котором выполняется или с теми с которыми клиент подключается?
Fay ©   (17.07.06 11:21) [14]
триггер тоже написан на Powerbilder? убиться с тумбочки.

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


 
Fay ©   (2006-07-17 11:42) [16]

2 stud ©   (17.07.06 11:31) [15]
> интересует почему
Почему одна программа выводит сообщения об ошибке, а другая не выводит?
Это невдолбенно сложный вопрос. Даже как-то в голову ничего не приходит...
Неужели возможно написать программу, которая не выводит сообщения о некоторых ошибках?
Даже не верится!


 
sniknik ©   (2006-07-17 12:04) [17]

вообщето в суботу (раз уж все поменял), делал тест, тригер в котором 2 переменные с различием только в регистре, никаких проблем с регистром при обновлении... да и вообще проблем как таковых (не учитывая того, что весде приходится регистр учитывать... ну это то как раз ожидалось)

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


 
Fay ©   (2006-07-17 12:06) [18]

2 sniknik ©   (17.07.06 12:04) [17]
Какой collation у сервера?


 
sniknik ©   (2006-07-17 12:08) [19]

sniknik ©   (15.07.06 00:44) [9]
> Cyrillic_General_CS_AS


 
sniknik ©   (2006-07-17 12:10) [20]

p.s. если нужны  какието проверки дополнительные, то только вечером, на работе не хочу все "портить".


 
stud ©   (2006-07-17 12:10) [21]

Fay ©   (17.07.06 11:42) [16]
Это невдолбенно сложный вопрос. Даже как-то в голову ничего не приходит...

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


 
Fay ©   (2006-07-17 12:16) [22]

2 sniknik ©   (17.07.06 12:10) [20]
Не удивительно, что всё работает.


 
sniknik ©   (2006-07-17 12:21) [23]

> Не удивительно, что всё работает.
в смысле? что тогда надо поставить чтобы не работало?
сделать аналог глюка автора, так чтобы одна программа работала, а другая там же выдавала вот этот глюк.


 
Fay ©   (2006-07-17 12:27) [24]

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:46) [25]

Fay ©   (17.07.06 12:27) [24]
возможно, но тогда коллатион тут вообще не причем.
как же тогда
> триггера получаю ошибку: переменная ААА уже объявлена.

вообще догадки конечно развивают сообразительность, но реальный "грешный" код был бы лучше.


 
stud ©   (2006-07-17 12:52) [26]

sniknik ©   (17.07.06 12:46) [25]
но реальный "грешный" код был бы лучше.

ща копаю. сегодня очередное обновление было


 
stud ©   (2006-07-17 13:02) [27]

declare .....
@CCTCode char(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"


 
sniknik ©   (2006-07-17 13:07) [28]

stud ©   (17.07.06 13:02) [27]
и это на том же самом sql сервере, на котором "их" программа работает? и тригер этот выполняется? (по изменяемым в нем данным можно посмотреть)  
или это ты перенес "их" базу, на свой с другими настройками sql сервер?


 
stud ©   (2006-07-17 13:15) [29]

это на одном и том же сервере, на одной и той же бд.
этот вопрос возникал давно и они его подправили, но после очередного обновления опять вернулся старый код тригера.
в самом тригере данные не изменяются, а происходит проверка на дубликаты и т.д.


 
sniknik ©   (2006-07-17 13:20) [30]

> а происходит проверка на дубликаты и т.д.
судя по всему не происходит... а происходит ошибка которая их программой просто "проглатывается", тригер естественно не отрабатывает.

последняя проверка, для уверенности, какой у тебя коллатион сервера? (свойства на сервере в IE, вкладка "general")


 
stud ©   (2006-07-17 13:42) [31]

колатион cirilyc_general_bin
sniknik ©   (17.07.06 13:20) [30]
а происходит ошибка которая их программой просто "проглатывается", тригер естественно не отрабатывает

[jhjij
хорошо, если триггер не отрабатывает (возникает исключение) каким образом запись всетаки добавляется у "них" в бд?
если исключение гасится на клиенте, то сервер по идее все равно не должен дать внести изменения в бд, если в работе тригера возникло исключение?


 
sniknik ©   (2006-07-17 14:25) [32]

> каким образом запись всетаки добавляется у "них" в бд?
а я знаю? и откуда бы мог узнать?... уже сколько намекаю на реальный код, чтобы сэмулировать глюк... ?
вот на 31м только посте узнал кодировку... приду домой попробую с ней. опять по догадкам...

и потом, чем может помешать добавлятся записям "слет" тригера, если он не instead of конечно?


 
Fay ©   (2006-07-17 14:36) [33]

2 stud ©   (17.07.06 13:42) [31]
> каким образом запись всетаки добавляется у "них" в бд?
2 sniknik ©   (17.07.06 14:25) [32]
а я знаю?

Проверьте код из [24] - записи прекрасно добавляются.


 
sniknik ©   (2006-07-17 14:38) [34]

Fay ©   (17.07.06 14:36) [33]
твой то? не сомневаюсь, добавляются, не вижу там слова instead в тригере.

я сомневаюсь в том что не вижу, и не могу проверить.


 
Fay ©   (2006-07-17 14:41) [35]

2 sniknik ©   (17.07.06 14:38) [34]
> я сомневаюсь в том что не вижу, и не могу проверить.
Такая же фигня 8)


 
stud ©   (2006-07-17 16:37) [36]

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.039 c
15-1156834263
passlight
2006-08-29 10:51
2006.09.17
Не были они на Луне!!!


15-1156353969
imbalacedees
2006-08-23 21:26
2006.09.17
PHP опять вопрос )


1-1154507212
elena_pp
2006-08-02 12:26
2006.09.17
Как в Excel задавать формулу ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;F2:F10)


2-1156757712
stud
2006-08-28 13:35
2006.09.17
вопрос по action


3-1150375662
automatizier
2006-06-15 16:47
2006.09.17
Что значит закрытая база данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский