Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Языки программирования

Важная информация

Языки программирования Изучаем С++, Sql, php, Lua, Python

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2013, 18:36   #41
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
Подмигивание

Цитата:
Сообщение от lovepsone Посмотреть сообщение
Либы вы в свойства проекта добавили? Пути к библиотекам указали? Вы сразу почитайте как соединять mysql++ к vc++, а потом задавайте вопросы...Тем более в ошибках всегда кроется ответ.

Для начала разберитесь с этой строкой:
Код:
error C1083: Cannot open include file: 'config-win.h'...
Тут вроде ясно все написано...
P.S. Хотя вы напоминаете мне себя, так же глупил.
Уже разобрался. не либы были, брал "стандартные" из мангоса mysql include и lib. Вроде щас срабатывает.
Кому интересно, у меня получилось так:
Код:
#pragma comment(lib,"lib/win32_release/libmysql.lib")

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "mysql/mysql.h"

MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;

void exiterr (int exitcode) {
fprintf(stderr, "%s\n", mysql_error(&mysql));
exit(exitcode);
}

int main () {
unsigned int i = 0;

mysql_init(&mysql);

if (!mysql_real_connect(&mysql, "localhost", "root", "", "test", 0, NULL, 0)) exiterr(1);
if (mysql_query(&mysql, "SELECT name,rate FROM emp_master")) exiterr(3);
if (!(res = mysql_store_result(&mysql))) exiterr(4);

while((row = mysql_fetch_row(res)))
for (i=0 ; i < mysql_num_fields(res); i++)
printf("%s\n", row[i]);

if (!mysql_eof(res)) exiterr(5);

mysql_free_result(res);
mysql_close(&mysql);

return 0;
}
Портативный код, работает без дополнительных настроек проекта.

Но есть одно но:
Код:
void exiterr (int exitcode) {
fprintf(stderr, "%s\n", mysql_error(&mysql));
exit(exitcode);
}
при ошибках mysql будь то соединения или отсутствия бд, программа закрывается. К сожелению я не знаю, как сделать так чтобы после вывода ошибки программа останавливалась, и после нажатия на клавишу, продолжила свою работу

Последний раз редактировалось Visible; 04.04.2013 в 19:44. Причина: ошибки
Visible вне форума   Ответить с цитированием
Старый 05.04.2013, 15:07   #42
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Немогу понять, почему не работает функция if. Верней работает, но программа крэшится. Пример:
Код:
if (!mysql_query(&mysql, "CREATE DATABASE `mangos` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")) 
	{
		cout << "Создал..." << endl;
	}
	else 
	{
		cout << "не Создал..." << endl;
	}
Visible вне форума   Ответить с цитированием
Старый 05.04.2013, 15:34   #43
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
Немогу понять, почему не работает функция if. Верней работает, но программа крэшится. Пример:
Код:
if (!mysql_query(&mysql, "CREATE DATABASE `mangos` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")) 
	{
		cout << "Создал..." << endl;
	}
	else 
	{
		cout << "не Создал..." << endl;
	}
Надо полный листинг. Кусок кода нафиг никому не нужен.
Код:
if (!mysql_query(mysql, "CREATE DATABASE mangos DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")) 
	{
		cout << "Создал..." << endl;
	}
	else 
	{
		cout << "не Создал..." << endl;
	}
Evgeniy вне форума   Ответить с цитированием
Старый 05.04.2013, 15:40   #44
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение

Но есть одно но:
Код:
void exiterr (int exitcode) {
fprintf(stderr, "%s\n", mysql_error(&mysql));
exit(exitcode);
}
при ошибках mysql будь то соединения или отсутствия бд, программа закрывается. К сожелению я не знаю, как сделать так чтобы после вывода ошибки программа останавливалась, и после нажатия на клавишу, продолжила свою работу

Код:
exit(exitcode); // подумайте что эта функция делает
А желательно если хотите получить ответ, то выкладывайте не обрывки...

Вы при отправки запроса к mysql используете ссылку на него, а надо прямо.
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 05.04.2013 в 15:43.
lovepsone вне форума   Ответить с цитированием
Старый 05.04.2013, 19:23   #45
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от lovepsone Посмотреть сообщение
Код:
exit(exitcode); // подумайте что эта функция делает
А желательно если хотите получить ответ, то выкладывайте не обрывки...

Вы при отправки запроса к mysql используете ссылку на него, а надо прямо.
Спасибо.
Visible вне форума   Ответить с цитированием
Старый 08.04.2013, 07:43   #46
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
Вопрос

Пытаюсь сделать функцию импорта файла в таблицу, и немного запутался...читаем файл и импортируем file.sql в бд функой
Код:
void my_function ()
{

   fstream file("file.sql",ios::in);
   string text_str;
 
   if(!file)
   {
      cout<<"не открылось.";
      system("pause");
      exit(1);
   }
 
   while(getline(file,text_str))
   {

	mysql_init(&mysql);

	if (!mysql_real_connect(&mysql, "localhost", "root", "root", "test", 0, NULL, 0)) 
	{
		mysql_close(&mysql);
		cout << "Не смог соедениться." << endl;
		system("PAUSE");
	}
	else 
	{
	   		if (!mysql_query(&mysql, "text_str")) {} 
			else
			{
				cout << "неполучилось импортировать строчку" << endl;
			}
      
   }
		mysql_close(&mysql);

	
	}
 

}
Visible вне форума   Ответить с цитированием
Старый 08.04.2013, 08:47   #47
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
Пытаюсь сделать функцию импорта файла в таблицу, и немного запутался...читаем файл и импортируем file.sql в бд функой
Код:
void my_function ()
{

   fstream file("file.sql",ios::in);
   string text_str;
 
   if(!file)
   {
      cout<<"не открылось.";
      system("pause");
      exit(1);
   }
 
   while(getline(file,text_str))
   {

	mysql_init(&mysql);

	if (!mysql_real_connect(&mysql, "localhost", "root", "root", "test", 0, NULL, 0)) 
	{
		mysql_close(&mysql);
		cout << "Не смог соедениться." << endl;
		system("PAUSE");
	}
	else 
	{
	   		if (!mysql_query(&mysql, "text_str")) {} 
			else
			{
				cout << "неполучилось импортировать строчку" << endl;
			}
      
   }
		mysql_close(&mysql);

	
	}
 

}
Ты что прикалываешься?mysql_init и mysql_real_connect вынеси из цикла. В дампе обычно есть комментарии и пустые строки, их не стоит передавать мускулю.
Evgeniy вне форума   Ответить с цитированием
Старый 08.04.2013, 10:54   #48
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
Вопрос

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
Ты что прикалываешься?mysql_init и mysql_real_connect вынеси из цикла. В дампе обычно есть комментарии и пустые строки, их не стоит передавать мускулю.
Сори, недоглядел. Я только начинаю изучать с++. а как можно обработать файл и не передавать Коментарии и пустые строки? функция передает в mysql_query строку, что не есть правильно. Например:

