Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.023 c
6-1088324258
Scordion
2004-06-27 12:17
2004.08.29
Компонент для скачивания файлов!


14-1092037685
Карелин Артем
2004-08-09 11:48
2004.08.29
Спамеры без башни.


4-1089989762
Dima_Delphi
2004-07-16 18:56
2004.08.29
Требуется нормальная стаюильная работа с COM портом под NT.


3-1091764152
Sirus
2004-08-06 07:49
2004.08.29
Можно ли узнать количество изменений метаданных базы IB &amp; FB???


1-1092389979
Чайник
2004-08-13 13:39
2004.08.29
StringGrid