Поиск:

Ответ в темуСоздание новой темы Создание опроса
> русские символы в тексте процедуры 
:(
    Опции темы
TaNK
Дата 6.9.2012, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Добрый день, возникла проблема  о которой написана переписано очень много, но я так и не нашел решение проблемы:
имеем
user posted image
необходимо сохранить процедуру хранимую содержашую русские символы, через Ibexpert проблем нет, а через Query ошибка 
user posted image

вот сама хранимка, пожскажите что нужно сделать то, чтобы сохранить ее в БД.
Код

create or alter procedure SP_LLS_Graph (auto_index int, date_beg timestamp, date_end timestamp)
returns (
         mm             integer,
         yy             integer,
         rezults        varchar(50),
         summ_pur       numeric(10,2),
         summ_pur_info  varchar(50)
        )
as
BEGIN
      FOR
           Select  extract (month from date_pur) as mm
                  ,extract (year from date_pur)  as yy
                  ,(case  extract (month from date_pur)
                    when 1 then 'январь'    ||' - '||extract (year  from date_pur)
                    when 2 then 'февраль'   ||' - '||extract (year  from date_pur)
                    when 3 then 'март'  ||' - '||extract (year  from date_pur)
                    when 4 then 'апрель'    ||' - '||extract (year  from date_pur)
                    when 5 then 'май'    ||' - '||extract (year  from date_pur)
                    when 6 then 'июнь'   ||' - '||extract (year  from date_pur)
                    when 7 then 'июль'   ||' - '||extract (year  from date_pur)
                    when 8 then 'август'    ||' - '||extract (year  from date_pur)
                    when 9 then 'сентябрь'   ||' - '||extract (year  from date_pur)
                    when 10 then 'октябрь'  ||' - '||extract (year  from date_pur)
                    when 11 then 'ноябрь'    ||' - '||extract (year  from date_pur)
                    when 12 then 'декабрь'   ||' - '||extract (year  from date_pur)
                    else 'другие'
                end) as rezults
               ,sum(summ_pur)        as summ_pur
               ,sum(summ_pur)||' р.' as summ_pru_info

              FROM lubricant_liquids_parts
              where summ_pur != 0 and auto_id = :auto_index
                and date_pur between :date_beg and :date_end
              group by yy,mm
              order by yy desc, mm desc

           into :mm, :yy, :rezults, :summ_pur, :summ_pur_info
      DO
          Suspend;

END;


Огромное спасибо


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
TaNK
Дата 6.9.2012, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Код

SELECT Rdb$character_set_name FROM Rdb$database

Код

WIN1251


Помогите очень срочно надо.

Это сообщение отредактировал(а) TaNK - 6.9.2012, 14:19


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Akella
Дата 6.9.2012, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



судя по тексту ошибки, у тебя где-то переполнение. Отправляешь в какое-то поле больше, чем влазит.
PM MAIL   Вверх
TaNK
Дата 6.9.2012, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Может я конечно не корректно описал, но проблема в том что я не могу Сохранить в БД саму хранимую процедуру, т.е. ошибка не на этапе выполнения ее и получения данных.
даже такая хранимка,  генерирует ошибку
Код

create or alter procedure NEW_proced
as
declare s varchar(255);
begin
  s = 'привет';
end


Это сообщение отредактировал(а) TaNK - 6.9.2012, 15:18


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
AndreyIQ
Дата 6.9.2012, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: 1
Всего: 8



Код

DB.Params.Add('lc_ctype=WIN1251');

PM MAIL   Вверх
TaNK
Дата 6.9.2012, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Вроде разобрался - по умолчанию у компонента UniDAC - TUniConnection - UseUnicode = false
при true - запрос отрабатывает без ошибки.

Зато при выборке ошибка появилась следующая - 

Character set win1251 is not installed at procedure 'Название процедуры'

Это сообщение отредактировал(а) TaNK - 6.9.2012, 16:54


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
TaNK
Дата 10.9.2012, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(AndreyIQ @ 6.9.2012,  15:51)
Код

DB.Params.Add('lc_ctype=WIN1251');

DB - это DataBase?


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Akella
Дата 11.9.2012, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



а при чем здесь firebird?
Проблема в Delphi. Значит показывай код.
PM MAIL   Вверх
TaNK
Дата 11.9.2012, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Переместили не в ту ветку - я пишу на С++ 


Код

UniDB            = new TUniConnection(TMain);
FireBirdProvider = new TInterBaseUniProvider(TMain);
UniDB->ProviderName = "InterBase";
UniDB->Username     = "sysdba";
UniDB->Password     = "****";
UniDB->Database     = ((IncludeTrailingPathDelimiter(ExtractFileDir(ParamStr(0)))) + "DataBase\\AutoMobile.fdb");
UniDB->LoginPrompt  = false;
UniDB->Connected    = false;


Код

OpenDlg      = new TOpenDialog(this);
   StList       = new TStringList(this);
   StList_tmp   = new TStringList;
   short rezult = 0;

   OpenDlg->InitialDir = (IncludeTrailingPathDelimiter(ExtractFileDir(ParamStr(0))));
   OpenDlg->Filter     = "Файлы Sql |*.sql";

   if (OpenDlg->Execute())
   {
       StList->LoadFromFile(OpenDlg->FileName);

       //Парсер SQL-скриптов
       for (int i = 0; i < StList->Count - 1; i++)
       {
           StList_tmp->Clear();
           while (StList->Strings[i] != "--@set_term")
           {
              StList_tmp->Add(StList->Strings[i]);
              i++;
           }

           UniQuery_Build->SQL->Text = StList_tmp->Text;

           try
           {
              UniQuery_Build->Execute();
           }
           catch (...)
           {
              rezult = -1;
              ShowMessage("Ошибка при выполнениие скрипта или версия скрипта не соответсвует версии БД - ");
              break;
           }
       }
       if (rezult == 0)
       {
           ShowMessage("Обновление БД выполнено!");
           Application->Terminate();
       }

   }

   delete OpenDlg;
   delete StList;
   delete StList_tmp;


хранимка следующего вида
Код

create or alter procedure SP_LLS_Graph (auto_index int, date_beg timestamp, date_end timestamp)
returns (
         mm             integer,
         yy             integer,
         rezults        varchar(50),
         summ_pur       numeric(10,2),
         summ_pur_info  varchar(50)
        )
as
BEGIN
      FOR
           Select  extract (month from date_pur) as mm
                  ,extract (year from date_pur)  as yy
                  ,(case  extract (month from date_pur)
                    when 1 then 'январь'    ||' - '||extract (year  from date_pur)
                    when 2 then 'февраль'   ||' - '||extract (year  from date_pur)
                    when 3 then 'март'  ||' - '||extract (year  from date_pur)
                    when 4 then 'апрель'    ||' - '||extract (year  from date_pur)
                    when 5 then 'май'    ||' - '||extract (year  from date_pur)
                    when 6 then 'июнь'   ||' - '||extract (year  from date_pur)
                    when 7 then 'июль'   ||' - '||extract (year  from date_pur)
                    when 8 then 'август'    ||' - '||extract (year  from date_pur)
                    when 9 then 'сентябрь'   ||' - '||extract (year  from date_pur)
                    when 10 then 'октябрь'  ||' - '||extract (year  from date_pur)
                    when 11 then 'ноябрь'    ||' - '||extract (year  from date_pur)
                    when 12 then 'декабрь'   ||' - '||extract (year  from date_pur)
                    else 'другие'
                end) as rezults
               ,sum(summ_pur)        as summ_pur
               ,sum(summ_pur)||' р.' as summ_pru_info

              FROM lubricant_liquids_parts
              where summ_pur != 0 and auto_id = :auto_index
                and date_pur between :date_beg and :date_end
              group by yy,mm
              order by yy desc, mm desc

           into :mm, :yy, :rezults, :summ_pur, :summ_pur_info
      DO
          Suspend;

END;

--@set_term



--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Akella
Дата 11.9.2012, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



у Query есть свойство CheckParams,ты отключил?

Добавлено через 5 минут и 35 секунд
Я так понимаю, что у тебя база в кодировке cp1251?
А у UniDAC есть свойство UseUnicode для юникода в доп. параметрах UniConnection

user posted image

Добавлено через 10 минут
Цитата(TaNK @  6.9.2012,  16:39 Найти цитируемый пост)
Character set win1251 is not installed at procedure


а ты гуглил на эту тему?

Добавлено через 11 минут и 5 секунд
Попробуй просто перезапустить птичку или переустановить.
Перепроверь, правильный ли клиент (fbclient.dll) или провайдер используешь? Правильной ли версии?
PM MAIL   Вверх
TaNK
Дата 11.9.2012, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Akella @ 11.9.2012,  11:34)
у Query есть свойство CheckParams,ты отключил?

Добавлено @ 11:40
Я так понимаю, что у тебя база в кодировке cp1251?
А у UniDAC есть свойство UseUnicode для юникода в доп. параметрах UniConnection

user posted image

Добавлено @ 11:44
Цитата(TaNK @  6.9.2012,  16:39 Найти цитируемый пост)
Character set win1251 is not installed at procedure


а ты гуглил на эту тему?

Добавлено @ 11:45
Попробуй просто перезапустить птичку или переустановить.
Перепроверь, правильный ли клиент (fbclient.dll) или провайдер используешь? Правильной ли версии?

Так как Query создаю динамически, это свойство стоит по умолчанию, какое не знаю.
БД создана с кодировкой Win1251.

Решение вроде нашел, но не совсем такое как надо.

Если БД создавать с кодировкой unicode_FSS, поля с такой же кодировкой - и TUniConnection -> UseUnicode = true
Если можно было программно поменять кодировку всей БД с Win1251 на unicode_FSS (создать поля (Unicode_FSS) скопировать в них данные, а поля с Win1251 удалить)

Либо так, но не работает.
Есть БД с Win1251, при добавлении хранимки UseUnicode = true, но когда хочу создать поле 
Код

ALTER TABLE lubricant_liquids_parts
  ADD LLS_NAME55 VARCHAR(100) character set unicode_fss

