Проблема с русскими символами (MySQL 5.0.51a+Lazarus 0.9.4)
Модератор: Модераторы
Проблема с русскими символами (MySQL 5.0.51a+Lazarus 0.9.4)
Люди добрые, помогите! Я уже в отчаинье! Перерыл уже пол инэта но немогу заставить в лазаре отображать и обрабатывать русскии символы полученные из 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 - тоже безрезультатно. Может кто знает как с этим бороться или хотя бы где найти справочную информацию по эти трем компонентам лазаря?
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 - тоже безрезультатно. Может кто знает как с этим бороться или хотя бы где найти справочную информацию по эти трем компонентам лазаря?
Если пытаюсь передавать через 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?
передаю примерно таким образом:
SQLQuery.SQL.Text:="SET NAMES cp1251";
SQLQuery.Open;
Вот тут и возникает данная ошибка. За место "SET NAMES cp1251" пробывал различные значения, хотя это работает в коммандной строке самого MySQL. Пытался присваивать значение типа следующего: "UPDATE table SET NAMES cp1251", где "table" - имя таблицы к которой я подключаюсь, но результат всегда один и тот же. Так же пробывал с различными значениями для параметров ParseSQL и ReadOnly. Присваивание в редакторе форм каких бы то небыло значений параметрам CharSet и Params компоненту TMySQL50Connection не превили ни к каким видимым результам, такое ощущение что они просто игнорируются.
Не моглибы вы привести небольшой пример как правильно передовать параметры кодовой таблицы в TMySQL50Connection?
Attid писал(а)::shock: а нафига ?Код: Выделить всё
SQLQuery.SQL.Text:="select * from employee";
SQLQuery.Open;
и все
я так же считал, но когда понадобилось подобным образом вывести таблицу с русскими символами, то все они были заменены символами вопроса, вот уже четвертый день немогу это победить. Если пытаюсь вводить в таблицу русские значения то в ответ на SQLQuery.ApplyUpdates; получаю ошибку о невозможности конвертировать строку и введенная строка представлена в шенадцатиричных кодах соответствующих cp1251
Частично ответил сам на свои вопросы: В лазаре используется кодировка utf8 и если создать базу в этой кодовой таблице то русские символы обрабатываются без ошибок и отлично выводятся, но мне необходимо подключатся к базе в кодировке cp1251
попытка повторить все предыдущие действия с корректировкой на данное обстоятельство так же не превили к положительным результатам.
Нашел вроде неплохое описание всех этих компонентов для работы с базами но на немецком языке в формате pdf, скачать можно отсюда:
http://mirror.optus.net/sourceforge/l/la/lazsnippets/
но подчерпнуть от туда что либо путевое у меня не получилось, сказался языковый барьер, найти чо либо подобное хотя бы на английском, не говоря уже про русский, мне не тоже удалось
Может у кого хотя бы какие то идеи есть что еще попробывать?
попытка повторить все предыдущие действия с корректировкой на данное обстоятельство так же не превили к положительным результатам.
Нашел вроде неплохое описание всех этих компонентов для работы с базами но на немецком языке в формате pdf, скачать можно отсюда:
http://mirror.optus.net/sourceforge/l/la/lazsnippets/
но подчерпнуть от туда что либо путевое у меня не получилось, сказался языковый барьер, найти чо либо подобное хотя бы на английском, не говоря уже про русский, мне не тоже удалось
Может у кого хотя бы какие то идеи есть что еще попробывать?
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
И когда люди будут пользоваться поиском?
http://freepascal.ru/forum/viewtopic.php?t=2368
http://freepascal.ru/forum/viewtopic.php?t=2368
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
shade писал(а):И когда люди будут пользоваться поиском?
http://freepascal.ru/forum/viewtopic.php?t=2368
Ты не напрегайся вопросами - легче спросить чем поискать
- да и за чем форум, чтобы спросить
- а лень ответить кинь ссылку
форум в переводе это базар(рынок) - вот как в старине приходили люди на рынке болтали обменивались мнениями - повторялись вопросы ну и что - такова жизнь
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
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
nefarious писал(а):Спасибо, все заработало, вот код, может кому еще пригодится:
Добавим в FAQ
nefarious писал(а):А по ссылке, что вы мне приводили, я уже был и давал ее же в самом начале, вот только как воспользоваться этими данными немог догнать четыре дня, пытаясь постоянно выполнить Open
Тоже бывает, я поторопился
nefarious
У Вас типичная и широкораспрстранённая ошибка.
В FAQ следует добавить не это конкретное, а вот что:
Поверьте, к русским буквам это не имеет никакого отношения...
У Вас типичная и широкораспрстранённая ошибка.
В FAQ следует добавить не это конкретное, а вот что:
Если запрс должен возвратить набор данны, например "SELECT поле1, поле2 FROM таблица", "SHOW ..." то его выполнение нужно делать с помощью метода Open.
Если запрос не возвращает набор данных, например "UPDATE ...", "INSERER ...", "SET ..." и т.п., то его выполнение нужно делать с помощью метода ExecSQL.
Поверьте, к русским буквам это не имеет никакого отношения...
