![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с кириллицей [D6, IB6.x]
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]С той же БД ?