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

Вниз

Понял где возникает ошибка в триггере   Найти похожие ветки 

 
}|{yk ©   (2004-04-23 16:56) [0]

Но не знаю как ее решить.
Проблема в том что поле комментария имеет collate win1251
если это поле не обрабатывать в триггере и не заносить в лог, то все нормально. Если же обрабатывать - ошибка, более того, не удастся вписать в это поле что-угодно.


 
}|{yk ©   (2004-04-26 11:21) [1]

Так никто не знает?


 
Соловьев ©   (2004-04-26 11:29) [2]


> Проблема в том что поле комментария имеет collate win1251

это как?


 
}|{yk ©   (2004-04-26 11:38) [3]

Значит поле комментария имеет тип varchar(50), character set win1251 и collate win1251. В подключении все правильно, да и работает все нормально. К тому же триггер работает независимо от настроек подключения


 
Соловьев ©   (2004-04-26 11:44) [4]


> если это поле не обрабатывать в триггере и не заносить в
> лог, то все нормально.

код


 
Sergey13 ©   (2004-04-26 11:53) [5]

А че за тригер то? Щас вот накидал для прикола, прошло
CREATE TRIGGER T2_BI FOR T2
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 IF (NEW.F1 IS NULL) THEN
   NEW.F1 = GEN_ID(all_gen,1);
 new.f2="Ля-ля-ля";
END


 
Anonymous   (2004-04-26 12:05) [6]

Попробуй  collate поменять.


 
}|{yk ©   (2004-04-26 12:23) [7]

AS
DECLARE VARIABLE TID INTEGER;
DECLARE VARIABLE NEW_VALUE varchar(255);
DECLARE VARIABLE OLD_VALUE varchar(255);
BEGIN
 TID = GEN_ID(GEN_APP_LOG_ID,1);
 if (inserting or updating) then
  begin
 NEW_VALUE="<app_bank>";
 NEW_VALUE=NEW_VALUE||"<bank_id>"||new.bank_id||"</bank_id>";
 NEW_VALUE=NEW_VALUE||"<line_id>"||new.line_id||"</line_id>";
 NEW_VALUE=NEW_VALUE||"<set_id>"||new.set_id||"</set_id>";
 NEW_VALUE=NEW_VALUE||"<cust1_id>"||new.cust1_id||"</cust1_id>";
 NEW_VALUE=NEW_VALUE||"<cust2_id>"||new.cust2_id||"</cust2_id>";
 NEW_VALUE=NEW_VALUE||"<summa>"||new.summa||"</summa>";
/*  NEW_VALUE=NEW_VALUE||"<commentar>"||new.commentar||"</commentar>";*/
 NEW_VALUE=NEW_VALUE||"<unit_id>"||new.unit_id||"</unit_id>";
 NEW_VALUE=NEW_VALUE||"<plat_date>"||new.plat_date||"</plat_date>";
 NEW_VALUE=NEW_VALUE||"<rs_id>"||new.rs_id||"</rs_id>";
 NEW_VALUE=NEW_VALUE||"</app_bank>";
  end
 if (deleting or updating) then
  begin
 OLD_VALUE="<app_bank>";
 OLD_VALUE=OLD_VALUE||"<bank_id>"||old.bank_id||"</bank_id>";
 OLD_VALUE=OLD_VALUE||"<line_id>"||old.line_id||"</line_id>";
 OLD_VALUE=OLD_VALUE||"<set_id>"||old.set_id||"</set_id>";
 OLD_VALUE=OLD_VALUE||"<cust1_id>"||old.cust1_id||"</cust1_id>";
 OLD_VALUE=OLD_VALUE||"<cust2_id>"||old.cust2_id||"</cust2_id>";
 OLD_VALUE=OLD_VALUE||"<summa>"||old.summa||"</summa>";
/*  OLD_VALUE=OLD_VALUE||"<commentar>"||old.commentar||"</commentar>";*/
 OLD_VALUE=OLD_VALUE||"<unit_id>"||old.unit_id||"</unit_id>";
 OLD_VALUE=OLD_VALUE||"<plat_date>"||old.plat_date||"</plat_date>";
 OLD_VALUE=OLD_VALUE||"<rs_id>"||old.rs_id||"</rs_id>";
 OLD_VALUE=OLD_VALUE||"</app_bank>";
  end
 if (inserting) then
 INSERT INTO APP_LOG (APP_LOG_ID,APP_LOG_TIME,APP_LOG_OPERATION,APP_LOG_TABLE,
   APP_LOG_USER,APP_LOG_NEW_VALUE)
   VALUES (:TID, "NOW","insert", "APP_BANK", USER,:NEW_VALUE);
 if (updating) then
 INSERT INTO APP_LOG (APP_LOG_ID,APP_LOG_TIME,APP_LOG_OPERATION,APP_LOG_TABLE,
   APP_LOG_USER,APP_LOG_OLD_VALUE,APP_LOG_NEW_VALUE)
   VALUES (:TID, "NOW","update", "APP_BANK", USER,:OLD_VALUE,:NEW_VALUE);
 if (deleting) then
 INSERT INTO APP_LOG (APP_LOG_ID,APP_LOG_TIME,APP_LOG_OPERATION,APP_LOG_TABLE,
   APP_LOG_USER,APP_LOG_OLD_VALUE)
   VALUES (:TID, "NOW","delete", "APP_BANK", USER,:OLD_VALUE);
END


 
ЮЮ ©   (2004-04-26 12:32) [8]

И, полагаешь, все это можно засунуть в varchar(255)?


 
Соловьев ©   (2004-04-26 12:37) [9]


> DECLARE VARIABLE NEW_VALUE varchar(255);
> DECLARE VARIABLE OLD_VALUE varchar(255);

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


 
}|{yk ©   (2004-04-26 12:47) [10]

>еще я так понимаю ты числа конкатенуешь как строки?
А в чем проблема?


 
stud ©   (2004-04-26 12:50) [11]

какя версия иб


 
}|{yk ©   (2004-04-26 12:52) [12]

>еще я так понимаю ты числа конкатенуешь как строки?
А в чем проблема?


 
}|{yk ©   (2004-04-26 12:55) [13]

все работает
поставил длину 4000 и все влазит
теперь нужно думать как распарсить этот blob


 
Соловьев ©   (2004-04-26 13:06) [14]


> }|{yk ©   (26.04.04 12:55) [13]

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


 
}|{yk ©   (2004-04-26 13:28) [15]

Вроде бы firebird не поддерживает хранение во внешних файлах. (по крайней мере это не рекомендуется)
Вопрос в другом - где хранится в системных таблицах структура таблиц? Чтобы была возможность получать схему таблицы в формате xsd


 
Соловьев ©   (2004-04-26 13:30) [16]


> Вроде бы firebird не поддерживает хранение во внешних файлах.
> (по крайней мере это не рекомендуется)

подерживает. где написано что не рекомендуется?


 
}|{yk ©   (2004-04-26 13:37) [17]

проблемы с безопасностью...


 
Соловьев ©   (2004-04-26 13:38) [18]


> проблемы с безопасностью...

если правильно хранить то никаких проблем. Защитить на уровне ОС.


 
}|{yk ©   (2004-04-26 13:41) [19]

Нет ну я знаю что можно создавать таблицы с параметром external file name_of_file. но я не думаю что это то, что нужно


 
Соловьев ©   (2004-04-26 14:02) [20]


> }|{yk ©   (26.04.04 13:41) [19]

почему?

если хочешь, то посмотри как делает лог IBExpert - может тебе это надо?


 
}|{yk ©   (2004-04-26 14:49) [21]

да я и так по образу IBExpert делал, только у меня логи по всем таблицам будут храниться в одной таблице - для удобства



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

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

Наверх




Память: 0.49 MB
Время: 0.042 c
3-1082783494
hursand
2004-04-24 09:11
2004.05.23
TIBTransaction


3-1083348601
Mister
2004-04-30 22:10
2004.05.23
MySQL+Delphi


14-1083706326
ИМХО
2004-05-05 01:32
2004.05.23
Депортиво - Порту 0:1


1-1083843940
Zoom82
2004-05-06 15:45
2004.05.23
Использование типа Extended


3-1082795753
Сказочник
2004-04-24 12:35
2004.05.23
Почему не работает count(*)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский