|
|
|
| Как подключить mysqllib.dll к MDI проекту С++?
Я пишу MDI интерфейс под Windows для базы на С++. Для консольного варианта программы - без проблем подключаю mysqllib.dll.
Но для MDI или SDI проекта - не компилируется, ошибки компиляции файлов из C:\Program Files\MySQL\MySQL Server 5.0\include.
Такое происходит и в С++Builder 6, и в С++Builder 2006, и в MS Studio 2003? и в MS Studio 2005/
Подскажите, как и что поправить!
Спасибо, Вадим. | |
|
|
|
|
|
|
|
для: kvesda
(02.06.2006 в 21:37)
| | Да, конфликтует - обычно при работе с GUI используют специальные интерфейсы, например, для builder можно использовать драйвер dbExpress, для .NET - тоже имеется специальная адапционная библиотека. | |
|
|
|
|
|
|
|
для: cheops
(02.06.2006 в 23:21)
| | >Да, конфликтует - обычно при работе с GUI используют
>специальные интерфейсы, например, для builder можно
>использовать драйвер dbExpress, для .NET - тоже имеется
>специальная адапционная библиотека.
Я писал раньше свою базу под .NET библиотеку - все нормально работает за исключением одногно - НИКАК НЕ УДАВАЛОСЬ ОТОБРАЗИТЬ РУССКИЕ СЛОВА! Кодировки, позволяющие это сделать .NET библиотека не поддерживает - ругается. Поэтому я решил пересесть на mysqllib.dll - вдохновило то, что она работает как-то с EMS MySQL Manager 2005.
С dbExpress я не имел дело раньше. Писал под ADO драйвер ODBC. И опять таже проблема - мои данные видятся по-русски только через мою же прогу для ODBC драйвера - стандартный клиент mysql выдает на моих данных китайскую грамоту. То же выдает и EMS MySQL Manager 2005. Может можно все-таки как-то решить эту проблему с кодировкой, чтобы базу (таблицы) можно было смотреть разными клиентами и по-русски? Если это решается с помошью dbExpress - то как? Буду рад любым советам (ну и загрузил ;)) )/ | |
|
|
|
|
|
|
|
для: kvesda
(03.06.2006 в 20:57)
| | ODBC - кстати тоже решение... Как выглядит "китайская грамота" и какая версия MySQL используется? У MySQL достоточна гибкая система кодировок, но если в ней разобраться - всё работает безукоризненно. | |
|
|
|
|
|
|
|
для: cheops
(03.06.2006 в 22:10)
| | У меня стоит MySQL 5.0.18.nt При установке сервера установил кодировку default CHARACTER SET 'cp1251'; COLLATE 'cp1251_general_ci'
СМтроки типа char, varcha, и enum. Данные вносил средствами EMS MySQL Manager 2005 (т.к. пока еще не реализовал в своей программе функцию dump для таблиц InnoDB, пользуюсь Extract DataBase из EMS MySQL Manager 2005).
При такой кодировке моя программа (через драйвер ODBC) отображает данные, как '????? ??? ??', в то время, как стандартный клиент mysql отображает эту же строку в DOS кодировке (почему, понять не могу пока)
Если набиваю через консольный клиент mysql по-руксски слово 'Михайловский', то в EMS MySQL Manager 2005 это слово отображается уже не в DOS кодировке, а как 'ЊЁе ©«®ўбЄЁ©'
А в моей программе через ODBC - '???©<<®????©'
Складывается таколе впечатление, что "нормально" читать русские слова можно только тем клиентом, через который и вносил данные. Остальные - отображают все по-своему (и это при одной и тойже кодировке!)
Подскажите свои соображения. Может я что не так настроил в настройках?
Спасибо. Вадим. | |
|
|
|
|
|
|
|
для: kvesda
(04.06.2006 в 16:10)
| | >????? ??? ??
Перед работай с русским текстом необходимо выставить кодировку соедиения при помощи оператора SET NAMES
т.е. установили соединение с сервером MySQL - сразу выполняйте этот запрос.
>Если набиваю через консольный клиент mysql
А кодировку командной строки меняете - там ведь cp866 по умолчанию. В windows XP её можно изменить при помощи команды
после этого можно загружать консольный клиент mysql.exe. | |
|
|
|
|
|
|
|
для: cheops
(04.06.2006 в 20:40)
| | Я только недавно перешел на MySQL - очень понравился. Так что благодарен за любые советы. Спасибо за совет, завтра попробую. | |
|
|
|
|
|
|
|
для: kvesda
(04.06.2006 в 22:15)
| | Вообще при работе из С/С++ под Windows сейчас неразрешимых проблем с кодировкой и сортировкой русского текста нет (придётся повозится с преобразованиями, но к этому быстро привыкаешь), кроме того в состав MySQL входит встроенный сервер (как в InterBase), что позволяет создавать достаточно гибкое ПО. | |
|
|
|
|
|
|
|
для: cheops
(05.06.2006 в 02:51)
| | Что-то у меня не получилось. Подключаюсь к серверу MySql так:
ADODB::_ConnectionPtr m_myConn;
_bstr_t bstrConnStr = "DSN="+bstrMyDSN+";DATABASE="+bstrDataBase+";SERVER="+bstrServer+";PORT="+bstrPort;
m_myConn.CreateInstance("ADODB.Connection");
_bstr_t bstrCP2151 = "SET NAMES 'cp1251';";
m_myConn->Execute(bstrCP2151,NULL,NULL);
Делаю запрос:
_variant_t vtQuery = "SELECT * FROM Table1;";
ADODB::_RecordsetPtr my_rs;
my_rs.CreateInstance("ADODB.Recordset");
my_rs->Open(vtQuery,m_myConn.GetConnectionString(),ADODB::adOpenStatic,ADODB::adLockOptimistic,ADODB::adCmdText);
В результате все равно русские слова имеют вид '???????'.
Что я сделал неправильно? | |
|
|
|
|
|
|
|
для: kvesda
(05.06.2006 в 19:47)
| | А русские слова попали туда из программы или при помощи стороннего клиента? Дело в том, что если русский текст помещался в базу данных без настройки кодировки соединения он так и остаётся искажённым (в виде знаков вопросов) и восстановить его уже нельзя - только перегружать. Другие клиенты нормально отображают русский текст, который вы тянете через ADO? | |
|
|
|
|
|
|
|
для: cheops
(05.06.2006 в 19:54)
| | Данные в базу (тестовая для отладки структуры базы и алгоритмов) я загружаю сторонним клиентом EMS MySQL Manager 2005.
Сам EMS MySQL Manager 2005 отображает данные при cp1251 прекрасно - по-русски. Другой клиент MySQL Query Browser тоже отображает результаты запросов к ЭТОЙ базу по-русски.
А вот моя программа (на WTL) - нет - '????'. И это после
_bstr_t bstrCP2151 = "SET NAMES 'cp1251';";
m_myConn->Execute(bstrCP2151,NULL,NULL);
Таблицы создавались в EMS MySQL Manager 2005 уже с кодировкой cp1251 по умолчанию. И данные заносились уже "под этой кодировкой". Вот часть листинга:
CREATE DATABASE 'my_db'
CHARACTER SET 'cp1251'
COLLATE 'cp1251_general_ci';
...
CREATE TABLE 'areas' (
'area_id' int(11) unsigned NOT NULL auto_increment COMMENT 'NonUnique, PK',
'area' varchar(20) NOT NULL COMMENT 'районы',
PRIMARY KEY ('area_id'),
UNIQUE KEY 'area' ('area')
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
...
INSERT INTO 'areas' ('area_id', 'area') VALUES
(1,'Рязанский'),
(2,'Пронский'),
(3,'Михайловский'),
(4,'Рыбновский'),
(5,'Скопинский');
COMMIT;
Может, я ADO недонастроил? | |
|
|
|
|
|
|
|
для: kvesda
(05.06.2006 в 22:13)
| | >Может, я ADO недонастроил?
Хм... я насколько помню там драйвер нужен - вы его брали с dev.mysql.com?
PS Я лично через ADO не пробовал связываться - всегда предпочитая прямые драйвера вроде dbExpress. | |
|
|
|
|
|
|
|
для: cheops
(06.06.2006 в 10:45)
| | Да, я скачал версию ODBC 3.51 с официального сайта MySQL AB.
Я попробовал с нуля - переустановил сервер MySQL сразу под cp1251. Создал таблицу с ср1251 и просмотрел через свою программу - увы, "???'. Может нужно перекомпилировать сервер сразу под кодировку ср1251? Уж больно не хочется отказываться от MySQL - много кода и времени ушло! Может что не так с ситемой WinXPSP2? Может я что-то упускаю в установке и настройке сервера? Если не тяжело, опишите по шагам процесс сервера и коннекта к неме настройки - где, что. как.
Спасибо. Вадим. | |
|
|
|
|
|
|
|
для: kvesda
(06.06.2006 в 22:03)
| | Скорее всего не MySQL - это ничего не даст, механизм перекодировки сейчас уже не выключить, а ODBC придётся перекомпилировать... У вас нет возможности попробовать версию 4.0.x - с ней кодировки нормально в приложении отображаются? | |
|
|
|
|
|
|
|
для: cheops
(07.06.2006 в 00:54)
| | Мне наконец-то удалось совладать с "??????" при кодировке cp1251!
В my.ini в секцию [mysqld] заносим skip-character-set-client-handshake, что ведет к тому, что сервер игнорирует кодировку от клиента.
И все работает! Но есть одна тонкость. Нужно ОБЯЗАТЕЛЬНО ПЕРЕЗАГРУЗИТЬ сервер - остановка и запуск сервиса. Иначе только после перезагрузки машины все сработает (сервер перезагрузится).
Спасибо за советы и поддержку! | |
|
|
|