ошибка выдает все равно что Win1251 not installed

Программа работает с БД embedded 2.5.0.26074

Это сообщение отредактировал(а) TaNK - 11.9.2012, 13:04


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
AndreyIQ
Дата 11.9.2012, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: 1
Всего: 8



Цитата(TaNK @ 10.9.2012,  09:13)
Цитата(AndreyIQ @ 6.9.2012,  15:51)
Код

DB.Params.Add('lc_ctype=WIN1251');

DB - это DataBase?

В Delphi ошибка вылезает, если в IBDatabase не стоит кодировка
user posted image
PM MAIL   Вверх
Akella
Дата 11.9.2012, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(TaNK @  11.9.2012,  12:11 Найти цитируемый пост)
Так как Query создаю динамически, это свойство стоит по умолчанию, какое не знаю.


так поставь явно  smile

Добавлено через 32 секунды
Цитата(TaNK @  11.9.2012,  12:11 Найти цитируемый пост)
Если БД создавать с кодировкой unicode_FSS, поля с такой же кодировкой - и TUniConnection -> UseUnicode = true

лучше в UTF8

Добавлено через 1 минуту и 40 секунд
Цитата(TaNK @  11.9.2012,  12:11 Найти цитируемый пост)
Если можно было программно поменять кодировку всей БД с Win1251 на unicode_FSS (создать поля (Unicode_FSS) скопировать в них данные, а поля с Win1251 удалить)


У IBExpert`а есть замечательные средства извлечения метаданных и данных.
Можно извлечь, подкорректировать скрипт и потом выполнить его.
PM MAIL   Вверх
TaNK
Дата 11.9.2012, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Akella @ 11.9.2012,  14:52)
Цитата(TaNK @  11.9.2012,  12:11 Найти цитируемый пост)
Так как Query создаю динамически, это свойство стоит по умолчанию, какое не знаю.


так поставь явно  smile

Добавлено @ 14:52
Цитата(TaNK @  11.9.2012,  12:11 Найти цитируемый пост)
Если БД создавать с кодировкой unicode_FSS, поля с такой же кодировкой - и TUniConnection -> UseUnicode = true

лучше в UTF8

Добавлено @ 14:53
Цитата(TaNK @  11.9.2012,  12:11 Найти цитируемый пост)
Если можно было программно поменять кодировку всей БД с Win1251 на unicode_FSS (создать поля (Unicode_FSS) скопировать в них данные, а поля с Win1251 удалить)


У IBExpert`а есть замечательные средства извлечения метаданных и данных.
Можно извлечь, подкорректировать скрипт и потом выполнить его.

А дело то в том - что базы с разными данными находятся у пользователей, и поменять через IBExpert возможности нет, только через exe-ник  


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0572 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.