Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с кириллицей [D6, IB6.x]


Страницы:   1 2

Elast ©   (2004-08-03 22:26:00) 

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

Подробности: БД 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 вручную изменить запись или запустить соответствующий скрипт,
то кириллица принимается.
Вопрос - откуда все это?


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

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


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

см.[19]


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

см.[18]


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


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

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


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

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


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

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


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

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

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


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


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

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


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

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


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


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

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


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

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


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


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

ServerCharSet стоит?


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

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


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


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

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


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

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


Johnmen   (2004-08-04 09:51:00) [16]

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

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

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


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

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


Johnmen   (2004-08-04 00:08:00) [18]

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


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

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


Johnmen   (2004-08-03 23:57:00) [20]

С той же БД ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо