Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

приложение не передаёт в ms SQl русские буквы


AIK ©   (2009-12-08 10:16:00) 

Выполняю следующий запрос с помощью ADOQuery
ADOQuery1.SQL.Add('Select * from _baza where key_sv = '1' and tov LIKE '''+edit1.Text+'%'' ;');
Код работает при в воде En раскладкой букв в Едит в DBDrid’е отображаются все начинающиеся на это поля. Но когда начинаешь в водить русские буквы то выводит только  поле с содержанием в tov ??????????? которое я специально создал для проверки.
Вопрос  как передать в запросе в SQL русские буквы

P.S. DBGrid прекрасно отображает русские буквы
P.S.S В таблице _baza поле tov имеет тип nvarchar, collation = Cyrillic_General_CS_AI


AIK   (2009-12-08 15:29:00) [1]

УРА СДЕЛАЛ!!!
всё прекрасно работает, всё прояснилось когда начал всю базу заново создавать.


> у тебя этому 2 ветки посвящены, тебе это несколько раз повторяли
> в разных вариациях,


Ну так сложилось просил же сильно не пенать


sniknik   (2009-12-08 14:47:00) [2]

+
вообще, это не обязательное условие чтобы, это был коллатион по умолчанию, можно задавать явно, при создании базы/таблицы/поля, можно не задавать, можно приводить к нужному при операциях, можно в работать в юникоде, можно даже работать со строками как с бинарными массивами, вообще без коллатионов...
но это все требует чуть больше знаний чем если бы было просто по умолчанию.

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

> Ну подскажи как мне настроить поля чтоб русский язык показывала
??????
у тебя этому 2 ветки посвящены, тебе это несколько раз повторяли в разных вариациях, или ты ждешь "чудо способ", типа "щелкнуть пальцами, дернуть волос из бороды и сказать трах тибедох три раза" (рецепт от Хотабыча). не будет такого, и через сто вопросов ответ будет один, либо делай по умолчанию либо разбирайся в "кухне". аминь.


AIK   (2009-12-08 14:37:00) [3]

Ну подскажи как мне настроить поля чтоб русский язык показывала
Cyrillic_General_BIN тоже пробовал без результата


sniknik   (2009-12-08 14:30:00) [4]

> Тогда в утилите и DBGride отображаются вопросительные знаки, и заносятся тоже
вот я и говорю
> так и не решенных [7]


AIK   (2009-12-08 14:24:00) [5]


> у тебя этот колайтион по умолчанию? тогда убери юникод в
> полях

Нет по умолчанию SQL_Latin1_General_CP1_CI_AS


> поменяй на varchar

Тогда в утилите и DBGride отображаются вопросительные знаки, и заносятся тоже


sniknik   (2009-12-08 13:56:00) [6]

> Cyrillic_General_CS_AI
> А это разве не решение?
у тебя этот колайтион по умолчанию? тогда убери юникод в полях
> поле tov имеет тип nvarchar
поменяй на varchar

> И что значит:
>> если бы заменил все на новое тоже не столкнулся бы.
использовал юникод везде. ответ [1]! я что не по русски отвечаю? ты там у себя, что мои ответы тоже в виде "?????" читаешь?


AIK   (2009-12-08 13:46:00) [7]


> ты понял почему коверкается?

Проблема была в collation (вроде)


> исправил это?

Cyrillic_General_CS_AI

А это разве не решение?

И что значит:

> если бы заменил все на новое тоже не столкнулся бы.


sniknik   (2009-12-08 13:16:00) [8]

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

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


clickmaker   (2009-12-08 13:14:00) [9]

> отправляю запрос через ADOQuery1.SQL.Add

может, так: insert into table(Field) values(N'вопросительные знаки в место русских букв') ?


AIK   (2009-12-08 13:09:00) [10]

Русский текс у меня прекрасно отображается в dbgrid’е и через SQL Server Enterprise Manager открываю тоже всё в порядке
И вообще интересно почему когда я добавляю поле через ADOQuery1.Insert в вожу всё не обходимое русскими буквами то всё прекрасно а когда отправляю запрос через ADOQuery1.SQL.Add то отправляются вопросительные знаки в место русских букв, вроде один и тодже компонент


> и кстати тут у тебя неявная такая "мелочь" из-за которых
> я и не рекомендую пользоваться ADOQuery (в паре с ADOTable
> и ADOStoredProc).


А как насчет ADODataSet

P.S.  SQL начал учить только что, сильно не пинайте


AIK   (2009-12-08 13:00:00) [11]


> а из-за проблем из прошлой ветки (так и не решенных)


это почему не решенных?


sniknik   (2009-12-08 12:12:00) [12]

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

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


Anatoly Podgoretsky   (2009-12-08 11:23:00) [13]

> AIK  (08.12.2009 10:16:00)  [0]

Может и передает, dbgrid это не тот инструмент, что бы делать какие либо выводы. Запусти SSMS и там смотри.


sniknik   (2009-12-08 11:01:00) [14]

> легко. конвертация простым присвоением к нужному типу.
вот например
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1259658224&n=5
[7]
DName:= DomainName;
делается из-за того, что функция хочет юникод.


sniknik   (2009-12-08 10:55:00) [15]

и кстати тут у тебя неявная такая "мелочь" из-за которых я и не рекомендую пользоваться ADOQuery (в паре с ADOTable и ADOStoredProc). метод SQL это стринглист со всеми вытекающими из этого, он работает исключительно с анси строками... вайдестрока тут неявно приведется к анси, даже если изначально все задать правильно...

ну другая набившая всем оскомину рекомендация (но все одно никем не выполняющаяся пока пока из-за этого не "получат по зубам")... - пользоваться параметрами... значение параметра вполне могло бы быть юникодным.

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

> А это как?
легко. конвертация простым присвоением к нужному типу.


AIK   (2009-12-08 10:41:00) [16]


> sniknik ©   (08.12.09 10:24) [1]
> раз уж выбрал юникод то приводи все к нему.


А это как?


йцукен   (2009-12-08 10:26:00) [17]

Блин, приятно посмотреть. Наконец-то грамотный вопрос. В смысле задан грамотно, а не "не отображает русские буквы". Поздравляю с прогрессом.
К сожалению не в теме, за сим помочь не могу.


sniknik   (2009-12-08 10:24:00) [18]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо