MySQL C API & Visual C++
От: ursaloff Украина http://www.ursaloff.mksat.net
Дата: 23.05.02 06:34
Оценка:
Кто нибудь знает есть ли возможность использовать MySQL C API в Visual C++?
Rest Begards,
UrsaloFF
Re: MySQL C API & Visual C++
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 23.05.02 07:38
Оценка:
Здравствуйте ursaloff, Вы писали:

U>Кто нибудь знает есть ли возможность использовать MySQL C API в Visual C++?


В программе включаешь заголовки

Где-то, где используется API
#include <mysql.h>
...


Где-то (в главном файле .cpp, например в том, где точка взода программы)
#include <mysql.link.h>
...


mysql.link.h
# ifndef _mysql_link_h_
#   define _mysql_link_h_

#ifdef _DEBUG
#     pragma message ("Using library: E:/mysql/Lib/debug/libmysql.lib")
#     pragma comment(lib, "E:/mysql/Lib/debug/libmysql.lib")
#else
#     pragma message ("Using library: E:/mysql/Lib/opt/libmysql.lib")
#     pragma comment(lib, "E:/mysql/Lib/opt/libmysql.lib")
#endif

# endif // _mysql_link_h_


Также, чтоб такие пути можно было писать, надо добавить к списку стандартных путей поиска инклудов в студии %yourmysqlpath%\include\, и поместить в него mysql.link.h

API доступен.
Алексей Кирдин
Re[2]: MySQL C API & Visual C++
От: ursaloff Украина http://www.ursaloff.mksat.net
Дата: 23.05.02 13:36
Оценка:
Здравствуйте 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>#include <mysql.link.h>
Kaa>...
Kaa>


Kaa>mysql.link.h

Kaa>
Kaa># ifndef _mysql_link_h_
Kaa>#   define _mysql_link_h_

Kaa>#ifdef _DEBUG
Kaa>#     pragma message ("Using library: E:/mysql/Lib/debug/libmysql.lib")
Kaa>#     pragma comment(lib, "E:/mysql/Lib/debug/libmysql.lib")
Kaa>#else
Kaa>#     pragma message ("Using library: E:/mysql/Lib/opt/libmysql.lib")
Kaa>#     pragma comment(lib, "E:/mysql/Lib/opt/libmysql.lib")
Kaa>#endif

Kaa># endif // _mysql_link_h_
Kaa>


Kaa>Также, чтоб такие пути можно было писать, надо добавить к списку стандартных путей поиска инклудов в студии %yourmysqlpath%\include\, и поместить в него mysql.link.h


Kaa>API доступен.
Rest Begards,
UrsaloFF
Re[2]: MySQL C API & Visual C++
От: ursaloff Украина http://www.ursaloff.mksat.net
Дата: 24.05.02 08:07
Оценка:
Здравствуйте 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;


Kaa>API доступен.
Rest Begards,
UrsaloFF
Re[3]: MySQL C API & Visual C++
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 25.05.02 12:02
Оценка:
Здравствуйте ursaloff, Вы писали:

U>А вообще что лучше использовать API, ODBC или еще что либо в отношении связни MySQL — Visual C?

Ну, на API писать — работать будет быстрее. Заставить работать ODBC-драйвер для MySQL мне не удалоось в свое время, поэтому пришлось писать свой компонент (на API).

U>Дело в том что дока толковая у меня есть только по API шке.

Там разбираться — неделю. Короче, стоит.

U>И вообще где взять нормальную доку по работе с базами данных через ODBC на русском языке?


А зачем? В этом мало смысла сейчас уже. Народ в основном бюолее продвинутые технологии пользует. Я бы тоже через MyODBC (он же и OLEDB-провайдером, вроде, является) работал, но большинство запросов, которые я его просил выполнить, возвращали 0 записей на вызоде, тогда как напрямую, через API, через консоль (все, что работает через API) — правильные результаты возвращались.
Алексей Кирдин
Re[3]: MySQL C API & Visual C++
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 25.05.02 12:06
Оценка:
Здравствуйте ursaloff, Вы писали:

U>Но когда прописываю #include <mysql.h>, при компиляции ругается на структуру файла mysql_com.h на строку

U> my_socket fd; /* For Perl DBI/dbd */

Такая проблема есть и у меня. Точной её причины я не знаю, но как-то она решилась сама собой. Такое появдлляется, если непосредственно в cpp-файл mysql.h включить. А если его включать через заголовок (возможно, дело в "стражах включения"), то они (проблемы) пропадают.

Но это я навскидку говорю. Вспомнить сейчас точно не могу. Год назад это было. Попробуй такое. Все, что касается работы с API, заключить в заголовок, и нигде более mysql.h не включать.
Алексей Кирдин
Re[4]: MySQL C API & Visual C++
От: Агапов Андрей  
Дата: 27.05.02 11:28
Оценка:
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 остановился — методов немного, все вроде как ясно и понятно. Да и задачка была не слишком наворочена. Может и тебе этого хватит? Напишешь какой-нить минимальный враппер и будешь жить спокойно.. :)
Re[5]: MySQL C API & Visual C++
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 27.05.02 11:41
Оценка:
Здравствуйте Агапов Андрей, Вы писали:

Kaa>>А зачем? В этом мало смысла сейчас уже. Народ в основном бюолее продвинутые технологии пользует. Я бы тоже через MyODBC (он же и OLEDB-провайдером, вроде, является) работал, но большинство запросов, которые я его просил выполнить, возвращали 0 записей на вызоде, тогда как напрямую, через API, через консоль (все, что работает через API) — правильные результаты возвращались.


АА>Есть (или было...э...вот ведь память) и myOLEDB, токма у меня какие-то проблемы периодически возникали при работе с ним через ADO из сишки.


Ну, я пытался из-под ASP интерфейсик админский к некой бизнес-логике прикрутить. Так почти на любой запрос к 2-м таблицам — пустой результат. К одной — все в порядке. Но были исключения. В итоге, я потратил месяц на разбирательство с API, наприсание и отладку COM-объекта типа recordset с нужными мне методами, и он уж год как работатет и не свистит.

Такие пироги.

АА>В конце концов я на API остановился — методов немного, все вроде как ясно и понятно. Да и задачка была не слишком наворочена. Может и тебе этого хватит? Напишешь какой-нить минимальный враппер и будешь жить спокойно..


Дык на сайте есть официальные врапперы для C++, но я не в курсе, что они такое и под какими платформами работают.
Алексей Кирдин
Re[4]: MySQL C API & Visual C++
От: ursaloff Украина http://www.ursaloff.mksat.net
Дата: 27.05.02 12:16
Оценка:
Здравствуйте Kaa, Вы писали:

Kaa>Такая проблема есть и у меня. Точной её причины я не знаю, но как-то она решилась сама собой. Такое появдлляется, если непосредственно в cpp-файл mysql.h включить. А если его включать через заголовок (возможно, дело в "стражах включения"), то они (проблемы) пропадают.

Так и не добился чтыбы эта ошибка пропала. Если можно скажи поконкретнее куда нужно включить файл mysql.h если не в cpp файл, что такое "включить в заголовок"?
Проблемма исчезает если просто взять и закомментировать ту строку в mysql_com.h файле, на которой возникает ошибка. Но кажется что это вообще не правильно
Kaa>Но это я навскидку говорю. Вспомнить сейчас точно не могу. Год назад это было. Попробуй такое. Все, что касается работы с API, заключить в заголовок, и нигде более mysql.h не включать.
Rest Begards,
UrsaloFF
Re[5]: MySQL C API & Visual C++
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 27.05.02 12:30
Оценка:
Здравствуйте 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>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.