Форум: "Базы";
Текущий архив: 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.048 c