Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.04.07;
Скачать: CL | DM;

Вниз

китайские символы   Найти похожие ветки 

 
ankazh ©   (2012-10-01 02:14) [0]

s := TmemoryStream.Create;
RichEdit1.lines.SaveToStream(s);
s.position:=0;
(fmDM.DSourceSlovar.DataSet.FieldByName("PrimerCl") as TBlobField).LoadFromStream(s);
s.free;

в базу вписывются китайские символы...что делать?


 
Германн ©   (2012-10-01 02:24) [1]


>в базу вписывются китайские символы...что делать?

1. Удавиться
2. Утопиться
3. Выброситься с высокого этажа

P.S. Застрелиться не предлагаю, ибо для этого нужно иметь особое хардваре. :)


 
ankazh ©   (2012-10-01 02:30) [2]


> Германн ©


...а так чтоб вопрос решился без жертв? :)


 
Германн ©   (2012-10-01 02:45) [3]


> ...а так чтоб вопрос решился без жертв? :)
>

Ты сначала ответь зачем ты решил\решила использовать TDBRichEdit?
Это тебе твердили много раз в прошлой ветке.


 
ankazh ©   (2012-10-01 02:48) [4]

ну я использую dbedit для всех полей в табл, но они имеют тип текст, а для ЭТОГО поля я выбрала тип МЕМО, тк будет писаться много текста, и текст будет форматированый, для более удобного восприятия.


 
sniknik ©   (2012-10-01 08:18) [5]

> использую dbedit для всех полей в табл
продолжаешь нести ахинею, причем с видом, что это ты умный, и это тебя/простых вещей не понимают, типа акцента на -
> а для ЭТОГО поля я выбрала тип МЕМО
ну явно думаешь, что тупые людишки тут не состоянии понять того, что раз RichEdit значит поле в базе мемо...
могу огорчить, есть еще OLE и оно тоже подходит для документов (объект делается связный с приложением его редактируемым)
тип varchar тоже для этой цели ничуть не хуже, если применяется к тексту с некоторыми ограничениями.

> тк будет писаться много текста, и текст будет форматированый, для более удобного восприятия.
сколько много, как форматированный, не существенно для определения нужен или нет.

> ...а так чтоб вопрос решился без жертв? :)
еще два варианта.
4. найми программиста.
5. выйди замуж за программиста. (и пусть тот факт, что женский у тебя тут наверняка только аккаунт, тебя не останавливает...)


 
ankazh ©   (2012-10-01 11:00) [6]


> sniknik ©

Ваше ко мне отношение и высказывание очень неприлично и неприятно. Вы сомневаетесь в моей половой принадлежности? Если я не знаю многих вопросов связанных с Delphi, это еще не повод кого-то нанимать или за кого-то замуж выходить.
А все, что я написала выше, это лишь ответ на вопрос
> Германн ©   (01.10.12 02:45) [3]
и если мой ответ не столь корректно в плане программирования выражен, это не дает Вам право срывать на мне свое плохое настроение.


 
stas ©   (2012-10-01 11:14) [7]

ankazh ©   (01.10.12 02:14)
1. Какая СУБД
2. Какой тип поля PrimerCl
3. Как определили что символы в базе китайские


 
Ega23 ©   (2012-10-01 11:15) [8]


> в базу вписывются китайские символы...что делать?

Подозреваю, что выставить правильный collation на поле в бд.


 
ankazh ©   (2012-10-01 11:18) [9]


> 1. Какая СУБД

Access


> 2. Какой тип поля PrimerCl

поле MEMO


> 3. Как определили что символы в базе китайские

открываю файл базы, смотрю, что записалось в поле. Мне потом по этому полю нужно поиск делать, поэтому нужно, чтобы записывался "чистый" текст, без форматирования.


 
stas ©   (2012-10-01 11:25) [10]

>чтобы записывался "чистый" текст, без форматирования.

fmDM.DSourceSlovar.DataSet.FieldByName("PrimerCl").asString:=RichEdit1.Text

так?


 
ankazh ©   (2012-10-01 11:26) [11]


> stas ©

так уже пробывала, записывает только первую строку


 
stas ©   (2012-10-01 11:31) [12]

Чтобы достать не форматированный текст это RichEdit1.Text, а как его записать в поле memo уже придумайте. Если так не пишеться, попробуйте через параметры, или тот же поток предварительно туда записав этот текст.


 
ankazh ©   (2012-10-01 11:32) [13]

через параметры тоже записывает только первую строку


 
stas ©   (2012-10-01 11:38) [14]

А так ?
var L:TStringList;

...

L:=TStringList.Create;

s := TmemoryStream.Create;
L.Text:=RichEdit.Text;
L.SaveToStream (S);
L.Free;
s.position:=0;
(fmDM.DSourceSlovar.DataSet.FieldByName("PrimerCl") as TBlobField).LoadFromStream(s);
s.free;


 
ankazh ©   (2012-10-01 11:44) [15]


> stas ©   (01.10.12 11:38) [14]

те же китайские символы 敲睴敲牴൥昊祴൵甊祩&# 2573;


 
stas ©   (2012-10-01 11:45) [16]

А какая версия Delphi?


 
ankazh ©   (2012-10-01 11:46) [17]

2010


 
ankazh ©   (2012-10-01 11:47) [18]

в делфи текст отображается из этого поля правильно, а вот когда в базу Аксеса захожу, то там китайские символы.


 
sniknik ©   (2012-10-01 11:54) [19]

> Ваше ко мне отношение и высказывание очень неприлично и неприятно.
не к тебе, не путай, ты можешь быть "золотым" человеком, но твой акаунт, то "окошко" которое тебя тут представляет уважения не заслуживает.

> так уже пробывала, записывает только первую строку
> через параметры тоже записывает только первую строку
не нужно бредить... в очередной раз говоришь ахинею, бездоказательно говоришь.

stas ©   (01.10.12 11:38) [14]
> А так ?
да как угодно, неужели ты веришь, что МЕМО каким то чудом, и зачем то разделяет запись/поток на строки.

все только в "его голове", понимании или интерпретации увиденного.


 
ankazh ©   (2012-10-01 11:57) [20]

в общем взяла уже вместо RichEdit поставила Memo, все равно в базу записывается "кит.символы". Может там что-то в буфере происходит?


 
stas ©   (2012-10-01 11:58) [21]

Возможно надо преобразовать в 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;


 
sniknik ©   (2012-10-01 12:03) [22]

> вместо RichEdit поставила Memo
а предлагали в самом начале, сначала решить нужен ли rtf и тут же поменять...

> Возможно надо преобразовать в UTF8
нафига? там и так юникод, если ничего специально не делать, в прошлых "апсуждениях" даже приводился отрывок хелпа по теме.


 
ankazh ©   (2012-10-01 12:03) [23]

не


 
stas ©   (2012-10-01 12:06) [24]

sniknik ©   (01.10.12 12:03) [22]
Так правильно, она пихает Ansi в юникодовое поле, поэтому акцесс его и показывает китайскими символами.


 
ankazh ©   (2012-10-01 12:08) [25]


> sniknik ©

только не кричите, rtf нужен, и я его оставила. Тк не знаю как разделять форматирование и текст, я сделала в базе еще дополнит столбец. Дбричедитотв за один столбец ,а вот Мемо за другой. Копирую просто текст из ДбРичЭдит в Мемо и текст Мемо записую в БД.


 
sniknik ©   (2012-10-01 12:12) [26]

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

тогда вы "два сапога - пара".


 
sniknik ©   (2012-10-01 12:15) [27]

> только не кричите
?????
уже не бред, уже параноидальные фантазии?

> rtf нужен, и я его оставила.
нет. при таком коде
fmDM.DSourceSlovar.DataSet.FieldByName("PrimerCl").asString:=RichEdit1.Text
rtf-а нет. а при том что есть для тебя, насколько помню, "кракозябры".


 
stas ©   (2012-10-01 12:19) [28]

Не знаю в чем у Вас проблема, но я уже для интереса сделал тестовый проект, и он сохраняет все строки не только первую.
через обычную конструкцию, о которой я писал в начале.
Может быть нужно просто расширить в акцессе строку по высоте?


 
Anatoly Podgoretsky ©   (2012-10-01 12:21) [29]

asString это AnsiSring а RichEdit1.Text это юникод


 
stas ©   (2012-10-01 12:21) [30]

sniknik ©   (01.10.12 12:12) [26]
Акцесс работает с Юникодом дельфи - нет. При записи потока в анси, он не перобразовывается ни чем т.к.. это поток. А акцесс считает что там записан юникод и отображает в виде юникода.
Когда сохраняешь как строку Ado видимо преобразовывает Ansi в юникод.


 
sniknik ©   (2012-10-01 12:25) [31]

> насколько помню, "кракозябры".
сори "абра-кадабра", а это как раз правильный rtf, еще раз ссылку на старое "обсуждение"
http://delphimaster.net/view/2-1348434236/

правда при нем будет затруднен поиск... like перестанут работать (очевидно посмотрев на содержание), почему у тебя и выясняли нужен ли он тебе... и т.д. но ты предпочел бросить обсуждение вместо ответа на уточняющие "непонятные" вопросы... и тут же создал новое, на ту же тему (хотя тебе это тоже не понятно, похоже)


 
sniknik ©   (2012-10-01 12:27) [32]

