Немного теории
Функиции которые понабодятся:
Функция инициализации.
Где соответственно host — компьютер, на котором запущена СУБД MySQL, user — имя юзера для подключения, passwd — пароль, db — название предполагаемой для использования базы данных, port — порт, unix_socket — сокет или pipe-канал, который необходимо использовать.
client_ flag может принимать несколько значений:
CLIENT_COMPRESS — используется сжатие.
CLIENT_FOUND_ROWS — возвращать число найденных строк.
CLIENT_IGNORE_SPACE — делает все имена функций зарезервированными словами.
CLIENT_INTERACTIVE — разрешает interactive_timeout секунд бездействовать (вместо wait_timeout) перед закрытием подключения.
CLIENT_NO_SCHEMA — запрещает синтаксис вида "db_name.tbl_name.col_name" (имя_базы_данных.имя_таблицы.имя_ко лонки). Используется для ODBC.
CLIENT_ODBC — устанавливает то, что это клиент ODBC.
CLIENT_SSL — используется защищенный протокол SSL.
Мы флагами пользоваться не будем.
Функция выполняющая запрос
Функция возвращающая строку с описанием ошибки
Функция, которая получает все строки результата запроса и хранит их в буфере-клиенте
Функция получает количество строк в результате запроса
Функция получает количество полей (столбцов) в результате запроса
Функция заполняет массив полей для текущей строки
Функция заполняет структуру для текущего поля (fieldnr)
Начальная "настройка"
Для работы в Builder необходимо конвертировать libmysql.lib.
Для этого, нужно открыть консоль и набрать там это
Здесь "C:\Program Files\Borland\CBuilder6\Lib\libmysq l.lib" оригинальная библиотека,
а "C:\Program Files\Borland\CBuilder6\Lib\libmysq l_.lib" конвертированная
У каждого пути будут свои.
Также в папке с программой (или в "C:\Program Files\Borland\CBuilder6\Lib\") должны быть libmysql_.lib, а для VS libmysql.dll.
Заголовочные файлы можно бросить в папку с программой или в "C:\Program Files\Borland\CBuilder6\Include\".
Для VS "C:\Program Files\Microsoft Visual Studio Х.0\VC\include". Где Х - версия VS.
В среде MS VC++ можно использовать библиотеку без конвертации, т.е. libmysql.lib.
Все заголовочные файлы могут быть в папке с программой, но тогда нужно подключать их локально.
Есть замечания для VC++ WinForms.
Так как типы String^ и char[] несовместимы, то для конвертирования из String^ в char[] можно использовать следующие функции (взято из MySQL++):
Пример использования
Код:
// Дескриптор соединения.
// Структура, содержащая HANDLE для одного подключения к серверу.
MYSQL mysql;
MYSQL_RES *res; // Дескриптор результирующей таблицы
MYSQL_ROW row; // Массив полей текущей строки
// Структура, которая содержит всю информацию,
// касающуюся отдельного поля таблицы
MYSQL_FIELD *field;
Функция инициализации.
Код:
MYSQL *mysql_init(MYSQL *mysql);
Код:
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user,
const char *passwd, const char *db,
unsigned int port, const char *unix_socket,
unsigned int client_flag);
CLIENT_COMPRESS — используется сжатие.
CLIENT_FOUND_ROWS — возвращать число найденных строк.
CLIENT_IGNORE_SPACE — делает все имена функций зарезервированными словами.
CLIENT_INTERACTIVE — разрешает interactive_timeout секунд бездействовать (вместо wait_timeout) перед закрытием подключения.
CLIENT_NO_SCHEMA — запрещает синтаксис вида "db_name.tbl_name.col_name" (имя_базы_данных.имя_таблицы.имя_ко лонки). Используется для ODBC.
CLIENT_ODBC — устанавливает то, что это клиент ODBC.
CLIENT_SSL — используется защищенный протокол SSL.
Мы флагами пользоваться не будем.
Функция выполняющая запрос
Код:
int mysql_query(MYSQL *mysql, const char *query);
Код:
char *mysql_error(MYSQL *mysql);
Код:
MYSQL_RES * mysql_store_result(MYSQL *mysql);
Код:
my_ulonglong mysql_num_rows(MYSQL_RES *res);
Код:
unsigned int mysql_num_fields(MYSQL_RES *res);
Код:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
Код:
MYSQL_FIELD *mysql_fetch_field_direct(MYSQL_RES *res, unsigned int fieldnr);
Для работы в Builder необходимо конвертировать libmysql.lib.
Для этого, нужно открыть консоль и набрать там это
Код:
C:\>"C:\Program Files\Borland\CBuilder6\Bin\coff2omf.exe"
-lib:st "C:\Program Files\Borland\CBuilder6\Lib\libmysql.lib"
"C:\Program Files\Borland\CBuilder6\Lib\libmysql_.lib"
а "C:\Program Files\Borland\CBuilder6\Lib\libmysq l_.lib" конвертированная
У каждого пути будут свои.
Также в папке с программой (или в "C:\Program Files\Borland\CBuilder6\Lib\") должны быть libmysql_.lib, а для VS libmysql.dll.
Заголовочные файлы можно бросить в папку с программой или в "C:\Program Files\Borland\CBuilder6\Include\".
Для VS "C:\Program Files\Microsoft Visual Studio Х.0\VC\include". Где Х - версия VS.
В среде MS VC++ можно использовать библиотеку без конвертации, т.е. libmysql.lib.
Все заголовочные файлы могут быть в папке с программой, но тогда нужно подключать их локально.
Есть замечания для VC++ WinForms.
Так как типы String^ и char[] несовместимы, то для конвертирования из String^ в char[] можно использовать следующие функции (взято из MySQL++):
Код:
private: String^ ToUCS2(const char* utf8)
{
try
{
return gcnew String(utf8, 0, strlen(utf8), System::Text::Encoding::Default);
}
catch(...)
{
return "";
}
}
private: Void ToUTF8(char* pcOut, int nOutLen, String^ sIn)
{
try
{
array ^ bytes = System::Text::Encoding::Default->GetBytes(sIn);
nOutLen = Math::Min(nOutLen - 1, bytes->Length);
System::Runtime::InteropServices::Marshal::Copy(bytes, 0, IntPtr(pcOut), nOutLen);
pcOut[nOutLen] = '\0';
}
catch (...)
{
pcOut[nOutLen] = '\0';
}
}
Код:
const int buf = 512;
char host[buf];
ToUTF8(host, buf, hostText->Text); // Перевод из String^ в char[]
String ^tmp = ToUCS2(mysql_error(&mysql)); // Перевод из char* в String^
(http://programmersforum.ru/showthread.php?t=59147)
Комментариев нет:
Отправить комментарий