Вывод в консоль
Вывод таблиц в консоли. Интерфейс правда не супер, но для практики думаю хватит.
В коде есть комментарии.
Графический интерфейс
Очередная статья по взаимодействию с СУБД 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)
Комментариев нет:
Отправить комментарий