Aleks_Simple Опубликовано 18 декабря, 2010 Жалоба Поделиться Опубликовано 18 декабря, 2010 Добрый день, в выше начатой теме "Работа с Базами Данных" освещается работа с сервером Баз Данных - FireBird, поэтому предлагаю выделить в отдельную тему вопросы связанные с работой сервера Баз Данных MySQL, он так же бесплатен как и FireBird и если не использовать сложные структуры взаимосвязей - достаточно быстр в обработке данных. В дальнейшем будут рассмотрены следущте темы.1) Сервер Баз данных MySQL2) Инструменты для работы с сервром и управлением базами. - EMS MySQL3) Компоненты Delphi для работы с MySQL Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleks_Simple Опубликовано 29 декабря, 2010 Автор Жалоба Поделиться Опубликовано 29 декабря, 2010 (изменено) 1) Установка сервера MySQL1.1 Берем версию соответствующую вашей операционной системе здесь: Загрузить сервер прикреплен файл установки сервера для Windows (x86, 32-bit) - наиболее используемая. 1.2 Для установки мы должны обладать правами администратора. Запускаем файл установки и следуем по шагам.Установка и настройка (Linux) - Богомолов Установка MySQL под Win9x/NT/20001.3 Читаем документацию MySQL Docs1.4 Важные моменты настройки:Установка и администрирование сервера MySQL 1.4.1 Настройка привилегий и безопасности.1.4.2 Создание собственной Базы Данных. FAQ Ответы на часто задаваемые вопросы mysql-essential-5.1.53-win32.rar Изменено 29 декабря, 2010 пользователем Aleks_Simple Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleks_Simple Опубликовано 29 декабря, 2010 Автор Жалоба Поделиться Опубликовано 29 декабря, 2010 (изменено) 2) EMS Manager 2005 for MySQL - это удобная графическая утилита для работы с Базами данным на сервере. Инструкции по работе взяты с сайта: ссылка там же есть интересные статьи по MySQLРабота с EMS SQL Manager - введение.rarРабота с EMS SQL Manager - таблицы.rar Изменено 4 января, 2011 пользователем Aleks_Simple Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleks_Simple Опубликовано 16 февраля, 2011 Автор Жалоба Поделиться Опубликовано 16 февраля, 2011 Добрый день, некотрое время назад узнал, что Оракл приобретя права на MySQL в погоне за прибылью понемногу придушивает самые интересные вещи в этой СУБД.Благо есть конкуренция и достойным продолжение бесплатной ветки MySQL стала СУБД MariaDB - основанная на коде MySQL и полностью совместимая на клиентском уровне и уровне файлов Базы Данных. Вот ссылка на страницу для скачивания http://askmonty.org/wiki/MariaDB:DownloadЯ использовал MariaDB для Win32.Главным приемуществом является развитие двигателя(engine) InnoDB для таблиц - этот двигатель поддерживает транзакции и блокировку на уровне записи,является быстрым и надежным в отношении данных.В следующей заметке расскажу об использовании эксперта - позволяющего сохранять тиковые данные по паре в БД MySQL используя библиотеку клиента MySQL. Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleks_Simple Опубликовано 13 марта, 2011 Автор Жалоба Поделиться Опубликовано 13 марта, 2011 (изменено) Хочу предложить вашему вниманию способ сохранения тиковых данных, поступающих в Ваш торговый терминал на платформе МТ4, в СУБД MySQL.Для этого нам понадобится 1. установленная СУБД MySQL.2. Созданная БазаДанных, в которой будет сохраняться информация.3. Эксперт на языке MQL4, который будет выполнять сохранение данных, с использованием Клиентской библиотеки libmysql.dll Надеюсь с установкой проблем у вас не возникнет, рекомендую использовать MariaDB для Win32.На создании Базы Данных остановлюсь подробнее ниже. А про Эксперт расскажу пока вкратце, он найден мной на форуме http://codebase.mql4.com/ru/491 и написан неким Автор: Collector (20.07.2006 12:14)Заинтерисовал меня своей простотой и тем, что взаимодействие ведется через DLL. Первый вопрос, который у меня возник почему это именно эксперт - ведъ это не совсем удобно, можно повесить только лишь один эксперт на график.Как выяснил позже сохранять тики может только эксперт т.к. только эксперт запускается при поcтуплении каждого нового тика и этот тик можно получить через переменные Ask и Bid. В отличие от эксперта - Индикатор запускается с каждым новым тиком, но из него не доступны тиковые переменные.Для работы эксперта необходимо разрешить Импорт DLL в настройках Советников и разместить библиотеку(libmysql.dll) в папаке experts\libraries , которая идет в составе СУБД обычно в папке bin (C:\Program Files\MariaDB 5.2.4\bin>) Изменено 13 марта, 2011 пользователем Aleks_Simple Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleks_Simple Опубликовано 13 марта, 2011 Автор Жалоба Поделиться Опубликовано 13 марта, 2011 Создание Базы Данных. Запускаем командную строку и Переходим в папку cd C:\Program Files\MariaDB 5.2.4\bin вводим команду(которая запускает SQL клиента по работе с СУБД):mysql -u root -p далее вводим пароль для пользователя root, который мы указывали ранее при установкеили ничего не вводим в качестве пароля, если он не был задан. И получаем приглашения для ввода команд SQL.MariaDB [(none)]> После успешного подключения вводим команду, которая создает Базу Данных. create database whc_ticks character set = latin1; получаем:Query OK, 1 row affected (0.02 sec) Далее задействуем созданную Базу:use whc_ticks; получаем:Database changedMariaDB [whc_ticks]> Теперь создаем таблицу в которой и будут храниться Тики. CREATE TABLE `ticks` ( `dt` datetime DEFAULT NULL, `ask` float(8,5) DEFAULT NULL, `bid` float(8,5) DEFAULT NULL, `symbol` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1; Получаем:Query OK, 0 rows affected (0.22 sec) Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleks_Simple Опубликовано 13 марта, 2011 Автор Жалоба Поделиться Опубликовано 13 марта, 2011 (изменено) Разберем код эксперта. #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #import "libmysql.dll" int mysql_init(int db); int mysql_errno(int TMYSQL); int mysql_real_connect(int TMYSQL, string host, string user, string password, string DB,int port,int socket,int clientflag); int mysql_real_query(int TMSQL, string query, int length); void mysql_close(int TMSQL); #import Секция импорта указывает, что из файла библиотеки libmySQL.dll мы импортируем нужные нам функции. int mysql; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { mysql = mysql_init(mysql); if(mysql != 0) Print("allocated"); string host = "localhost"; string user = "root"; string password = ""; string DB = "WHC_tics"; int clientflag = 0; int port = 3306; string socket = ""; int res = mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag); int err = GetLastError(); if(res == mysql) Print("connected"); else Print("error=", mysql, " ", mysql_errno(mysql), " "); return(0); } Секция инициализации выполняется единожды при загрузке Эксперта.Здесь мы инициализируем работу с СУБД- mysql_init(mysql);и устанавливаем подключение используя заданные параметры- mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag); //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { mysql_close(mysql); //---- return(0); } Эта секция выполняется при выгрузке Эксперта, здесь мы закрываем соединение с СУБД. //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { string query = ""; int length = 0; query = StringConcatenate("insert into ticks(dt,ask,bid,symbol) values( \"", TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS), "\",", NormalizeDouble(Ask, 5), ",", NormalizeDouble(Bid, 5), ",\"", Symbol(), "\");"); length = StringLen(query); mysql_real_query(mysql, query, length); int myerr = mysql_errno(mysql); if(myerr > 0) Print("error=",myerr); }Эта секция выполняется при получении нового тика:Подготавливаем строку запроса:query = StringConcatenate("insert into ticks(dt,ask,bid,symbol) values( \"", TimeToStr(CurTime(), TIME_DATE|TIME_SECONDS), "\",", NormalizeDouble(Ask, 5), ",", NormalizeDouble(Bid, 5), ",\"", Symbol(), "\");");length = StringLen(query); и выполняем запрос:mysql_real_query(mysql, query, length);анализируем полученный результат: int myerr = mysql_errno(mysql); if(myerr > 0) Print("error=",myerr); Изменено 13 марта, 2011 пользователем Aleks_Simple Ссылка на комментарий Поделиться на другие сайты Поделиться
Aleks_Simple Опубликовано 13 марта, 2011 Автор Жалоба Поделиться Опубликовано 13 марта, 2011 Заключение:Полученная сиситема успешно справляется с поставленной задачей!Если рассматривать данный пример в более широком смысле как технологию взаимодействия МТ4 и СУБД MySQL, то мы сталкиваеся с ограничениемсвязанным с отсутствием в MQL4 поддержки структур данных при работе с библиотеками. Пэтому мы вынуждены формировать SQL команду в виде текстаи передавать её на выполнение. Процесс получения каких либо данных из MySQL более труден и может быть решен созданием промежуточной библиотеки на одном из языков программирования, напрмер Delphi, C++ Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения