Ru-MaNGOS

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

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.05.2010, 18:40   #1
Hantet
Ученый
 
Аватар для Hantet
 
Регистрация: 07.03.2010
Адрес: Санкт-Петербург
Сообщений: 163
Сказал(а) спасибо: 124
Поблагодарили 111 раз(а) в 52 сообщениях
Hantet Скоро придёт к известностиHantet Скоро придёт к известности
Отправить сообщение для Hantet с помощью ICQ
Сообщение Работа с MySQL через c++

Весь день сижу перед монитором, пытаюсь подключиться к MySQL через c++. Файлы заголовков MySQL дистрибутива скопировал в проект, подключил (ошибок не выдаёт по этому поводу).

Воспользовался чьим-то кодом (на каком-то форуме человек нашёл решение и код якобы рабочий). Собственно я хочу всего-лишь вывести построчно логины аккаунтов с гмлвл > 0.

Во многих (опробованных мною) простейших реализациях подключения c++ к MySQL вылетает очень противная ошибка:


Я использую:
Microsoft Windows XP Professional SP3
Microsoft Visual Studio 2008 Professional Edition (rus).
MySQL 5.1.39-community

Собственно, код:
Код:
#include <stdafx.h>
#include <Winsock2.h>
#include <mstcpip.h>
#include <mysql.h>
#include <errmsg.h>

MYSQL mysql; 
MYSQL_RES *res; 
MYSQL_ROW row;

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