Код:
CREATE TABLE `realmlist` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL DEFAULT '',
  `address` varchar(255) NOT NULL DEFAULT '127.0.0.1',
  `localAddress` varchar(255) NOT NULL DEFAULT '127.0.0.1',
  `localSubnetMask` varchar(255) NOT NULL DEFAULT '255.255.255.0',
  `port` smallint(5) unsigned NOT NULL DEFAULT '8085',
  `icon` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `flag` tinyint(3) unsigned NOT NULL DEFAULT '2',
  `timezone` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `allowedSecurityLevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `population` float unsigned NOT NULL DEFAULT '0',
  `gamebuild` int(10) unsigned NOT NULL DEFAULT '15595',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='Realm System';

Последний раз редактировалось Visible; 08.04.2013 в 11:17.
Visible вне форума   Ответить с цитированием
Старый 08.04.2013, 12:22   #49
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
Сори, недоглядел. Я только начинаю изучать с++. а как можно обработать файл и не передавать Коментарии и пустые строки? функция передает в mysql_query строку, что не есть правильно.
Читай строки и склеивай их пока не попадется точка с запятой ;
Evgeniy вне форума   Ответить с цитированием
Старый 08.04.2013, 13:41   #50
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Код:
getline(file,text_str, ';')
в любом случае код не работает. пусть там была бы 1 строка, к примеру такая:
Код:
DROP TABLE IF EXISTS `account`;
Drop таблицы не происходит. в чем проблема непойму.
cout<<text_str<<" "; выводит как надо.
Visible вне форума   Ответить с цитированием
Старый 09.04.2013, 16:25   #51
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

никто не знает почему так? mysql сообщает об ошибке
Код:
if (!mysql_query(&mysql, "text_str"))
считанная строка не передается(
Visible вне форума   Ответить с цитированием
Старый 09.04.2013, 16:39   #52
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Код:
if (!mysql_query(&mysql, text_str.c_str())) {} 
			else
			{
				cout << "неполучилось импортировать строчку" << endl;
			}
Evgeniy вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Visible (10.04.2013)
Старый 09.04.2013, 17:53   #53
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
никто не знает почему так? mysql сообщает об ошибке
Код:
if (!mysql_query(&mysql, "text_str"))
считанная строка не передается(
Попробуйте считывать строки и записывать их в тип string... То есть:
Код:
std::string buf;

...
/*соеденение с мускулом*/
...

while(/*пока не будет конец файла либо до точки с запятой (условие придется вставлять в нутри цикла)*/)
{
  buf.append(/*считываемая строка*/);
  /* может метод не совсем подойдет,  то попробуйте следующее*/
 // buf += /*ваша строка до символа ";"*/;
}

// ну а далее сам запрос
...
P.S. Старайтесь саму свою проблему решить, если не получается то только тогда пишите на форум... А то за последенее время постов на вас темпура не одобрит )))
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 09.04.2013 в 19:18.
lovepsone вне форума   Ответить с цитированием
Старый 10.04.2013, 09:41   #54
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от lovepsone Посмотреть сообщение
Попробуйте считывать строки и записывать их в тип string... То есть:
Код:
std::string buf;

...
/*соеденение с мускулом*/
...

while(/*пока не будет конец файла либо до точки с запятой (условие придется вставлять в нутри цикла)*/)
{
  buf.append(/*считываемая строка*/);
  /* может метод не совсем подойдет,  то попробуйте следующее*/
 // buf += /*ваша строка до символа ";"*/;
}

// ну а далее сам запрос
...
P.S. Старайтесь саму свою проблему решить, если не получается то только тогда пишите на форум... А то за последенее время постов на вас темпура не одобрит )))
Спасибо, но я что то не совсем разобрался с этим кодом)) переменная вроде теперь передается, но выполняется только первый запрос из mysql, на последующих
Код:
MySQL server has gone away
непонятно почему так. Буду стараться научиться склеивать строки и обрабатывать строчки с комментариями и найти ответ на возникшие трудности.
Вариант передачи параметра предложенный Evgeniy работает. Большое спасибо.
Visible вне форума   Ответить с цитированием
Старый 10.04.2013, 10:38   #55
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Код:
mysql_close(&mysql);
убрать из цикла и поставить в конец
Evgeniy вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Visible (10.04.2013)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с DataLife Engine Праведник WWW 70 07.11.2011 15:59
ошибка mysql lovepsone Флудильня 8 14.12.2010 22:13
работа с базой characters извне Energy Флудильня 15 31.08.2010 19:10
Работа с Mangos Vampirenok Корзина 2 29.08.2010 05:00
ScriptDev2 Работа с ГО. xmolex Прочая документация 9 04.08.2010 06:59


Текущее время: 05:21. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot