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

Вниз

Проблема с кириллицей   Найти похожие ветки 

 
Elast   (2004-08-03 22:26) [0]

Уважаемые мастера! У меня получилось сделать приложение в котором в БД не записывается кириллица. Этот же код работает в других приложениях давно и
исправно.

Подробности: БД FB1.5, CharSet Win1251 есть. Создана в IBExpert.

CREATE DOMAIN TName  VARCHAR(240);
CREATE DOMAIN TIdent INTEGER  NOT NULL;
/*=============================================================*/
CREATE TABLE Master (Id_Master    TIdent,
                    NameMaster   TName);
ALTER TABLE Master  ADD PRIMARY KEY (Id_Master);

Используется dbExpress - sqlDataSet, DataSetProvider, ClientDataSet.

procedure TfrmMain.bbSaveClick(Sender: TObject);
begin
 if (cdsMaster.ApplyUpdates(0) > 0) then  begin
   ShowMessage ("Ошибка сохранения данных");
   Exit;
 end;
end;

procedure TfrmMain.dspMasterBeforeUpdateRecord(Sender: TObject;
 SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
 UpdateKind: TUpdateKind; var Applied: Boolean);
var SQL : string;
   Id_MS : integer;
   Connection : TSQLConnection;
begin
 Connection := (SourceDS as TCustomSQLDataSet).SQLConnection;
 case UpdateKind  of
   ukModify : begin
     SQL := "";
     Id_MS := DeltaDS.FieldByName("Id_Master").NewValue;
     if not VarIsEmpty(DeltaDS.FieldByName("NameMaster").NewValue)  then  begin
       if SQL <> "" then
         SQL := SQL + ", ";
       SQL := SQL + Format("NameMaster = %s",
              [QuotedStr(DeltaDS.FieldByName("NameMaster").NewValue)]);
     end;
     if SQL <> "" then  begin
       SQL := Format("UPDATE Master SET %s WHERE ID_Master = %d",
              [SQL, Id_MS]);
       Connection.Execute (SQL, nil, nil);

Здесь ошибка, (если FieldByName("NameMaster").NewValue = кириллица)
arithmetic exception, numeric overflow, or string truncation
Cannot transliterate character between character sets

     end;
   end;
 end;
 Applied := True;
end;

Если в IbExpert вручную изменить запись или запустить соответствующий скрипт,
то кириллица принимается.
Вопрос - откуда все это?


 
Johnmen ©   (2004-08-03 23:16) [1]

http://www.ibase.ru/devinfo/ibrusfaq.htm


 
Elast   (2004-08-03 23:42) [2]

Спасибо за универсальный совет, но это другой случай. Какой?


 
Johnmen ©   (2004-08-03 23:47) [3]

>Спасибо за универсальный совет, но это другой случай.

Т.е. там нет решения для тебя ?

>но это другой случай. Какой?

Вопрос викторины ? :)
Ответ - этот случай дбекспресс со своим айбишным драйвером, который не понимает кодировки и/или третьего диалекта.


 
Elast   (2004-08-03 23:51) [4]

В соседней (моей) проге вполне все понимает и работает.


 
Johnmen ©   (2004-08-03 23:57) [5]

С той же БД ?


 
Elast   (2004-08-04 00:01) [6]

Из этой проги я работал с двумя БД - для эксперимента. Результат оба раза отрицательный. Из "хорошей" проги корректировал запись без ошибок для одной из БД.


 
Johnmen ©   (2004-08-04 00:08) [7]

Ты меня не путай :) Ты четко скажи - есть ли программа, использующая дбекспресс, и корректно работающая с БД, с которой у тебя не получается ?


 
Elast   (2004-08-04 00:23) [8]

Две программы с dbExpress. Только одна работает, а вторая нет. Для второй работал с двумя ДБ - для первой и второй программы - для пробы. Запутал или нет?


 
Johnmen ©   (2004-08-04 09:51) [9]

Окончательно запутал !

>а вторая нет. Для второй работал с двумя ДБ

Как так ??? Она же не работает !!??


 
Elast   (2004-08-04 10:27) [10]

Обе БД работают в IBExpert! Обе БД не работаю со второй прогой!
М.Б. я пришлю предельно маленькое приложение, т.к. все предельно не понятно мне уже третий день. Похоже - глаз замылился. Буду крайне признателен за содействие.


 
Соловьев ©   (2004-08-04 10:39) [11]


> arithmetic exception, numeric overflow, or string truncation
> Cannot transliterate character between character sets

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


 
Elast   (2004-08-04 10:53) [12]

Varchar(240), пишу "яя".


 
Соловьев ©   (2004-08-04 10:56) [13]


> Varchar(240), пишу "яя".

ServerCharSet стоит?


 
Elast   (2004-08-04 11:25) [14]

БД зарегистрирована в IBExpert. Там есть Win1251. Это оно должно стоять?


 
Соловьев ©   (2004-08-04 11:28) [15]


> БД зарегистрирована в IBExpert. Там есть Win1251. Это оно
> должно стоять?

причем IBExpert  к твоей проге?


 
Elast   (2004-08-04 11:35) [16]

Ни при чем. Есть БД с CS Win1251.


 
Соловьев ©   (2004-08-04 11:39) [17]


> Ни при чем. Есть БД с CS Win1251.

ну так блин нажми дважды на SQLConnection и выстави ServerCharSet


 
Elast   (2004-08-04 11:47) [18]

>ну так блин нажми дважды на SQLConnection и выстави >ServerCharSet

Никогда раньше этого не делал. Сейчас сделал. Результат тот же - отрицательный. М.Б есть желание посмотреть полный код и запустить.


 
Соловьев ©   (2004-08-04 11:52) [19]

какой чарсет писал?
http://ibase.ru/devinfo/dbexpress.htm


 
Elast   (2004-08-04 11:56) [20]

Никакой чарсет не нужно ставить или скажи какой.


 
Соловьев ©   (2004-08-04 11:57) [21]


> Никакой чарсет не нужно ставить или скажи какой

разводишь или что?:)


 
Elast   (2004-08-04 11:59) [22]

см.[18]


 
Соловьев ©   (2004-08-04 12:01) [23]

см.[19]


 
Elast   (2004-08-04 12:10) [24]

[18] чистая правда, но очевидно я как-то стормрозил. Сейчас переставил заново и все ОК! Прошу извинить за пустые разговоры, но раньше я чарсет там не устанавливал и все также было ОК!
Все бывает в первый раз!



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

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

Наверх





Память: 0.5 MB
Время: 0.044 c
1-1092197326
dream
2004-08-11 08:08
2004.08.29
Как определить что сервис зарегестрирован ?


6-1088354563
rolex
2004-06-27 20:42
2004.08.29
При отправке e-mail (TidSMTP) программа "подвисает".


3-1090002748
Mister
2004-07-16 22:32
2004.08.29
1 или 2 млн. записей


3-1091522796
MORA
2004-08-03 12:46
2004.08.29
Подстановочные поля


1-1092295643
andrey__
2004-08-12 11:27
2004.08.29
компонент TQueue его метод Pop.





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