Также, чтоб такие пути можно было писать, надо добавить к списку стандартных путей поиска инклудов в студии %yourmysqlpath%\include\, и поместить в него mysql.link.h
Здравствуйте Kaa, Вы писали:
Kaa>Здравствуйте ursaloff, Вы писали:
U>>Кто нибудь знает есть ли возможность использовать MySQL C API в Visual C++?
Спасибо огромное за ответ.
А вообще что лучше использовать API, ODBC или еще что либо в отношении связни MySQL — Visual C? Дело в том что дока толковая у меня есть только по API шке.
И вообще где взять нормальную доку по работе с базами данных через ODBC на русском языке?
Еще раз спасибо.
Kaa>В программе включаешь заголовки
Kaa>Где-то, где используется API Kaa>
Kaa>#include <mysql.h>
Kaa>...
Kaa>
Kaa>Где-то (в главном файле .cpp, например в том, где точка взода программы) Kaa>
Kaa>Также, чтоб такие пути можно было писать, надо добавить к списку стандартных путей поиска инклудов в студии %yourmysqlpath%\include\, и поместить в него mysql.link.h
Kaa>API доступен.
Здравствуйте Kaa, Вы писали:
Kaa>В программе включаешь заголовки Kaa>Где-то, где используется API Kaa>
Kaa>#include <mysql.h>
Kaa>...
Kaa>
С mysql.link.h проблем не возникает пути к инклуде файлам прописал.
Но когда прописываю #include <mysql.h>, при компиляции ругается на структуру файла mysql_com.h на строку
my_socket fd; /* For Perl DBI/dbd */
c:\usr\local\mysql\include\mysql_com.h(119) : error C2146: syntax error : missing ';' before identifier 'fd'
Если ее закоментировать ругаться перестает (там ведь написано что это для DBI перлового)
но при выполнении не находит DLL, и не ищит его в директории с mysql
typedef struct st_net {
Vio* vio;
my_socket fd; /* For Perl DBI/dbd */int fcntl;
unsigned char *buff,*buff_end,*write_pos,*read_pos;
char last_error[MYSQL_ERRMSG_SIZE];
unsigned int last_errno,max_packet,timeout,pkt_nr;
unsigned char error;
my_bool return_errno,compress;
my_bool no_send_ok; /* needed if we are doing several
queries in one command ( as in LOAD TABLE ... FROM MASTER ),
and do not want to confuse the client with OK at the wrong time
*/unsigned long remain_in_buf,length, buf_length, where_b;
unsigned int *return_status;
unsigned char reading_or_writing;
char save_char;
} NET;
Здравствуйте ursaloff, Вы писали:
U>А вообще что лучше использовать API, ODBC или еще что либо в отношении связни MySQL — Visual C?
Ну, на API писать — работать будет быстрее. Заставить работать ODBC-драйвер для MySQL мне не удалоось в свое время, поэтому пришлось писать свой компонент (на API).
U>Дело в том что дока толковая у меня есть только по API шке.
Там разбираться — неделю. Короче, стоит.
U>И вообще где взять нормальную доку по работе с базами данных через ODBC на русском языке?
А зачем? В этом мало смысла сейчас уже. Народ в основном бюолее продвинутые технологии пользует. Я бы тоже через MyODBC (он же и OLEDB-провайдером, вроде, является) работал, но большинство запросов, которые я его просил выполнить, возвращали 0 записей на вызоде, тогда как напрямую, через API, через консоль (все, что работает через API) — правильные результаты возвращались.
Здравствуйте ursaloff, Вы писали:
U>Но когда прописываю #include <mysql.h>, при компиляции ругается на структуру файла mysql_com.h на строку U> my_socket fd; /* For Perl DBI/dbd */
Такая проблема есть и у меня. Точной её причины я не знаю, но как-то она решилась сама собой. Такое появдлляется, если непосредственно в cpp-файл mysql.h включить. А если его включать через заголовок (возможно, дело в "стражах включения"), то они (проблемы) пропадают.
Но это я навскидку говорю. Вспомнить сейчас точно не могу. Год назад это было. Попробуй такое. Все, что касается работы с API, заключить в заголовок, и нигде более mysql.h не включать.
U>>А вообще что лучше использовать API, ODBC или еще что либо в отношении связни MySQL — Visual C? Kaa>Ну, на API писать — работать будет быстрее. Заставить работать ODBC-драйвер для MySQL мне не удалоось в свое время, поэтому пришлось писать свой компонент (на API).
Может не той какой версии он был, или с инсталлом его проблемы?
Я ODBC драйвер использовал и использую. Правда не из C а из Clarion, но, на мой взгляд кто есть клиент драйвера — это непринципиально. Он или работает или не работает :)
Драйвер правильнее использовать, если ты еще не определился с базой, в которой будут лежать твой данные (то ли mySQL, то ли Oracle, то ли...). Тогда можно безболезненно ее заменить (ежели конечно аккуратно насчет имен и запросов подходить).
U>>Дело в том что дока толковая у меня есть только по API шке. Kaa>Там разбираться — неделю. Короче, стоит.
U>>И вообще где взять нормальную доку по работе с базами данных через ODBC на русском языке?
В конце концов все равно придется вражеский MSDN читать. Так что прям с этого и начинай, если над ODBC задумался.
Kaa>А зачем? В этом мало смысла сейчас уже. Народ в основном бюолее продвинутые технологии пользует. Я бы тоже через MyODBC (он же и OLEDB-провайдером, вроде, является) работал, но большинство запросов, которые я его просил выполнить, возвращали 0 записей на вызоде, тогда как напрямую, через API, через консоль (все, что работает через API) — правильные результаты возвращались.
Есть (или было...э...вот ведь память) и myOLEDB, токма у меня какие-то проблемы периодически возникали при работе с ним через ADO из сишки.
В конце концов я на API остановился — методов немного, все вроде как ясно и понятно. Да и задачка была не слишком наворочена. Может и тебе этого хватит? Напишешь какой-нить минимальный враппер и будешь жить спокойно.. :)
Здравствуйте Агапов Андрей, Вы писали:
Kaa>>А зачем? В этом мало смысла сейчас уже. Народ в основном бюолее продвинутые технологии пользует. Я бы тоже через MyODBC (он же и OLEDB-провайдером, вроде, является) работал, но большинство запросов, которые я его просил выполнить, возвращали 0 записей на вызоде, тогда как напрямую, через API, через консоль (все, что работает через API) — правильные результаты возвращались.
АА>Есть (или было...э...вот ведь память) и myOLEDB, токма у меня какие-то проблемы периодически возникали при работе с ним через ADO из сишки.
Ну, я пытался из-под ASP интерфейсик админский к некой бизнес-логике прикрутить. Так почти на любой запрос к 2-м таблицам — пустой результат. К одной — все в порядке. Но были исключения. В итоге, я потратил месяц на разбирательство с API, наприсание и отладку COM-объекта типа recordset с нужными мне методами, и он уж год как работатет и не свистит.
Такие пироги.
АА>В конце концов я на API остановился — методов немного, все вроде как ясно и понятно. Да и задачка была не слишком наворочена. Может и тебе этого хватит? Напишешь какой-нить минимальный враппер и будешь жить спокойно..
Дык на сайте есть официальные врапперы для C++, но я не в курсе, что они такое и под какими платформами работают.
Здравствуйте Kaa, Вы писали:
Kaa>Такая проблема есть и у меня. Точной её причины я не знаю, но как-то она решилась сама собой. Такое появдлляется, если непосредственно в cpp-файл mysql.h включить. А если его включать через заголовок (возможно, дело в "стражах включения"), то они (проблемы) пропадают.
Так и не добился чтыбы эта ошибка пропала. Если можно скажи поконкретнее куда нужно включить файл mysql.h если не в cpp файл, что такое "включить в заголовок"?
Проблемма исчезает если просто взять и закомментировать ту строку в mysql_com.h файле, на которой возникает ошибка. Но кажется что это вообще не правильно Kaa>Но это я навскидку говорю. Вспомнить сейчас точно не могу. Год назад это было. Попробуй такое. Все, что касается работы с API, заключить в заголовок, и нигде более mysql.h не включать.
Здравствуйте ursaloff, Вы писали:
U>Проблемма исчезает если просто взять и закомментировать ту строку в mysql_com.h файле, на которой возникает ошибка. Но кажется что это вообще не правильно
Не, забудь весь тот бред, что я раньше говорил.
Проблемы исчезает, когда где-то перед mysql.h windows.h включен. Делай так:
#include <windows.h>
#include <mysql.h>
...
Алексей Кирдин
Re[6]: MySQL C API & Visual C++
От:
Аноним
Дата:
09.12.04 17:59
Оценка:
Здравствуйте, Kaa, Вы писали:
Все что нужно — так это просто перед #include <mysql.h> добавить еще #include <winsock.h>