Mod Подключаем MySql

Тема в разделе "Готовые работы", создана пользователем Garry599, 10 мар 2013.

  1. Garry599

    Garry599

    Регистрация:
    4 фев 2013
    Это небольшая библиотека позволяющая использовать базу данных MySql.
    К ней прилогается скрипт содержащий основную функцию для работы с БД и несколько примеров по созданию запросов в БД.

    Библиотека написана и протестирована с сервером MySql версии 5.1.53
    Собрана была не помну на какой ревизии но версия сервера 0504-EB.
    В архиве есть папка с исходником библиотеки.

    Инструкция по установке
    Копируем все три файла в папку ..\server\scripts
    Файл библиотеку libmySQL.dll кпируем так-же и в папку ..\\server (если у вас на этой машине не установлен MySql)
    Регистрируем MySqlConnect.fos в scripts.cfg
    Теперь можно начинать работать. :)

    Внимание!
    При создании таблици а так-же при написании скрипта, используйте кодировку cp1251 (cp1251_general_ci), в редакторах обычно это ANSI.

    Вложения:

    Ametist, Erwin, Tinki-vinki и 5 другим нравится это.
  2. Tab10id

    Tab10id

    Регистрация:
    21 окт 2012
    Рад что у кого-то руки дошли.
  3. MEXAHOTABOP

    MEXAHOTABOP

    Регистрация:
    22 окт 2012
    для чего тут windows.h? я не вижу ни одного использования к тому же это же убивает кроссплатформенность кода на корню
    почему тут так много левого кода и левых комментов?
    Garry599 нравится это.
  4. Garry599

    Garry599

    Регистрация:
    4 фев 2013
    Именно поэтому я выложил исходники. Я сам не волшебник а только учус. )) Спасибо, что подсказал. Завтра исправлю и выложу новую версию. Если будут ещё замечания, буду рад.

    P.S.
    Windows.h там остался случайно. Я просто сначала тестил код на консоли. а уже потом делал библиотеку.
  5. Garry599

    Garry599

    Регистрация:
    4 фев 2013
    Архив перезалил. Убрал из библиотеки лишний мусор. От windows.h избавиться не получилось. Оказалось, что я не просто так его оставил. Он нужен для компиляции libmaysql.h и без него один из заголовков подключеных в этом файле выдаёт кучу ошибок. пока-что кросплатформеной замены ему я ненашёл. Если найду то выложу новый вариант.
  6. MEXAHOTABOP

    MEXAHOTABOP

    Регистрация:
    22 окт 2012
    познакомить с #ifdef ?
    http://sourceforge.net/p/predef/wiki/OperatingSystems/
    или рассказать почему прагма для линковки не тру

    в любом случае я сомневаюсь что у человека который сам собирает mysql он ещё не установлен
  7. Garry599

    Garry599

    Регистрация:
    4 фев 2013
    В том то и дело, что я не собирал MySql. Я установил MySql и MySQL Connector C++ 1.1.2 и написал небольшую dll использую библиотеки MySql и MySql Connector - а. Что такое #ifdef я сам понял из кода fonline.h.
    Но выбрать все нужное для сборки из fonline_tla.h и fonline.h и избавиться от них мне довольно трудно. Потом я собрал её в таком виде и она нормально работает. А вылизать её доконца можно, но тут мне нехватает некоторых знаний.
  8. MEXAHOTABOP

    MEXAHOTABOP

    Регистрация:
    22 окт 2012
    ты меня верно не правильно понял
    некоторые компиляторы не поддерживают автолинковку через pragma comment например всеми любимый gcc/g++ который используется повсеместно для этих целей использует параметр -l так что используй ifdef для альтернативного варианта

    для фонлайна это не критично тк нормально работает только виндовский сервер но на будущие стоит учесть
    Garry599 нравится это.
  9. Garry599

    Garry599

    Регистрация:
    4 фев 2013
    Спасибо за совет. :)
  10. Finelai

    Finelai

    Регистрация:
    15 окт 2011
    Так когда будет рабочий вариант для СДК, чтобы каждый смог сделать нормальный безвайповый сервер со своим блекджэком и девушками вольного поведения?
  11. Garry599

    Garry599

    Регистрация:
    4 фев 2013
    Это уже нормальный готовый вариант. Он просто не кросплатформеный. Тоесть Если у тебя сервер фонлайна работает на linux, то библиотеку эту туда подключить будет сложнее.

    P.S.
    Если даже будут какие-либо улечшения и апдейты, вайп делать не придеться и даже код менять ненужно будет. Просто надо будет скачать новую версию MySqlConnect.dll и вставить в папку с заменой старой. В этом и заключаеття суть библиотеки, что её обновление не требует изменения кода программы.
  12. Garry599

    Garry599

    Регистрация:
    4 фев 2013
    ВНИМАНИЕ!!!
    Перезалил архив. Изменены dll и скрипт. Изменил кодировку на cp1251 в связи с тем, что фонлайн не воспринимает нармально utf-8 на русском языке.
  13. Gagarry

    Gagarry

    Регистрация:
    21 мар 2013
    А как у нас данные сохраняются? Также как в чистом TLA?
  14. Garry599

    Garry599

    Регистрация:
    4 фев 2013
    Не понял вопрос. Опишите пожалуйста точнее.
  15. MEXAHOTABOP

    MEXAHOTABOP

    Регистрация:
    22 окт 2012
    в современном сдк sql не используется
    Garry599 нравится это.
  16. Medvedev

    Medvedev

    Регистрация:
    17 сен 2014
    Такой вопросик. Говорят на ТЛА начали использовать библиотеку, а потом выпилили. Кто-нибудь обладает информацией о причинах? Просто не прижилась - это одно, а если глючит/уязвима - совсем другое.
  17. Tawaruuk

    Tawaruuk

    Регистрация:
    4 авг 2016
    Посмотри тут: http://fonline.ru/forum/threads/5229/
    Может он тебе подскажет чего полезного.
  18. Skycast

    Skycast

    Регистрация:
    5 ноя 2011
    Конкретно про эту сборку сказать не могу, но вообще mysql connector очень долгое время использовался на 2238 и присутствует в sdk 2238, я тоже в использовании mysql никаких проблем не замечал.
    Можно собрать свой коннектор хоть со свежей либой mariaDB, хоть PostgreSQL и тд. Корректность работы зависит только от вашего кода.
    Medvedev нравится это.
  19. Medvedev

    Medvedev

    Регистрация:
    17 сен 2014
    А все-таки почему не прижилось на ТЛА?
  20. LoadRunner

    LoadRunner supporter

    Регистрация:
    2 апр 2011
    Так сложилось исторически. Отказались от этого ещё до ОБТ3, если я верно помню.
  21. Ametist

    Ametist

    Регистрация:
    22 мар 2014
    У меня с cp1251 в обще не хотела работать! Делал как написано)
    В итоге поменял везде на utf8_general_ci. Только тогда все стало на родном Русском)
    Использую Notepad++ 6.9.2

    Пробовал выбирать:
    1) Кодировку Ansi
    2) Преобразовывать в Ansi
    3) Кодировка- windows 1251
    -и другие.... Никак не работало! Кракозябли)

    Проверял:
    1) Базу данных - кодировку
    2) Таблицу - кодировку
    3) Файл - кодировку

    Везде поменял на utf8 - сразу заработало и запись в базу и чтение прошли успешно в игре
    Последнее редактирование: 23 фев 2017
  22. Ametist

    Ametist

    Регистрация:
    22 мар 2014
    А в базе нельзя посмотреть - все закодировано и на cp1251 и на utf

    Через Hex редактор даже менял в MySqlConnect.dll cp1251 на utf, захожу в игру и как мне показалось - стали другие иероглифы в программе базе, а в игре также вcе работает

    Короче одна проблема осталась - это иероглифы в базе.
    Я даже и на cp1251 смог сделать, чтобы были иероглифы в базе, а в игре все нормально.


    ***Смотрю состояние базы через консоль и через Workbench
  23. Ametist

    Ametist

    Регистрация:
    22 мар 2014
    Проблема решена. Смог самостоятельно собрать библиотеку из cpp, везде проставив UTF8 и использую библиотеку mariadb_client-1.0.0-win32
    Оставлю кому надо
    mariadb-native-client - download
    MySqlConnect.cpp для mariadb client - download
    Последнее редактирование: 23 фев 2017
    Erwin и Tawaruuk нравится это.
  24. Ametist

    Ametist

    Регистрация:
    22 мар 2014
    Также забыл сказать - забыли упомянуть про mysql_close(conn); - т.к сервер не закрывает подключения к MySQL и в результате этого выходит ошибка превышения кол-ва подключений!(Mysql error 1040: Too many connections)
    Что приводит к остановке базы


    Также в самом скрипте, где нужно создавать запросы к базе, то пригодится:
    Код:
    	 
    for( uint i = 0, j = query2.length(); i < j; i++ )
    if( query2[ i ] == " " ) query2[ i ] = "";
    
    Это удаление пробела. Т.к оне мешает использовать StrToInt
    Последнее редактирование: 27 фев 2017
    Erwin нравится это.
  25. Erwin

    Erwin

    Регистрация:
    31 янв 2015
    А в чём вы создаёте dll? Я использовал Microsoft Visual Studio 2010 создавал проект С++, но у меня постоянно ошибки при компиляции
    Вот шапка кода. Видимо я делаю что-то не так
    Код:
    #include "G:/Game/Server/scripts/fonline_tla.h"
    #include "Windows.h"
    #include "C:/Program Files/MariaDB 5.5/include/mysql/mysql.h"
    #pragma comment (lib, "C:/Program Files/MariaDB 5.5/lib/libmysql.lib")
     
    // Extern data definition
    //_GlobalVars GlobalVars;
     
    // Entry point
    FONLINE_DLL_ENTRY( isCompiler )
    {
    	if( isCompiler )
    		return;
     
    	// Test Memory Level 3 for loaded DLLs
    	for( uint i = 0; i < 666; i++ )
    		volatile char* leak = new char[ 2 ];
    }
    Как правильно компилировать подскажите новичку в этом деле?
    А лучше скинте проект, чтоб я на примере посмотрел
    Последнее редактирование: 30 авг 2017
  26. Erwin

    Erwin

    Регистрация:
    31 янв 2015
    Всё, разобрался. Ошибка разработчиков. Microsoft Visual Studio 2010 не работает .NET 4.5.
    В Microsoft Visual Studio 2008 всё работает на ура
  27. Ametist

    Ametist

    Регистрация:
    22 мар 2014
    у меня 2010
    Код:
    @echo off
    @: Environment
    @set PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;%PATH%
    @set PATH=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN;%PATH%
    @set LIB=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\LIB;%LIB%
    @set LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Lib;%LIB%
    @set LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib;%LIB%
    @set LIB=.\StlPort;%LIB%
    @set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;%INCLUDE%
    @set INCLUDE=.\StlPort;%INCLUDE%
    @set INCLUDE=C:\Program Files (x86)\Windows Kits\8.1\Include\shared;%INCLUDE%
    @set INCLUDE=C:\Program Files (x86)\Windows Kits\8.0\Include\shared;%INCLUDE%
    @set INCLUDE=C:\Program Files (x86)\Windows Kits\8.1\Include\um;%INCLUDE%
    @set INCLUDE=C:\Program Files\MySQL\MySQL Server 5.1\include;%INCLUDE%
     
    @set INCLUDE=C:\Program Files\MySQL\Connector.C++ 1.1\include\cppconn;%INCLUDE%
    @set INCLUDE=C:\Program Files\MySQL\Connector.C++ 1.1\include;%INCLUDE%
     
    @set LIB=C:\Program Files\MySQL\Connector.C++ 1.1\lib\opt;%LIB%
     
    @set INCLUDE=C:\Program Files\MySQL\MySQL Connector.C 6.1\include;%INCLUDE%
     
    @set LIB=C:\Program Files\MySQL\MySQL Connector.C 6.1\lib;%LIB%
     
     
     
    @: Server
    @del "./MySqlConnect.dll"
    cl.exe /nologo /MT /W3 /O2 /Gd /D "__SERVER" /Fo"./MySqlConnect.obj" /FD /c "./MySqlConnect.cpp"
    link.exe /nologo /dll /incremental:no /machine:I386 "./MySqlConnect.obj" /out:"./MySqlConnect.dll"
     
    @pause

Поделиться этой страницей