void main() 
{
	if(!(mysql_real_connect(&mysql,"localhost","mangos","mangos","realmd",3306,NULL,NULL))) 
		exiterr(1);
	if(mysql_select_db(&mysql,"realmd"))
		exiterr(2); 
	if(mysql_query(&mysql,"SELECT username FROM account WHERE gmlevel > 0")) 
		exiterr(3); 
	if(!(res = mysql_store_result(&mysql)))
		exiterr(4); 
	while((row=mysql_fetch_row(res)))
	{
		for(unsigned int 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); 
}
Помнится, на старом форуме была тема про коннектор, но мне бы хотелось обойтись без подобных реализаций.

Если у кого-то имеется рабочий пример - очень прошу поделиться.
P.s. Выкладывали когда-то давно программку RUDB, она подключалась к БД и заполняла таблицы locales_*. Если у кого имеется код - буду рад покопаться в нём.

Спасибо.
__________________
Галя: Вот почему когда я пуск делаю и по ярлыку две то запускается, а если вот мне к примеру надо не из пуска её то ничего и в красном показывает, а надо ведь чтобы квадратик жёлтенький открывал и там 3 кнопки должно быть?
admin: О Боже!
admin: Кто-нибудь, пришлите ко мне уборщицу, пусть мой мозг со стен и потолка отмоет

Последний раз редактировалось Hantet; 23.05.2010 в 18:44.
Hantet вне форума   Ответить с цитированием
Старый 23.05.2010, 19:04   #2
rayco
Гость
 
Сообщений: n/a
По умолчанию

Сам не программист и потому только предположение что это тебе поможет

how-to-connect-c-to-mysql
  Ответить с цитированием
Старый 23.05.2010, 19:39   #3
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

Цитата:
Сообщение от Hantet Посмотреть сообщение
Файлы заголовков MySQL дистрибутива скопировал в проект, подключил
Пропиши необходимые *.lib файлы в настройках компоновщика.
Кажется он называется libmysql.lib.
zergtmn вне форума   Ответить с цитированием
Старый 23.05.2010, 23:08   #4
Hantet
Ученый
 
Аватар для Hantet
 
Регистрация: 07.03.2010
Адрес: Санкт-Петербург
Сообщений: 163
Сказал(а) спасибо: 124
Поблагодарили 111 раз(а) в 52 сообщениях
Hantet Скоро придёт к известностиHantet Скоро придёт к известности
Отправить сообщение для Hantet с помощью ICQ
По умолчанию

Цитата:
Сообщение от zergtmn Посмотреть сообщение
Пропиши необходимые *.lib файлы в настройках компоновщика.
Кажется он называется libmysql.lib.
Благодарю, подключил libmysql.lib и теперь компиляция проходит без ошибок, однако при запуске самой программы вытетает сообщение, мол "Необработанное исключение mysql.exe ... ". Сразу в голову пришло - на машине, где компилируется программа для работы с MySQL должен быть установлен сам сервер? Видимо - это так (ну раз компилятор потребовал подать ему mysql.exe). Пополз скачивать и ставить дистрибутив MySQL, надеюсь поможет.


Upd:
Ан, нет.
Попробовал собрать на работающем сервере - один фиг.
Ссылается на _CrtIsValidHeapPointer
*ушёл вылизывать гугл*

__________________
Галя: Вот почему когда я пуск делаю и по ярлыку две то запускается, а если вот мне к примеру надо не из пуска её то ничего и в красном показывает, а надо ведь чтобы квадратик жёлтенький открывал и там 3 кнопки должно быть?
admin: О Боже!
admin: Кто-нибудь, пришлите ко мне уборщицу, пусть мой мозг со стен и потолка отмоет

Последний раз редактировалось Hantet; 23.05.2010 в 23:45.
Hantet вне форума   Ответить с цитированием
Старый 16.10.2010, 14:31   #5
Nordway
RMDC Donator
 
Регистрация: 07.03.2010
Адрес: Россия
Сообщений: 29
Сказал(а) спасибо: 16
Поблагодарили 18 раз(а) в 3 сообщениях
Nordway На верном пути
По умолчанию

Да простят меня за некропостинг, но мой вопрос не настолько велик чтобы выделять для него целую тему

Начал изучать работу MySQL с C++. Работаю в VS2008, использую Windows Forms Application.

на форме есть некий textBox1 и button1. При нажатии на баттон запускается SQL запрос в БД, что-то типо:
SELECT `username` FROM `account` WHERE `id` = '"+textBox1->Text+"'

Но т.к. в mysql_query 2-ой параметр должен быть в const char *q, то ничего не компилируется.

Подскажите как textBox1->Text превратить в const char * для того чтоб вставить в запрос?

Последний раз редактировалось Nordway; 16.10.2010 в 14:37.
Nordway вне форума   Ответить с цитированием
Старый 16.10.2010, 14:48   #6
Nordway
RMDC Donator
 
Регистрация: 07.03.2010
Адрес: Россия
Сообщений: 29
Сказал(а) спасибо: 16
Поблагодарили 18 раз(а) в 3 сообщениях
Nordway На верном пути
По умолчанию

Делал так:

Код:
using namespace System::Runtime::InteropServices;
...
String^ str = textBox1->Text;
IntPtr iptrstr = Marshal::StringToCoTaskMemAnsi(str);
const char* id = static_cast<const char*>(iptrstr.ToPointer());
...
...
Marshal::FreeCoTaskMem(iptrstr);
Ошибки:

Код:
1>c:\documents and settings\nordway\мои документы\visual studio 2008\projects\mysql\mysql\Form1.h(145) : error C2679: binary '+' : no operator found which takes a right-hand operand of type 'const char *' (or there is no acceptable conversion)
1>        could be 'built-in C++ operator+(volatile const System::Object ^, volatile const System::String ^)'
1>        or       'built-in C++ operator+(volatile const System::String ^, volatile const System::Object ^)'
1>        or       'built-in C++ operator+(volatile const System::String ^, volatile const System::String ^)'
1>        while trying to match the argument list '(System::String ^, const char *)'

P.S. Объедините в 1 пост, какой-то глюк с форумом был.
Nordway вне форума   Ответить с цитированием
Старый 16.10.2010, 15:00   #7
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

1. Это не чистый C++, по-другому со строкам работать надо.
2. В C++ конкатенация строк делается через strcat или так: std::string a; a + "asdasd";
3. System::String^ можно складывать, а заданные кавычками строки, которые автоматически делаются const char*, можно инициировать через S префикс: S"asdasd"
LordJZ вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Nordway (16.10.2010)
Старый 16.10.2010, 16:25   #8
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

У меня есть вопрос. Сделал подключение к MySQL на C#. Вот сделал я запрос, извлек его, описал структуру БД. А как перебирать темплейты, ибо ума хватило только запихнуть в цикл все, и извлекать запросы где ентри увеличивается на 1 за цикл. Сами понимаете это ужасно медленно. Работать конечно можно, но когда надо перебрать 40к запросов, то придется на день комп оставлять, на столько все медленно.

Последний раз редактировалось Lordronn; 16.10.2010 в 16:27.
Lordronn вне форума   Ответить с цитированием
Старый 16.10.2010, 16:46   #9
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Надо выгрузить результат запроса в коллекцию и не париться
__________________
Konctantin вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Lordronn (17.10.2010)
Старый 26.10.2010, 20:14   #10
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Крашит программу из-за такой причины: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Использую MySQL connector 6.3.5. Погуглил и выяснил, что такая проблема из-за того, что запрос не успевает пройти(у меня это селект большой таблици). Там советуют установить connection timeout побольше. Повышал его с 30 до 150 000.Повышал постепенно, но каждый раз программа крашилась. В консоли запрос проходит очень быстро.
Вот конфиг подключения, если нужен
const string connectionInfo =
Код:
("host=127.0.0.1;port='3306';database='mangos';UserName='root';Password='root';Connection Timeout='150000';");
Lordronn вне форума   Ответить с цитированием
Старый 26.10.2010, 20:32   #11
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

делал полный селект из таблиц го и кричеров, никаких проблем не было...
__________________
Konctantin вне форума   Ответить с цитированием
Старый 26.10.2010, 20:41   #12
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Крашит только при таком селекте

Код:
SELECT * FROM mangos.gameobject_template WHERE entry IN(SELECT entry FROM mangos.gameobject_template1)
Lordronn вне форума   Ответить с цитированием
Старый 26.10.2010, 20:52   #13
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

для таких целей делают соединения таблиц, а это извращение...
__________________
Konctantin вне форума   Ответить с цитированием
Старый 26.10.2010, 21:07   #14
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Код:
SELECT t1.*, t2.* FROM gameobject_template t1, gameobject_template1 t2 WHERE t1.entry = t2.entry LIMIT 1
Верно я понимаю, я могу воспользоваться 1 запросом, и тогда мне надо будет описать всего 1 таблицу?

Большое спасибо, запрос прошел за пару секунд. Больше не крашит!

Последний раз редактировалось Lordronn; 26.10.2010 в 21:13.
Lordronn вне форума   Ответить с цитированием
Старый 15.08.2012, 05:17   #15
Mayss
Ученый
 
Аватар для Mayss
 
Регистрация: 08.03.2010
Адрес: Россия, Сибирь, Новокузнецк
Сообщений: 137
Сказал(а) спасибо: 194
Поблагодарили 19 раз(а) в 13 сообщениях
Mayss На лучшее можно только надеяться...
Отправить сообщение для Mayss с помощью Skype™
По умолчанию

Столкнулся с проблемой, при компиляции проекта "клона mangos", выводит LINK : fatal error LNK1104: не удается открыть файл "libmysql.lib", не могу найти где прописывается путь к данному файлу или где он может быть подключен. Работаю в MVS2010.

Все нашел проблему...
Нужно было добавить недостающие библиотеки в Program Files\Microsoft Visual Studio 10.0\VC\lib

Последний раз редактировалось Mayss; 15.08.2012 в 05:42.
Mayss вне форума   Ответить с цитированием
Старый 15.08.2012, 09:51   #16
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Нужно было добавить путь к либам mysql в свойствах проекта
Amaru вне форума   Ответить с цитированием
Старый 02.10.2012, 22:37   #17
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Я в данный момент использую эти библиотеки! Тут нечего сложного нет! Компилирую в vc++2010...
__________________
sql-language.ru
lovepsone вне форума   Ответить с цитированием
Старый 01.04.2013, 10:06   #18
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

подключаю mysql.h
Код:
#include "include/mysql/mysql.h"
компилятор ругается на
Код:
typedef struct st_net {
#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY)
  Vio *vio;
  unsigned char *buff,*buff_end,*write_pos,*read_pos;
  my_socket fd;	
папку include/mysql скопировал в проект. и взял из исходников cmangos
Visible вне форума   Ответить с цитированием
Старый 02.04.2013, 17:02   #19
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

На сколько я помню класса my_socket там нет... Могу ошибаться. Где вы вообще взяли такой пример? Можно больше кода?
Вроде при создания соединения, mysql сам создает сокет... В Qt все проще...
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 03.04.2013 в 12:42.
lovepsone вне форума   Ответить с цитированием
Старый 02.04.2013, 17:18   #20
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от lovepsone Посмотреть сообщение
На сколько я помню класса my_socket там нет... Могу ошибаться. Где вы вообще взяли такой пример? Можно больше кода?
Вроде при создания соединения mysql сам создает сокет... В Qt все проще...
спасибо вам. Решил задачу таким образом
Код:
namespace _mysql{
typedef SOCKET,UINT_PTR;
#include "include/mysql.h"
}
и все работает. Да не отрицаю, в builder как то все непонятно подключается.
Visible вне форума   Ответить с цитированием
Старый 02.04.2013, 18:30   #21
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Лучше кидайте свой билдер и юзайте визуал студио...
__________________
sql-language.ru
lovepsone вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
partizanes (02.04.2013)
Старый 02.04.2013, 20:48   #22
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от lovepsone Посмотреть сообщение
Лучше кидайте свой билдер и юзайте визуал студио...
если бы я знал с++ как требует VS я б врятли задавался вопросом соединений mysql и моего приложения а так студия имеется, кроме консоли пока там ничего не освоил на студии сложнее что либо сделать, поэтому и юзаю билдер. Когда ниб в будущем, как мои знания о СИ улучшатся смогу и на VS сделать.
Visible вне форума   Ответить с цитированием
Старый 03.04.2013, 12:36   #23
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
если бы я знал с++ как требует VS я б врятли задавался вопросом соединений mysql и моего приложения а так студия имеется, кроме консоли пока там ничего не освоил на студии сложнее что либо сделать, поэтому и юзаю билдер. Когда ниб в будущем, как мои знания о СИ улучшатся смогу и на VS сделать.
Я начал изучать с++, а по конкретнее до этого пхп (делфи), далее на базе пхп изучал ООП, т.е. с пхп на с++ переход состоялся очень легко. Если вас консоль не устраивает, юзайте WIN API, MFC, Qt и тд. Поверьте с косоли все программисты начинали. А по мне так на студии намного легче...
А вообще можете почитать учебник http://ru-mangos.ru/showthread.php?t=6092 ... Он для новичка вроде вас, там найдете все что вам нужно.
__________________
sql-language.ru

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

Цитата:
Сообщение от lovepsone Посмотреть сообщение
Я начал изучать с++, а по конкретнее до этого пхп (делфи), далее на базе пхп изучал ООП, т.е. с пхп на с++ переход состоялся очень легко. Если вас консоль не устраивает, юзайте WIN API, MFC, Qt и тд. Поверьте с косоли все программисты начинали. А по мне так на студии намного легче...
А вообще можете почитать учебник http://ru-mangos.ru/showthread.php?t=6092 ... Он для новичка вроде вас, там найдете все что вам нужно.
Да есть такое, частично распечатанный, кстати, по нему и пытаюсь что нибудь сделать). Консоль нравится со времен моего первого опыта установить Mangos. У меня експресс студия 2012. Буду пробывать сделать в консоли на студии то, что получилось сделать в билдере.

Вот только что то немогу понять, возможно ли сделать нечто подобное?
Код:
TFileStream* fs = new TFileStream("имя_архива_на диске.zip", fmCreate|fmOpenWrite); //
IdHTTP1->Get("http://site.com/имя_архива_на_сервере.zip", fs);
delete fs;
но только через консоль на VSE

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

Цитата:
Сообщение от Visible Посмотреть сообщение
Вот только что то немогу понять, возможно ли сделать нечто подобное?
Код:
TFileStream* fs = new TFileStream("имя_архива_на диске.zip", fmCreate|fmOpenWrite); //
IdHTTP1->Get("http://site.com/имя_архива_на_сервере.zip", fs);
delete fs;
но только через консоль на VSE
Через библиотеки boost::asio, libcurl - и т.п. и т.д.
Evgeniy вне форума   Ответить с цитированием
Старый 03.04.2013, 18:38   #26
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

А чем не устраивает URLDownloadToFile? Зачем использовать всякие левые библиотеки для таких простых вещей?
TOM_RUS вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
partizanes (03.04.2013), Visible (03.04.2013)
Старый 03.04.2013, 19:06   #27
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
А чем не устраивает URLDownloadToFile? Зачем использовать всякие левые библиотеки для таких простых вещей?
подключил.
Код:
#include <urlmon.h>
#pragma comment (lib, "urlmon.lib")
Работает. А я уже начал скачивать библиотеки думаю мне пока до подключений библиотек рановато. Это бы освоить
но вот только 1 минус, прогресс загрузки невиден. Можно это хоть как то вывести?
Почитал документацию. но что то с IBindStatusCallback разобраться немогу. Качаю так:
Код:
URLDownloadToFile( 0, L"отсюда", L"сюда", 0, 0);

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

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
А чем не устраивает URLDownloadToFile? Зачем использовать всякие левые библиотеки для таких простых вещей?
Извиняюсь, мой уровень с++ стремится к 0.
Все хорошо пока не окажется, что необходимо использовать прокси(необязательно который прописан в системе), проверять время последней модификации файла, отправлять пост(гет) запросы или проходить авторизацию.
Evgeniy вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Visible (03.04.2013)
Старый 03.04.2013, 22:55   #29
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
но вот только 1 минус, прогресс загрузки невиден. Можно это хоть как то вывести?
Для этого можно использовать циклы с паузами и тд.. В консоль выводить черточки... Подумайте сами...К примеру попробуйте реализовать процесс загрузки/выгрузки как в консоли мангоса... А далее пойдет все само собой.А так же старайтесь оптимизировать свой код!
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 03.04.2013 в 22:58.
lovepsone вне форума   Ответить с цитированием
Старый 03.04.2013, 23:46   #30
partizanes
Пользователь
 
Аватар для partizanes
 
Регистрация: 15.03.2010
Адрес: Беларусь,Витебск
Сообщений: 93
Сказал(а) спасибо: 97
Поблагодарили 36 раз(а) в 11 сообщениях
partizanes На верном пути
Отправить сообщение для partizanes с помощью ICQ Отправить сообщение для partizanes с помощью Skype™
По умолчанию

Готовый класс на C# для примера
__________________
Когда-нибудь на оффе поставят Mangos...
partizanes вне форума   Ответить с цитированием
Старый 04.04.2013, 01:01   #31
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

На C# вообще задачу, поставленную в этом топике было бы проще решить...
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
lovepsone (04.04.2013)
Старый 04.04.2013, 04:02   #32
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от lovepsone Посмотреть сообщение
Для этого можно использовать циклы с паузами и тд.. В консоль выводить черточки... Подумайте сами...К примеру попробуйте реализовать процесс загрузки/выгрузки как в консоли мангоса... А далее пойдет все само собой.А так же старайтесь оптимизировать свой код!
в том то и дело что неполучается)
Visible вне форума   Ответить с цитированием
Старый 04.04.2013, 09:46   #33
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от Visible Посмотреть сообщение
в том то и дело что неполучается)
Через гугл можно все что угодно найти. А лучше спеки.
Найденый код в тырнете:
Код:
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <urlmon.h>
#pragma comment (lib, "urlmon.lib")

using namespace std;

bool downloading;

class DownloadStatus : public IBindStatusCallback
{
public:


	STDMETHOD(OnStartBinding)(
        /* [in] */ DWORD dwReserved,
        /* [in] */ IBinding __RPC_FAR *pib)
        { return E_NOTIMPL; }

    STDMETHOD(GetPriority)(
        /* [out] */ LONG __RPC_FAR *pnPriority)
        { return E_NOTIMPL; }

    STDMETHOD(OnLowResource)(
        /* [in] */ DWORD reserved)
        { return E_NOTIMPL; }

    STDMETHOD(OnProgress)(
        /* [in] */ ULONG ulProgress,
        /* [in] */ ULONG ulProgressMax,
        /* [in] */ ULONG ulStatusCode,
        /* [in] */ LPCWSTR wszStatusText){
         	cout << ulProgress << " " << ulProgressMax << endl;
		return S_OK;
        }

    STDMETHOD(OnStopBinding)(
        /* [in] */ HRESULT hresult,
        /* [unique][in] */ LPCWSTR szError)
        { return E_NOTIMPL; }

    STDMETHOD(GetBindInfo)(
        /* [out] */ DWORD __RPC_FAR *grfBINDF,
        /* [unique][out][in] */ BINDINFO __RPC_FAR *pbindinfo)
        { return E_NOTIMPL; }

