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-03 23:51:00) [21]

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


Johnmen   (2004-08-03 23:47:00) [22]

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

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

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

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


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

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


Johnmen   (2004-08-03 23:16:00) [24]

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


Страницы:   1 2

Наверх

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