Проблема с русскими символами (MySQL 5.0.51a+Lazarus 0.9.4)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблема с русскими символами (MySQL 5.0.51a+Lazarus 0.9.4)

Сообщение nefarious » 22.02.2008 22:41:42

Люди добрые, помогите! Я уже в отчаинье! Перерыл уже пол инэта но немогу заставить в лазаре отображать и обрабатывать русскии символы полученные из SQL запросов. Lazarus версии 0.9.4, установлен MySQL 5.0.51a, пишу из под винды, в базе кодировка cp1251, то есть данны вбиты в этой кодировки и значение переменных character_set_client=cp1251
character_set_connection=cp1251
character_set_database=cp1251
character_set_results=cp1251
character_set_server=cp1251
в lazarus использую для соединения с базой компоненты TMySQL50Connection, TSQLQuery, TSQLTransaction, пытался передовать SQL запросом после подключения параметр "SET NAMES cp1251", "SET character_set_client="cp1251", character_set_connection="cp1251", character_set_results="cp1251"" и подобные найденые в http://freepascal.ru/forum/viewtopic.ph ... sql+cp1251 и др. местах но в ответ получал ошибку, пытался менять параметры CharSet и Params - тоже безрезультатно. Может кто знает как с этим бороться или хотя бы где найти справочную информацию по эти трем компонентам лазаря?
nefarious
незнакомец
 
Сообщения: 7
Зарегистрирован: 30.10.2007 11:47:30

Сообщение Vadim » 23.02.2008 09:42:23

Я делаю всё то же самое, что и Вы и у меня это работает самым восхитительным образом.
Напишите текст выдаваемой ошибки и в каком месте она возникает, иначе помочь Вам будет совершенно невозможно.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение nefarious » 23.02.2008 13:38:36

Если пытаюсь передавать через SQLQuery то получаю "cannot open a non-select statement"
передаю примерно таким образом:
SQLQuery.SQL.Text:="SET NAMES cp1251";
SQLQuery.Open;
Вот тут и возникает данная ошибка. За место "SET NAMES cp1251" пробывал различные значения, хотя это работает в коммандной строке самого MySQL. Пытался присваивать значение типа следующего: "UPDATE table SET NAMES cp1251", где "table" - имя таблицы к которой я подключаюсь, но результат всегда один и тот же. Так же пробывал с различными значениями для параметров ParseSQL и ReadOnly. Присваивание в редакторе форм каких бы то небыло значений параметрам CharSet и Params компоненту TMySQL50Connection не превили ни к каким видимым результам, такое ощущение что они просто игнорируются.
Не моглибы вы привести небольшой пример как правильно передовать параметры кодовой таблицы в TMySQL50Connection?
nefarious
незнакомец
 
Сообщения: 7
Зарегистрирован: 30.10.2007 11:47:30

Сообщение Attid » 23.02.2008 13:42:40

:shock: а нафига ?

Код: Выделить всё
SQLQuery.SQL.Text:="select * from employee";
SQLQuery.Open;

и все
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Attid » 23.02.2008 13:45:24

да и кто работает с мускл сделайте пример с одной кнопкой и гридом для покалений, а то ежемесячно кто-нибуть приходит и глупости спрашивает.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение nefarious » 23.02.2008 13:53:59

Attid писал(а)::shock: а нафига ?

Код: Выделить всё
SQLQuery.SQL.Text:="select * from employee";
SQLQuery.Open;

и все

я так же считал, но когда понадобилось подобным образом вывести таблицу с русскими символами, то все они были заменены символами вопроса, вот уже четвертый день немогу это победить. Если пытаюсь вводить в таблицу русские значения то в ответ на SQLQuery.ApplyUpdates; получаю ошибку о невозможности конвертировать строку и введенная строка представлена в шенадцатиричных кодах соответствующих cp1251
nefarious
незнакомец
 
Сообщения: 7
Зарегистрирован: 30.10.2007 11:47:30

Сообщение nefarious » 23.02.2008 14:02:07

Attid писал(а):да и кто работает с мускл сделайте пример с одной кнопкой и гридом для покалений, а то ежемесячно кто-нибуть приходит и глупости спрашивает.


вот тут находится отличный пример работы с MySQL, но про кодовые таблицы не сказано ни слова :(
nefarious
незнакомец
 
Сообщения: 7
Зарегистрирован: 30.10.2007 11:47:30

Сообщение nefarious » 23.02.2008 14:03:14

nefarious
незнакомец
 
Сообщения: 7
Зарегистрирован: 30.10.2007 11:47:30

Сообщение nefarious » 23.02.2008 16:02:51

Частично ответил сам на свои вопросы: В лазаре используется кодировка utf8 и если создать базу в этой кодовой таблице то русские символы обрабатываются без ошибок и отлично выводятся, но мне необходимо подключатся к базе в кодировке cp1251 :(
попытка повторить все предыдущие действия с корректировкой на данное обстоятельство так же не превили к положительным результатам.
Нашел вроде неплохое описание всех этих компонентов для работы с базами но на немецком языке в формате pdf, скачать можно отсюда:
http://mirror.optus.net/sourceforge/l/la/lazsnippets/
но подчерпнуть от туда что либо путевое у меня не получилось, сказался языковый барьер, найти чо либо подобное хотя бы на английском, не говоря уже про русский, мне не тоже удалось :(
Может у кого хотя бы какие то идеи есть что еще попробывать?
nefarious
незнакомец
 
Сообщения: 7
Зарегистрирован: 30.10.2007 11:47:30

Сообщение shade » 23.02.2008 17:02:45

И когда люди будут пользоваться поиском?
http://freepascal.ru/forum/viewtopic.php?t=2368
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение shade » 23.02.2008 17:41:34

nefarious писал(а):SQLQuery.SQL.Text:="SET NAMES cp1251";
SQLQuery.Open;

Может SQLQuery.Exec;
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение AMD » 23.02.2008 20:12:00

shade писал(а):И когда люди будут пользоваться поиском?
http://freepascal.ru/forum/viewtopic.php?t=2368


Ты не напрегайся вопросами - легче спросить чем поискать
- да и за чем форум, чтобы спросить
- а лень ответить кинь ссылку

форум в переводе это базар(рынок) - вот как в старине приходили люди на рынке болтали обменивались мнениями - повторялись вопросы ну и что - такова жизнь
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение nefarious » 23.02.2008 21:00:16

shade писал(а):
nefarious писал(а):SQLQuery.SQL.Text:="SET NAMES cp1251";
SQLQuery.Open;

Может SQLQuery.Exec;


Спасибо, все заработало, вот код, может кому еще пригодится:
// SQLQuery.SQL.Text:='SET character_set_client="cp1251", character_set_connection="cp1251", character_set_results="cp1251"';
SQLQuery.SQL.Text:='SET NAMES cp1251';
SQLQuery.ExecSQL;
SQLQuery.SQL.Text := CommandEdit.Text;
SQLQuery.ParseSQL:=not cbReadOnly.Checked;
SQLQuery.ReadOnly:=cbReadOnly.Checked;
SQLQuery.Open;

работает как с той строкой что закоментирована, так и с "SET NAMES cp1251"
А по ссылке, что вы мне приводили, я уже был и давал ее же в самом начале, вот только как воспользоваться этими данными немог догнать четыре дня, пытаясь постоянно выполнить Open :)
nefarious
незнакомец
 
Сообщения: 7
Зарегистрирован: 30.10.2007 11:47:30

Сообщение shade » 23.02.2008 21:57:39

nefarious писал(а):Спасибо, все заработало, вот код, может кому еще пригодится:

Добавим в FAQ ;)

nefarious писал(а):А по ссылке, что вы мне приводили, я уже был и давал ее же в самом начале, вот только как воспользоваться этими данными немог догнать четыре дня, пытаясь постоянно выполнить Open

Тоже бывает, я поторопился :)
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Vadim » 24.02.2008 06:50:31

nefarious
У Вас типичная и широкораспрстранённая ошибка.
В FAQ следует добавить не это конкретное, а вот что:
Если запрс должен возвратить набор данны, например "SELECT поле1, поле2 FROM таблица", "SHOW ..." то его выполнение нужно делать с помощью метода Open.
Если запрос не возвращает набор данных, например "UPDATE ...", "INSERER ...", "SET ..." и т.п., то его выполнение нужно делать с помощью метода ExecSQL.

Поверьте, к русским буквам это не имеет никакого отношения... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu[bot] и гости: 2

Рейтинг@Mail.ru