    STDMETHOD(OnDataAvailable)(
        /* [in] */ DWORD grfBSCF,
        /* [in] */ DWORD dwSize,
        /* [in] */ FORMATETC __RPC_FAR *pformatetc,
        /* [in] */ STGMEDIUM __RPC_FAR *pstgmed)
        { return E_NOTIMPL; }

    STDMETHOD(OnObjectAvailable)(
        /* [in] */ REFIID riid,
        /* [iid_is][in] */ IUnknown __RPC_FAR *punk)
        { return E_NOTIMPL; }

    // IUnknown methods.  Note that IE never calls any of these methods, since
    // the caller owns the IBindStatusCallback interface, so the methods all
    // return zero/E_NOTIMPL.

    STDMETHOD_(ULONG,AddRef)()
        { return 0; }

    STDMETHOD_(ULONG,Release)()
        { return 0; }

    STDMETHOD(QueryInterface)(
    /* [in] */ REFIID riid,
    /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
        { return E_NOTIMPL; }
};


int main(int argc, char* argv[])
{
	int i;

	if(argc%2!=1 || argc<3)
		cout << "Error In Command Line" << endl;

	DownloadStatus ds;
	for(i=1;i<argc;i+=2)
	{
		cout << "\nDownloading " << argv[i] << " to " << argv[i+1];
		URLDownloadToFile(0,argv[i],argv[i+1],0,&ds);
	}
}
Evgeniy вне форума   Ответить с цитированием
Старый 04.04.2013, 11:24   #34
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
Код:
int main(int argc, char* argv[])
{
	int i;

	if(argc%2!=1 || argc<3)
		cout << "Error In Command Line" << endl;

	DownloadStatus ds;
	for(i=1;i<argc;i+=2)
	{
		cout << "\nDownloading " << argv[i] << " to " << argv[i+1];
		URLDownloadToFile(0,argv[i],argv[i+1],0,&ds);
	}
}
Спасибо, вот только немогу разобраться как в функции вывести получаю нечто такое, но компилятор ругается:

Код:
void my_function ()
{
		int i;

	if(argc%2!=1 || argc<3)
		cout << "Error In Command Line" << endl;

	DownloadStatus ds;
	for(i=1;i<argc;i+=2)
	{
		cout << "\nDownloading " << argv[i] << " to " << argv[i+1];
		URLDownloadToFile( 0, "откуда", "куда", 0, &ds);
	}
}

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

Цитата:
Сообщение от Visible Посмотреть сообщение
Спасибо, вот только немогу разобраться как в функции вывести получаю нечто такое, но компилятор ругается:

Код:
void my_function ()
{
		int i;

	if(argc%2!=1 || argc<3)
		cout << "Error In Command Line" << endl;

	DownloadStatus ds;
	for(i=1;i<argc;i+=2)
	{
		cout << "\nDownloading " << argv[i] << " to " << argv[i+1];
		URLDownloadToFile( 0, "откуда", "куда", 0, &ds);
	}
}
А аргументы у функции вообще присутствуют? Не забыл об argv ?
зы какой яп изучали до с++?
Evgeniy вне форума   Ответить с цитированием
Старый 04.04.2013, 11:43   #36
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
А аргументы у функции вообще присутствуют? Не забыл об argv ?
зы какой яп изучали до с++?
нет незабыл, просто незнаю как это будет правильно,

Код:
void my_function (int argc, char* argv[])
явно не то
Visible вне форума   Ответить с цитированием
Старый 04.04.2013, 11:54   #37
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Код:
void my_function (char* from, char* to)
{
  DownloadStatus ds;
  cout << "\nDownloading " << from << " to " << to;
  URLDownloadToFile( 0, from, to, 0, &ds);
}

int main(int argc, char* argv[])
{
	int i;

	if(argc%2!=1 || argc<3)
		cout << "Error In Command Line" << endl;

	for(i=1;i<argc;i+=2)
	{
                my_function(argv[i],argv[i+1]);
	}
}
Evgeniy вне форума   Ответить с цитированием
Старый 04.04.2013, 12:12   #38
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
По умолчанию

Цитата:
Сообщение от Evgeniy Посмотреть сообщение
Код:
void my_function (char* from, char* to)
{
  DownloadStatus ds;
  cout << "\nDownloading " << from << " to " << to;
  URLDownloadToFile( 0, from, to, 0, &ds);
}

int main(int argc, char* argv[])
{
	int i;

	if(argc%2!=1 || argc<3)
		cout << "Error In Command Line" << endl;

	for(i=1;i<argc;i+=2)
	{
                my_function(argv[i],argv[i+1]);
	}
}
все равно немогу разобраться, компилятор ругается. структура проекта

main.php

Код:
#include "function.h"

#include <locale>

void main()
{
	setlocale(LC_CTYPE, ".OCP");

	function();
}
function.cpp содержит функцию скачивания. (функция инициализируется не сразу)

Код:
void my_function (char* from, char* to)
{
  DownloadStatus ds;
  cout << "\nDownloading " << from << " to " << to;
  URLDownloadToFile( 0, "отсюда", L"сюда", 0, 0);
}
Visible вне форума   Ответить с цитированием
Старый 04.04.2013, 16:06   #39
Visible
Пользователь
 
Регистрация: 11.07.2010
Сообщений: 56
Сказал(а) спасибо: 16
Поблагодарили 0 раз(а) в 0 сообщениях
Visible На верном пути
Печаль

Создаю пустой проект (VSE 2012).
Копирую в проект папку mysql из исходников мангоса dep\include\mysql
копирую папку lib из dep\lib

создаю cpp

Код:
#include "mysql/my_global.h"
#include "mysql/mysql.h"

#define SERVER "localhost"
#define USER "username"
#define PASSWORD "password"
#define DATABASE "databasename"
 
int main()
{
    MYSQL *connect; // Create a pointer to the MySQL instance
    connect=mysql_init(NULL); // Initialise the instance
    /* This If is irrelevant and you don't need to show it. I kept it in for Fault Testing.*/
    if(!connect)    /* If instance didn't initialize say so and exit with fault.*/
    {
        fprintf(stderr,"MySQL Initialization Failed");
        return 1;
    }
    /* Now we will actually connect to the specific database.*/
 
    connect=mysql_real_connect(connect,SERVER,USER,PASSWORD,DATABASE,0,NULL,0);
    /* Following if statements are unneeded too, but it's worth it to show on your
    first app, so that if your database is empty or the query didn't return anything it
    will at least let you know that the connection to the mysql server was established. */
 
    if(connect){
        printf("Connection Succeeded\n");
    }
    else{
        printf("Connection Failed!\n");
    }
    MYSQL_RES *res_set; /* Create a pointer to recieve the return value.*/
    MYSQL_ROW row;  /* Assign variable for rows. */
    mysql_query(connect,"SELECT * FROM TABLE");
    /* Send a query to the database. */
    unsigned int i = 0; /* Create a counter for the rows */
 
    res_set = mysql_store_result(connect); /* Receive the result and store it in res_set */
 
    unsigned int numrows = mysql_num_rows(res_set); /* Create the count to print all rows */
 
    /* This while is to print all rows and not just the first row found, */
 
    while ((row = mysql_fetch_row(res_set)) != NULL){
        printf("%s\n",row[i] != NULL ?
        row[i] : "NULL"); /* Print the row data */
    }
    mysql_close(connect);   /* Close and shutdown */
    return 0;
}
Получаю ошибки:
Код:
	1	error C1083: Cannot open include file: 'config-win.h': No such file or directory	c:\\consoleapplication1\consoleapplication1\mysql\my_global.h	76	1	ConsoleApplication1
	2	IntelliSense: cannot open source file "config-win.h"	c:\\ConsoleApplication1\ConsoleApplication1\mysql\my_global.h	76	1	ConsoleApplication1
	3	IntelliSense: cannot open source file "my_attribute.h"	c:\\ConsoleApplication1\ConsoleApplication1\mysql\my_global.h	619	1	ConsoleApplication1
	4	IntelliSense: cannot open source file "my_dbug.h"	c:\\ConsoleApplication1\ConsoleApplication1\mysql\my_global.h	655	1	ConsoleApplication1
	5	IntelliSense: identifier "SOCKET_SIZE_TYPE" is undefined	c:\\ConsoleApplication1\ConsoleApplication1\mysql\my_global.h	694	9	ConsoleApplication1
	6	IntelliSense: #error directive: "please add -DSTACK_DIRECTION=1 or -1 to your CPPFLAGS"	c:\\ConsoleApplication1\ConsoleApplication1\mysql\my_global.h	819	2	ConsoleApplication1
	7	IntelliSense: #error directive: Neither int or long is of 4 bytes width	c:\\ConsoleApplication1\ConsoleApplication1\mysql\my_global.h	1004	2	ConsoleApplication1
	8	IntelliSense: identifier "off_t" is undefined	c:\\ConsoleApplication1\ConsoleApplication1\mysql\my_global.h	1074	9	ConsoleApplication1
	9	IntelliSense: invalid combination of type specifiers	c:\\ConsoleApplication1\ConsoleApplication1\mysql\my_global.h	1103	15	ConsoleApplication1
что то в последнее время ничего неполучается(
Visible вне форума   Ответить с цитированием
Старый 04.04.2013, 17:50   #40
lovepsone
Ученый
 
Регистрация: 07.03.2010
Адрес: Беларусь,Брест
Сообщений: 188
Сказал(а) спасибо: 131
Поблагодарили 34 раз(а) в 27 сообщениях
lovepsone Хрен знает что...lovepsone Хрен знает что...
По умолчанию

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

Для начала разберитесь с этой строкой:
Код:
error C1083: Cannot open include file: 'config-win.h'...
Тут вроде ясно все написано...
P.S. Хотя вы напоминаете мне себя, так же глупил.
__________________
sql-language.ru

Последний раз редактировалось lovepsone; 04.04.2013 в 17:54.
lovepsone вне форума   Ответить с цитированием
Ответ


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

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


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


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