Light Style© by Fisana

Перейти к содержимому


Инвестиционные фонды NordFx: профессиональное управление и прозрачность


NordFX

Фотография

Работа с Базами Данных - MySQL


  • Пожалуйста, авторизуйтесь, чтобы ответить
7 ответов в этой теме

#1 Aleks_Simple

Aleks_Simple

    записался

  • Пользователи ST test (off)
  • PipPip
  • 49 сообщений

Опубликовано 18 Декабрь 2010 - 09:22

Добрый день, в выше начатой теме "Работа с Базами Данных" освещается работа с сервером Баз Данных - FireBird, поэтому предлагаю выделить
в отдельную тему вопросы связанные с работой сервера Баз Данных MySQL, он так же бесплатен как и FireBird и если не использовать сложные
структуры взаимосвязей - достаточно быстр в обработке данных.
В дальнейшем будут рассмотрены следущте темы.
1) Сервер Баз данных MySQL
2) Инструменты для работы с сервром и управлением базами. - EMS MySQL
3) Компоненты Delphi для работы с MySQL

#2 Aleks_Simple

Aleks_Simple

    записался

  • Пользователи ST test (off)
  • PipPip
  • 49 сообщений

Опубликовано 29 Декабрь 2010 - 02:34

1) Установка сервера MySQL
1.1 Берем версию соответствующую вашей операционной системе здесь: Загрузить сервер
прикреплен файл установки сервера для Windows (x86, 32-bit) - наиболее используемая.

1.2 Для установки мы должны обладать правами администратора. Запускаем файл установки и следуем по шагам.
Установка и настройка (Linux) - Богомолов
Установка MySQL под Win9x/NT/2000
1.3 Читаем документацию MySQL Docs
1.4 Важные моменты настройки:Установка и администрирование сервера MySQL
1.4.1 Настройка привилегий и безопасности.
1.4.2 Создание собственной Базы Данных.

FAQ Ответы на часто задаваемые вопросы


Вложенный файл  mysql-essential-5.1.53-win32.rar   37,38 МБ   183 Скачано

Сообщение изменено: Aleks_Simple, 29 Декабрь 2010 - 03:02 .


#3 Aleks_Simple

Aleks_Simple

    записался

  • Пользователи ST test (off)
  • PipPip
  • 49 сообщений

Опубликовано 29 Декабрь 2010 - 03:51

2) EMS Manager 2005 for MySQL - это удобная графическая утилита для работы с Базами данным на сервере.


Инструкции по работе взяты с сайта: ссылка там же есть интересные статьи по MySQL
Вложенный файл  Работа с EMS SQL Manager - введение.rar   1,72 МБ   197 Скачано
Вложенный файл  Работа с EMS SQL Manager - таблицы.rar   975,32 КБ   217 Скачано

Сообщение изменено: Aleks_Simple, 04 Январь 2011 - 09:26 .


#4 Aleks_Simple

Aleks_Simple

    записался

  • Пользователи ST test (off)
  • PipPip
  • 49 сообщений

Опубликовано 16 Февраль 2011 - 09:42

Добрый день, некотрое время назад узнал, что Оракл приобретя права на MySQL в погоне за прибылью понемногу придушивает самые интересные вещи в этой СУБД.
Благо есть конкуренция и достойным продолжение бесплатной ветки MySQL стала СУБД MariaDB - основанная на коде MySQL и полностью совместимая на клиентском уровне и уровне файлов Базы Данных. Вот ссылка на страницу для скачивания http://askmonty.org/...ariaDB:Download
Я использовал MariaDB для Win32.
Главным приемуществом является развитие двигателя(engine) InnoDB для таблиц - этот двигатель поддерживает транзакции и блокировку на уровне записи,
является быстрым и надежным в отношении данных.
В следующей заметке расскажу об использовании эксперта - позволяющего сохранять тиковые данные по паре в БД MySQL используя библиотеку клиента MySQL.

#5 Aleks_Simple

Aleks_Simple

    записался

  • Пользователи ST test (off)
  • PipPip
  • 49 сообщений

Опубликовано 13 Март 2011 - 07:35

Хочу предложить вашему вниманию способ сохранения тиковых данных, поступающих в Ваш торговый терминал на платформе МТ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>)

Сообщение изменено: Aleks_Simple, 13 Март 2011 - 07:41 .


#6 Aleks_Simple

Aleks_Simple

    записался

  • Пользователи ST test (off)
  • PipPip
  • 49 сообщений

Опубликовано 13 Март 2011 - 07:43

Создание Базы Данных. Запускаем командную строку и
Переходим в папку
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 changed
MariaDB [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)

#7 Aleks_Simple

Aleks_Simple

    записался

  • Пользователи ST test (off)
  • PipPip
  • 49 сообщений

Опубликовано 13 Март 2011 - 07:52

Разберем код эксперта.

#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);

Сообщение изменено: Aleks_Simple, 13 Март 2011 - 07:58 .


#8 Aleks_Simple

Aleks_Simple

    записался

  • Пользователи ST test (off)
  • PipPip
  • 49 сообщений

Опубликовано 13 Март 2011 - 08:11

Заключение:
Полученная сиситема успешно справляется с поставленной задачей!
Если рассматривать данный пример в более широком смысле как технологию взаимодействия МТ4 и СУБД MySQL, то мы сталкиваеся с ограничением
связанным с отсутствием в MQL4 поддержки структур данных при работе с библиотеками. Пэтому мы вынуждены формировать SQL команду в виде текста
и передавать её на выполнение. Процесс получения каких либо данных из MySQL более труден и может быть решен созданием промежуточной библиотеки на одном
из языков программирования, напрмер Delphi, C++




Посетителей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных пользователей

Рейтинг брокеров форекс: кто лидер, кто аутсайдер и почему?




Masterforex-V NordFX

Rambler's Top100

Принимаем Z-Payment