Вывод в консоль
Вывод таблиц в консоли. Интерфейс правда не супер, но для практики думаю хватит.
В коде есть комментарии.
Графический интерфейс
Очередная статья по взаимодействию с СУБД MySQL из программы на С++
Мутим простейший интерфейс
Кидаем на форму:
TLabel (5 шт.). В свойство Caption пишем хост, порт и т.д.
TEdit (5 шт.). Названия TEdit'ов: hostText, userText, passText, dbText и portText.
TButton (2 шт.). В свойства Caption пишем "Пошел!" и "Закрыть".
TMemo (1 шт.)
TStringGrid (1 шт.)
Подключаем заголовочные файлы, библиотеку и объявим одну константу
Обработчик кнопки "Закрыть" думаю понятен
А в обработчик копки "Пошел!" пишем следующее
Вот и все. пишем запрос и "Пошел!".
(http://programmersforum.ru/showthread.php?t=59147)
Вывод таблиц в консоли. Интерфейс правда не супер, но для практики думаю хватит.
В коде есть комментарии.
Код:
#define __LCC__ // Объявляем директиву без которой
// программа не может работать. Можно конечно поключить windows.h,
// но это будет не красиво
#pragma comment(lib, "libmysql_.lib") // подключаем библиотеку
#include "mysql.h" // Заголовочный файл с описание функций
#include "stdio.h"
#include "conio.h"
void mysql(const char query[])
{
MYSQL mysql; // Дескриптор соединения
MYSQL_ROW row; // Массив полей текущей строки
MYSQL_RES *res; // Дескриптор результирующей таблицы
char host[] = "localhost"; // хост
char user[] = "admin"; // пользователь
char passwd[] = "admin"; // пароль
char db[] = "library"; // название базы данных
int port = 0; // порт. Если порт у сервера MySQL не по умолчанию (3306),
// то нужно указывать конкретный номер порта
mysql_init(&mysql); // Инициализация
mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0); // соединение
if (mysql_query(&mysql, query) > 0) // запорс. Если ошибок нет, то продолжаем работу
{
// Если была ошибка, ...
printf("%s", mysql_error(&mysql)); // ... вывдем ее
return; // и завершим работу
}
res = mysql_store_result(&mysql); // Берем результат,
int num_fields = mysql_num_fields(res); // количество полей
int num_rows = mysql_num_rows(res); // и количество строк.
for (int i = 0; i < num_fields; i++) // Выводим названия полей
{
field = mysql_fetch_field_direct(res, i); // Получение названия текущего поля
printf("| %s |", field->name);
}
printf("\n");
for (int i = 0; i < num_rows; i++) // Вывод таблицы
{
row = mysql_fetch_row(res); // получаем строку
for (int l = 0; l < num_fields; l++)
printf("| %s |", row[l]); // Выводим поля
printf("\n");
}
printf("Count records = %d", num_rows); // Вывод информации о количестве записей
mysql_free_result(res); // Очищаем результаты
mysql_close(&mysql); // Закрываем соединение
}
int main()
{
mysql("SELECT * FROM t_mid_author"); // Запрос
getch(); // Ожидаем нажатие клавиши
return 0;
}
Графический интерфейс
Очередная статья по взаимодействию с СУБД MySQL из программы на С++
Мутим простейший интерфейс
Кидаем на форму:
TLabel (5 шт.). В свойство Caption пишем хост, порт и т.д.
TEdit (5 шт.). Названия TEdit'ов: hostText, userText, passText, dbText и portText.
TButton (2 шт.). В свойства Caption пишем "Пошел!" и "Закрыть".
TMemo (1 шт.)
TStringGrid (1 шт.)
Подключаем заголовочные файлы, библиотеку и объявим одну константу
Код:
#define __LCC__
#include
#pragma comment(lib, "libmysql_.lib") // Для Builder 6. см. в первой статье
#pragma comment(lib, "libmysql.lib") // Для MS VC++
// Для других сред программирования не пробовал (
const int buf = 512;
А в обработчик копки "Пошел!" пишем следующее
Код:
/* Проверим что все данные были введены? в.ч. и сам запос (Memo1) */ if (hostText->Text.IsEmpty() || userText->Text.IsEmpty() || passText->Text.IsEmpty() || dbText->Text.IsEmpty() || portText->Text.IsEmpty() || Memo1->Text.IsEmpty()) { MessageBox(this->Handle, "Не все поля заполнены!", "Ошибка!", MB_OK | MB_ICONERROR); return; } // Тут Вам все должно быть знакомо MYSQL mysql; MYSQL_ROW row; MYSQL_RES *res; MYSQL_FIELD *field; /* Объявляем массивы для работы */ char host[buf]; char user[buf]; char passwd[buf]; char db[buf]; char query[buf]; int port = portText->Text.ToInt(); int num_fields = 0; int num_rows = 0; /* Инициализируем имя хоста, пользователя, пароль и БД */ strcpy(host, hostText->Text.c_str()); strcpy(user, userText->Text.c_str()); strcpy(db, dbText->Text.c_str()); strcpy(passwd, passText->Text.c_str()); strcpy(query, Memo1->Text.c_str()); //*/ mysql_init(&mysql); if (!mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0)) { /* Пробуем подключиться, если кдето ошибка то сообщим об этом */ MessageBox(this->Handle, mysql_error(&mysql), "Error!", MB_OK | MB_ICONERROR); return; } if (mysql_query(&mysql, query) > 0) { /* Пробуе выполнить запрос, если запрос не верен то сообщаем об ошибке, Выведем ее и выходим */ MessageBox(this->Handle, mysql_error(&mysql), "Error!", MB_OK | MB_ICONERROR); return; } // Получаем результат res = mysql_store_result(&mysql); /* Устанавливаем кол-во строк в таблице и сохраняем кол-во строк */ StringGrid1->RowCount = num_rows = mysql_num_rows(res); /* Устанавливаем кол-во полей и сохраняем это кол-во столбцов */ StringGrid1->ColCount = num_fields = mysql_num_fields(res); StringGrid1->FixedRows = 1; // Фиксируем первую строку. for (int i = 0; i < num_fields; i++) // Выводим названия полей { field = mysql_fetch_field_direct(res, i); StringGrid1->Cells[i][0] = field->name;// В 1-ю строку
} for (int i = 1; i < num_rows; i++) // Вывод результата запроса { row = mysql_fetch_row(res); // Получаем строку for (int l = 0; l < num_fields; l++) StringGrid1->Cells[l][i] = row[l]; // Выводим строку по ячейкам } mysql_free_result(res); // Освобождаем память mysql_close(&mysql); // Закрываем соединение
(http://programmersforum.ru/showthread.php?t=59147)
Комментариев нет:
Отправить комментарий