Текущий архив: 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