![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
китайские символы
ankazh © (2012-10-01 02:14:00)s := TmemoryStream.Create;
RichEdit1.lines.SaveToStream(s);
s.position:=0;
(fmDM.DSourceSlovar.DataSet.FieldByName('PrimerCl') as TBlobField).LoadFromStream(s);
s.free;
в базу вписывются китайские символы...что делать?
stas (2012-10-01 13:06:00) [21]sniknik © (01.10.12 12:38) [37]
Мы наверное не о том говорим.
s := TmemoryStream.Create;
RichEdit1.lines.SaveToStream(s);
s.position:=0;
(fmDM.DSourceSlovar.DataSet.FieldByName('PrimerCl') as TBlobField).LoadFromStream(s);
s.free;
При таком заполнении поля memo, в Access отобразятся не вопросики, а китайские символы.
Если заполнять через asString то всегда будет правильно отображаться.
sniknik (2012-10-01 12:43:00) [22]> Буду ковырять почему поиск в этом поле не работает.
про это тебе тоже уже говорили. не игнорируй всего, что не понятно, разбирайся, и будет долгосрочное "счастье".
sniknik (2012-10-01 12:41:00) [23]> Если б кто сначала подсказал....эх.
если бы кто сначала написал где и как он смотрит, вместо "записывается одна строка"... эх.
sniknik (2012-10-01 12:38:00) [24]> как видно из кода сохраняется тип string т.е. AnsiString
смотри не обертку, а объекты ADO раз на него ссылаешься.
оно получит тип WideSrting в любом случае, или благодаря автоприведению в дельфи/или исходным данным.
> В итоге будет 5 непонятных символов в отличии от 10 понятных.
будет 10 понятных символов всегда... при неправильной кодовой странице/... данным, от ошибки преобразование это будет 10 вопросиков. не кракозябр.
stas (2012-10-01 12:35:00) [25]ankazh © (01.10.12 12:34) [35]
)))
ankazh (2012-10-01 12:34:00) [26]
> sniknik ©
И вправду, сделала высоту строк выше, записи все. Если б кто сначала подсказал....эх. Значит еще 4 дня назад сделала все правильно...А главное это простейшее.
Значит причина в поиске в поле МЕМО. Но как мне тогда написали, что не важно в каком поле искать.....
Буду ковырять почему поиск в этом поле не работает.
stas (2012-10-01 12:33:00) [27]>не шути так, типа у меня что ни одно прога "не рабочая"???...
Ну, ты так наверное не извращаешься
s := TmemoryStream.Create;
RichEdit1.lines.SaveToStream(s);
s.position:=0;
(fmDM.DSourceSlovar.DataSet.FieldByName('PrimerCl') as TBlobField).LoadFromStream(s);
s.free;
stas (2012-10-01 12:32:00) [28]sniknik © (01.10.12 12:27) [32]
Ну, хорошо разберем не примере.
Она сохраняет к примеру 10 символов в поток, как видно из кода сохраняется тип string т.е. AnsiString. В поток будет записано 10 байт. Акцесс т.к. работает с юникодом отобразит записаное содержимое потока в поле в каком виде по Вашему?
Я считаю что он отобразит 5 символов приняв то что в поле записан юникод т.к. он ниоткуда не узнает тип записанных данных. В итоге будет 5 непонятных символов в отличии от 10 понятных.
sniknik (2012-10-01 12:27:00) [29]> Акцесс работает с Юникодом дельфи - нет.
не шути так, типа у меня что ни одно прога "не рабочая"???...
и не путай Delphi с VCL.
> Когда сохраняешь как строку Ado видимо преобразовывает Ansi в юникод.
бред это заразно...
sniknik (2012-10-01 12:25:00) [30]> насколько помню, "кракозябры".
сори "абра-кадабра", а это как раз правильный rtf, еще раз ссылку на старое "обсуждение"
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1348434236&n=18
правда при нем будет затруднен поиск... like перестанут работать (очевидно посмотрев на содержание), почему у тебя и выясняли нужен ли он тебе... и т.д. но ты предпочел бросить обсуждение вместо ответа на уточняющие "непонятные" вопросы... и тут же создал новое, на ту же тему (хотя тебе это тоже не понятно, похоже)
stas (2012-10-01 12:21:00) [31]sniknik © (01.10.12 12:12) [26]
Акцесс работает с Юникодом дельфи - нет. При записи потока в анси, он не перобразовывается ни чем т.к.. это поток. А акцесс считает что там записан юникод и отображает в виде юникода.
Когда сохраняешь как строку Ado видимо преобразовывает Ansi в юникод.
Anatoly Podgoretsky (2012-10-01 12:21:00) [32]asString это AnsiSring а RichEdit1.Text это юникод
stas (2012-10-01 12:19:00) [33]Не знаю в чем у Вас проблема, но я уже для интереса сделал тестовый проект, и он сохраняет все строки не только первую.
через обычную конструкцию, о которой я писал в начале.
Может быть нужно просто расширить в акцессе строку по высоте?
sniknik (2012-10-01 12:15:00) [34]> только не кричите
?????
уже не бред, уже параноидальные фантазии?
> rtf нужен, и я его оставила.
нет. при таком коде
fmDM.DSourceSlovar.DataSet.FieldByName('PrimerCl').asString:=RichEdit1.Text
rtf-а нет. а при том что есть для тебя, насколько помню, "кракозябры".
sniknik (2012-10-01 12:12:00) [35]> Так правильно, она пихает Ansi в юникодовое поле, поэтому акцесс его и показывает китайскими символами.
и ты думаешь utf8 чем-то поможет в решении "правильности пихания/понимания впихнутого"???
при том, что аксесс "заточен" на юникод, анси при правильных страницах и т.д. правильно и автоматически в него конвертируется. а правильный юникод показывается правильно везде где понимают юникод (для того и нужен) а сам аксесс он как бы мелкософтом разработан... т.е. теми кто юникод придумал(? не уверен) и продвигает.
думаешь они неправильно с ним работают?
тогда вы "два сапога - пара".
ankazh (2012-10-01 12:08:00) [36]
> sniknik ©
только не кричите, rtf нужен, и я его оставила. Тк не знаю как разделять форматирование и текст, я сделала в базе еще дополнит столбец. Дбричедитотв за один столбец ,а вот Мемо за другой. Копирую просто текст из ДбРичЭдит в Мемо и текст Мемо записую в БД.
stas (2012-10-01 12:06:00) [37]sniknik © (01.10.12 12:03) [22]
Так правильно, она пихает Ansi в юникодовое поле, поэтому акцесс его и показывает китайскими символами.
ankazh (2012-10-01 12:03:00) [38]не
sniknik (2012-10-01 12:03:00) [39]> вместо RichEdit поставила Memo
а предлагали в самом начале, сначала решить нужен ли rtf и тут же поменять...
> Возможно надо преобразовать в UTF8
нафига? там и так юникод, если ничего специально не делать, в прошлых "апсуждениях" даже приводился отрывок хелпа по теме.
stas (2012-10-01 11:58:00) [40]Возможно надо преобразовать в UTF8, не помню как это делается, поищите в инете, я в примере написал, но скорее всего не правильно.
При чтении тоже надо преобразовывать обратно.
var L:TStringList;
...
L:=TStringList.Create;
s := TmemoryStream.Create;
L.Text:= AnsiToUtf8(RichEdit.Text);
L.SaveToStream (S);
L.Free;
s.position:=0;
(fmDM.DSourceSlovar.DataSet.FieldByName('PrimerCl') as TBlobField).LoadFromStream(s);
s.free;