Обсуждение статьи "Работа с СУБД MySQL из MQL5 (MQL4)" - страница 3

 

Спасибо за статью! Сколько решений не пробовал везде одно и то же, если Вас не затруднит посмотрите, пожалуйста, на лог, я ничего понять не могу....

MySQL сервер: 

  • Сервер: localhost via TCP/IP
  • Версия сервера: 5.6.10
  • Версия протокола: 10
  • Пользователь: root@localhost
  • MySQL-кодировка: UTF-8 Unicode (utf8) 
  • База InnoDB, UTF8-General-Ci

MT5 build 1035

OS: Win8.1 x64

Файлы:
log_.txt  19 kb
 

Приветствую.

У Вас операционка x64, Вы точно используете DLLки для 64-битной версии?

Они прикреплены в одном из постов обсуждении (mqlmysql_for_mql5_x64.zip 1264 kb)

В статье были библиотеки только для x86 операционных систем.

Кстати, а тестовые примеры из архива отрабатывают ? 

<<чуть позже>>

Смущает эта строка: Tester file added: libraries\MQLMySQL.dll. 89626 bytes loaded 

Оригинальный размер файла x64 MQLMySQL.dll = 89600 байт, а не 89626.

Какой антивирус у Вас? 

 

Привет.

Концепция нравится. Должна быть отличным подспорьем.

Но я столкнулся с некоторой проблемой. Я использую 64 бит, скачал их и начал с тестового скрипта, чтобы посмотреть, как это работает.

но происходит сбой в MySQLGetFieldAsxxxxx

2015.01.09 21:32:09.535 testsql(AUDNZD,H1) 000000013F81347A 488BF2 mov rsi, rdx
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813476 4883EC20 sub rsp, 0x20
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813475 57 push rdi
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 000000013F813470 4889742418 mov [rsp+0x18], rsi
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) Access violation at 0x000000013F8134B3 read to 0x0000000000000001
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) +++++++++++++0
2015.01.09 21:32:09.535 testsql (AUDNZD,H1) 2 row(s) selected.
2015.01.09 21:32:09.425 testsql (AUDNZD,H1) Connected
2015.01.09 21:31:18.135 testsql (AUDNZD,H1) x 0 y


Sorce:

#include <FXCM\PairsInfo.mqh>
#include <FXCM\MQLMySQL.mqh>

//--- входные параметры
input string   MySQLURL="yyyyyyyyyyyyyy";
input string   MySQLDB = "forex";
input string   MySQLParms = "tradeparms";
input string   MySQLUser="Ingvar";
input string   MySQLPW="xxxxxxxxxxxx";
input int      MySQLPort=3306;
input string   GroupID= "Groupxxx";

PairsInfo prms;

//+------------------------------------------------------------------+
//| Функция запуска программы сценария|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
  string SQLString = "";
  string Q;
  string C = ",";
  StringSetCharacter(Q,0,34);
  
  string query;
  int Cursor;
  int DB;
  int rows;
  
  DB = MySqlConnect(MySQLURL, MySQLUser, MySQLPW, MySQLDB, MySQLPort, "0", 0);
  if (DB == -1) 
    {
      Print ("Connection failed! Error: "+MySqlErrorDescription); 
      return;
    }

    Print ("Connected");
    
  // query = "Select * From tradeparms";
    
  // query = "Select * FROM tradeparms WHERE TradeType = 2";
    
    query = "SELECT Pair, TradeType, SetupID FROM tradeparms WHERE TradeType = 2 AND Pair = 'USDJPY'";
     
     
   Cursor = MySqlCursorOpen(DB,query);
   if(Cursor <  0)
    {
      Print("Cursor error");
      return;
    }


   string pair= "x";
   int tradetype = 0;
   string setupid = "y";
   
   rows = MySqlCursorRows(Cursor);
   Print (rows, " row(s) selected.");
   
   for(int i=0;i<rows;i++)
    {
     if (MySqlCursorFetchRow(Cursor))  
       {
        Print("+++++++++++++" + i);
    pair = MySqlGetFieldAsString(Cursor, 0);                    << crashes here.   
   // tradetype = MySqlGetFieldAsInt(Cursor,1);
   // setupid = MySqlGetFieldAsString(Cursor,2);
       }
     }  
      
   Print(pair + "  " + DoubleToString(tradetype,0) + "  " + setupid);
   
   MySqlCursorClose(Cursor);
 
  
 } 
 

Я откопал свой старый ноутбук с win32, установил на него 32-битную версию и скомпилировал тот же исходник с 32-битной библиотекой и includes.

Работает нормально. Проблема с 64-битной версией

 
ingvar_e:

Я откопал свой старый ноутбук с win32, установил на него 32-битную версию и скомпилировал тот же исходник с 32-битной библиотекой и includes.

Работает нормально. Проблема в 64-битной версии.

Хорошо, я проверю это.

Какая версия терминала? MT4/MT5? и номер сборки?

 
elugovoy:

Хорошо, я проверю это.

Какая версия терминала? MT4/MT5? и номер сборки?

Terminal MT5 Build 1035. Работает на W7 64 аварийно

Терминал MT5 Build 1035 Работает на XP 32 OK

Спасибо. Работаю над многокурсовым, мули-методом (вроде как) советника, который в настоящее время использует входной файл. Для гибкости при тестировании различных входных файлов я перехожу на MySQL

 
ingvar_e:

Terminal MT5 Build 1035. Работает на W7 64 аварийно

Terminal MT5 Build 1035 Работает на XP 32 OK

Спасибо. Работаю над советником с несколькими курсами, мули-методом (вроде как), который в настоящее время использует входной файл. Для гибкости при тестировании различных входных файлов я перехожу на MySQL.

Я тестировал его на x64 OS, MT5 build 1035. Вы абсолютно правы.

Я сделал несколько проверок и обнаружил, что данные, поступающие в DLL, работают нормально. Проблема заключается в получении типа данных STRING из функций DLL.

Также я протестировал свои собственные скрипты, скомпилированные с предыдущей сборкой MT5 x64 - все работает нормально.

Но после перекомпиляции с билдом 1035 тот же скрипт с той же DLL выдает такие ошибки.

В итоге я предполагаю, что проблема не в DLL или проекте MQLMySQL, а в компиляторе MT5 x64. Я открыл кейс в службе поддержки по этому вопросу.

Спасибо,

Евгений

 
ingvar_e:

Terminal MT5 Build 1035. Работает на W7 64 аварийно

Terminal MT5 Build 1035 Работает на XP 32 OK

Спасибо. Работаю над советником с несколькими курсами, мули-методом (вроде как), который в настоящее время использует входной файл. Для гибкости при тестировании различных входных файлов я перехожу на MySQL.

Просто для тестирования, вы можете использовать мои скрипты, включенные в дистрибутив.

Измените учетные данные базы данных в INI-файле, затем запустите скрипты.

Попробуйте перекомпилировать их и запустить снова.

Вы увидите, что при первом запуске они работают нормально, но после перекомпиляции они выдают те же ошибки, что и ваши.

Проблема в терминале/компиляторе MT5 x64 b1035

 
elugovoy:

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

Измените учетные данные базы данных в INI-файле, затем запустите скрипты.

Попробуйте перекомпилировать их и запустить снова.

Вы увидите, что при первом запуске они работают нормально, но после перекомпиляции они выдают те же ошибки, что и ваши.

Проблема в терминале/компиляторе MT5 x64 b1035

>Проблема в MT5 x64 b1035

Так что мы застряли?

Мой старый 32-битный ноутбук сегодня сдался. Полностью мертв.

Интересно, могу ли я установить 32-битный windows на 64-битную машину и поможет ли это? Или установить MT5/MQL5 32 бит на Windows 7 64 бит.

Позже:

Нашел вот это.

 
ingvar_e:

>Проблема в MT5 x64 b1035

Итак, мы застряли?

Мой старый 32-битный ноутбук сегодня сдался. Полностью мертв.

Интересно, могу ли я установить 32-битный windows на 64-битную машину и поможет ли это? Или установить MT5/MQL5 32 бит на Windows 7 64 бит.

Позже:

Нашел вот это.

  • Чтобы установить 32-битную версию в 64-битную операционную систему, необходимо запустить программу установки с ключом /32. Например, c:\>mt5setup.exe /32.
  • ,SYMBOL_TRADE_TICK_VALUE)

    возвращает 0;

    Возможно, это не очень хорошая идея запускать 32-битный MT5 на 64-битной машине. Есть и другие признаки неисправности. Следующая попытка - установить windows 32 на мой 64-битный компьютер.

    Вечно эти длинные обходные пути уводят далеко от основного курса :-(

    Похоже, мне придется отказаться от этого инструмента и перейти к основам MySQL. Слишком много хлопот с установкой новой windows XP и нет ключа W7.