> Акцесс работает с Юникодом дельфи - нет.
не шути так, типа у меня что ни одно прога "не рабочая"???...
и не путай Delphi с VCL.

> Когда сохраняешь как строку Ado видимо преобразовывает Ansi в юникод.
бред это заразно...


 
stas ©   (2012-10-01 12:32) [33]

sniknik ©   (01.10.12 12:27) [32]
Ну, хорошо разберем не примере.

Она сохраняет к примеру 10 символов в поток, как видно из кода сохраняется тип string т.е. AnsiString. В поток будет записано 10 байт. Акцесс т.к. работает с юникодом отобразит записаное содержимое потока в поле в каком виде по Вашему?
Я считаю что он отобразит 5 символов приняв то что в поле записан юникод т.к. он ниоткуда не узнает тип записанных данных. В итоге будет 5 непонятных символов в отличии от 10 понятных.


 
stas ©   (2012-10-01 12:33) [34]

>не шути так, типа у меня что ни одно прога "не рабочая"???...
Ну, ты так наверное не извращаешься
s := TmemoryStream.Create;
RichEdit1.lines.SaveToStream(s);
s.position:=0;
(fmDM.DSourceSlovar.DataSet.FieldByName("PrimerCl") as TBlobField).LoadFromStream(s);
s.free;


 
ankazh ©   (2012-10-01 12:34) [35]


> sniknik ©

И вправду, сделала высоту строк выше, записи все. Если б кто сначала подсказал....эх. Значит еще 4 дня назад сделала все правильно...А главное это простейшее.
Значит причина в поиске в поле МЕМО. Но как мне тогда написали, что не важно в каком поле искать.....
Буду ковырять почему поиск в этом поле не работает.


 
stas ©   (2012-10-01 12:35) [36]

ankazh ©   (01.10.12 12:34) [35]
)))


 
sniknik ©   (2012-10-01 12:38) [37]

> как видно из кода сохраняется тип string т.е. AnsiString
смотри не обертку, а объекты ADO раз на него ссылаешься.
оно получит тип WideSrting в любом случае, или благодаря автоприведению в дельфи/или исходным данным.

> В итоге будет 5 непонятных символов в отличии от 10 понятных.
будет 10 понятных символов всегда... при неправильной кодовой странице/... данным, от ошибки преобразование это будет 10 вопросиков. не кракозябр.


 
sniknik ©   (2012-10-01 12:41) [38]

> Если б кто сначала подсказал....эх.
если бы кто сначала написал где и как он смотрит, вместо "записывается одна строка"... эх.


 
sniknik ©   (2012-10-01 12:43) [39]

> Буду ковырять почему поиск в этом поле не работает.
про это тебе тоже уже говорили. не игнорируй всего, что не понятно, разбирайся, и будет долгосрочное "счастье".


 
stas ©   (2012-10-01 13:06) [40]

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 то всегда будет правильно отображаться.


 
ankazh ©   (2012-10-01 13:23) [41]

procedure TfmMain.Edit1Change(Sender: TObject);
var h1, h2:string ;
begin
h1:=fmMain.Edit1.Text+"%";
h2:=QuotedStr(h1);

with fmDM.ADOQuerySlovar do
begin
  DisableControls;
  Close;
  SQL.Clear;
      if RadioButton1.Checked then SQL.Add("SELECT * from Slovar where Transkript like"+h2) else
      if RadioButton2.Checked then SQL.Add("SELECT * from Slovar where RusWord like"+h2)
  Open;
  EnableControls;
end;

при таком запросе находит ТОЛЬКО первое слово в "поле МЕМО" (RusWord). Правильно ли написан обработчик поиска или может я что-либо упустила? В БД все слова отобрж корректно. Поле Transkript имеет тип Текстовый, и там поиск выполняется по всему полю.


 
stas ©   (2012-10-01 13:28) [42]

чтобы не первое надо % с двух сторон.


 
ankazh ©   (2012-10-01 13:30) [43]

% с двух сторон, значит какие-то символы спереди и какие-то сзади от введенного слова


 
ankazh ©   (2012-10-01 13:43) [44]


> stas ©   (01.10.12 13:28) [42]
> чтобы не первое надо % с двух сторон.
>
>

сделала по твоему и сработало, но как быть, если мне нужно чтоб слово начиналось, а не содержало Edit1.Text?


 
stas ©   (2012-10-01 14:23) [45]

ankazh ©   (01.10.12 13:43) [44]
не понял? типа надо искать только в начале слова а не в внутри слова?

ну тогда надо уже думать например
h1:=fmMain.Edit1.Text+"%";
h2:=QuotedStr(h1);
h3:=QuotedStr("% "+h1)
"SELECT * from Slovar where Transkript like"+h2 or Transkript Like"+h3

т.е. мы ищем либо впервом слове либо за пробелом.
Ну а там скобки бробелы и т.д. короче надо определить что такое слово, а оптом уже строить логику.
При этом надо не забывать что это все влияет на скорость и возможно для более оптимального поиска построить структуру хранения данных таким образом чтобы избежать снижения производительности.


 
stas ©   (2012-10-01 14:31) [46]

http://office.microsoft.com/ru-ru/access-help/HP001032253.aspx
и почитайте это


 
sniknik ©   (2012-10-01 14:33) [47]

stas ©   (01.10.12 13:06) [40]
> Мы наверное не о том говорим.
без разницы, запишет все ок, в "правильном юникоде", другое дело не текст, а в представлении rtf. но это опять не от ADO зависит.


 
ankazh ©   (2012-10-01 14:38) [48]

спасибо за ответы, оч конкретно и понятно. Теперь буду знать где рыть. :)


 
stas ©   (2012-10-01 14:45) [49]

sniknik ©   (01.10.12 14:33) [47]
Это оффтоп конечно...

Все равно не пойму как так может быть. Не берем rtf, просто текст.

Записываем в поток 2 байта  в десятичном представлении это 255 и 255. в дельфи если это загрузить в тип стринг,  то будет 2 символа с кодом 255. Потом этот поток грузим в поле memo.

Tсли посмотреть в акцесс, то откуда акцесс узнает что надо показать 2 символа с кодом 255 и 255, а не один 65535 ?


 
sniknik ©   (2012-10-01 14:45) [50]

stas ©
если уж хочешь "глюка", который пытаешься показать, то должен "обмануть" дельфю, например подкинуть ей через не типизированные указатели тип widestring под видом string. чтобы он реально считал 1 символ за 2.


 
sniknik ©   (2012-10-01 14:47) [51]

> то откуда акцесс узнает
ему не нужно, он работает только с юникодом... хранить иногда (приводил справку) может в ansi но работает - получает/отдает юникод.


 
stas ©   (2012-10-01 15:00) [52]

sniknik ©   (01.10.12 14:45) [50]
правильно с потоком как раз и получается такой глюк)


 
sniknik ©   (2012-10-01 15:03) [53]

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


 
sniknik ©   (2012-10-01 15:14) [54]

> то при чтении будут вопросы
access показывает серию квадратиков, видимо у него это символ ошибки преобразования. но суть та же.


 
stas ©   (2012-10-01 15:17) [55]

Попробовал )
AdoQuery1.Edit;
s := TmemoryStream.Create;
Memo1.lines.SaveToStream(s);
s.position:=0;
(AdoQuery1.FieldByName("Pole1") as TBlobField).LoadFromStream(s);
s.free;
AdoQuery1.Post;


Access показал правильные буквы ) на русском. Хм...


 
sniknik ©   (2012-10-01 15:19) [56]

я говорил. нужно "обманывать" иначе не выйдет.


 
sniknik ©   (2012-10-01 15:23) [57]

кстати формат rtf не использует символы > #127. так, для справки.


 
stas ©   (2012-10-01 15:23) [58]

Тогда не понятно откуда автор получил китайские буквы :)


 
icWasya ©   (2012-10-01 17:57) [59]

Ну если такую строку
S:AnsiString;
S:="retwertre"#13#10"ftyu"#13#10"uiys%";
записать в поток, а потом прочитать как unicodestring, то получится каша, как у автора


 
ankazh ©   (2012-10-05 00:39) [60]


> icWasya

не поленилась и ввела снова код, который вводила сама и который мне вы снова предложили. Ввела "света вася коля" и получила "⃠￱" (вместо 3-ого кубика какой-то перечеркнутый кружек). Затем ввожу еще...покучаю реально какие-то китайско-японские закарлючки.



Страницы: 1 2 вся ветка

Текущий архив: 2013.04.07;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.01 c
2-1349179741
dmi3
2012-10-02 16:09
2013.04.07
Странная ошибка (Delphi XE3)


2-1349083810
Чарна
2012-10-01 13:30
2013.04.07
MS Grid control


15-1354530589
alexdn
2012-12-03 14:29
2013.04.07
Виндовс 8


2-1348239922
stronger
2012-09-21 19:05
2013.04.07
консольный модуль в delphi


2-1349276025
ixen
2012-10-03 18:53
2013.04.07
Вычисляемое поле из других строк в таблице