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

 

Спасибо за этот новый подход! Я пробовал разные решения, но это пока выглядит лучше всего. Я сделал небольшое дополнение к вашей библиотеке, где я возвращаю количество полей для запроса SELECT, используя mysql_num_fields, чтобы я знал, сколько полей мне нужно обработать и вернуть на стороне MQL. Еще раз огромное спасибо за то, что собрали все это вместе, очень помогло!!!

Код MQL:

int fields = MySqlNumFields(cursor);
for (int j=0; j<fields;j++)
{
    data[j] = MySqlGetFieldAsString(cursor, j);
}
 
sokramm:

Спасибо за этот новый подход! Я пробовал разные решения, но это пока выглядит лучше всего. Я сделал небольшое дополнение к вашей библиотеке, где я возвращаю количество полей для запроса SELECT, используя mysql_num_fields, чтобы я знал, сколько полей мне нужно обработать и вернуть на стороне MQL. Еще раз огромное спасибо за то, что собрали все это вместе, очень помогло!!!

Спасибо за добрые слова. Это базовое решение, и оно поддерживает общую функциональность, которую я использую в реальности.

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

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

Удачи,

Евгений

 

Привет, друзья!

Если вам нравится это решение и вы пробуете его в реальных проектах (а не просто так), то у меня есть обновление.

Я начинаю писать новую статью о работе с различными базами данных, такими как MS SQL Server, MS Access, Oracle, IBM DB/2, PostgreSQL.

Решение должно быть надежным и простым в использовании, как это, но у меня нет времени на его завершение.

Поэтому, если вы хотите поддержать этот проект, вы можете отправить несколько $$ через paypal для меня: e.a.lugovoy@gmail.com.

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

Всем спасибо,

Евгений

 

Здравствуйте, ЕвгенийЛуговой~


Я хочу знать, почему ' MySqlGetFieldAsDouble(Cursor, 3);' не может записать свое значение в data[i]?


Print("data[i]",data[3]);--всегда вытесняет 0.0. в чем дело ? спасибо, сэр!



for (i=0; i<Rows; i++)
if (MySqlCursorFetchRow(Cursor))

{

double data[] ;

ArrayResize(data,Rows);

data[i]= MySqlGetFieldAsDouble(Cursor, 3);

Print("data[i]",data[3]);
}

Person - schema.org
  • schema.org
PropertyExpected TypeDescription Properties from Person The Global Location Number (GLN, sometimes also referred to as International Location Number or ILN) of the respective organization, person, or place. The GLN is a 13-digit number used to identify parties and physical locations. A count of a specific user interactions...
 
elugovoy:

Привет, друзья!

Если вам нравится это решение и вы пробуете его в реальных проектах (а не просто так), то у меня есть обновление.

Я начинаю писать новую статью о работе с различными базами данных, такими как MS SQL Server, MS Access, Oracle, IBM DB/2, PostgreSQL.

Решение должно быть надежным и простым в использовании, как это, но у меня нет времени на его завершение.

Поэтому, если вы хотите поддержать этот проект, вы можете отправить несколько $$ через paypal для меня: e.a.lugovoy@gmail.com.

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

Всем спасибо,

Евгений

в некоторых случаях, массив необходим - например, нам нужно сопоставить данные с определенной датой (тик) - это может быть связано с алгоритмом, который удобно сделать в массиве, чем MYSQL。 Можете ли вы дать мне помощь сэр? Спасибо большое~!
 
illman:

Здравствуйте, ЕвгенийЛуговой~

Я хочу знать, почему ' MySqlGetFieldAsDouble(Cursor, 3);' не может записать свое значение в data[i]?

Print("data[i]",data[3]);--всегда вытесняет 0.0. в чем дело ? спасибо, сэр!

for (i=0; i<Rows; i++)

if (MySqlCursorFetchRow(Cursor))

{

double data[] ;

ArrayResize(data,Rows);

data[i]= MySqlGetFieldAsDouble(Cursor, 3);

Print("data[i]",data[3]);
}

Вы пытаетесь определять массив каждый раз в цикле и выводить пустой элемент массива.

Попробуйте сделать это:

// Я полагаю, что Rows получает количество строк уже до этого обходного пути.
double data[];
ArrayResize(data, Rows);  

for (i=0; i<Rows; i++)
    {
     if (MySqlCursorFetchRow(Cursor))
        {
          data[i]= MySqlGetFieldAsDouble(Cursor, 3);
        }
    }

// здесь вы получите заполненный массив "data"
Print("data[",3,"]",data[3]);

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

Кстати, число 3 в MySqlGetFieldAsDouble(Cursor, 3); означает 4-й столбец в списке SELECT, потому что нумерация начинается с 0, т.е. SELECT Open, High, Low, Close FROM ... означает 0 - Open, 1 - High, 2 - Low и 3 - Close.

Надеюсь, это поможет.

С уважением,

Евгений

 
elugovoy:

Вы пытаетесь определить массив каждый раз в цикле и вывести пустой элемент массива.

Попробуйте сделать это:

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

Кстати, число 3 в MySqlGetFieldAsDouble(Cursor, 3); означает 4-й столбец в списке SELECT, потому что нумерация начинается с 0, т.е. SELECT Open, High, Low, Close FROM ... означает 0 - Open, 1 - High, 2 - Low и 3 - Close.

Надеюсь, это поможет.

С уважением,

Евгений

Спасибо за помощь сэр ,я решил свои проблемы о массиве。 Вы сделали хорошую работу на mysql-mql действительно~!

 
Для MetaTrader5 x64 используйте следующую библиотеку (прикреплена в обсуждении):
[Удален]  

Здравствуйте, elugovoy

Замечательная статья и отличные библиотеки.

Я пытаюсь использовать ваши примеры под MT5, но получаю эту ошибку:

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' is not 64-bit version

Вы запускаете MT5 под 32-битной средой?

Не могли бы вы помочь мне с этим?

Большое спасибо!

Кармин Марроне.

 
carmine.marrone:

Здравствуйте, elugovoy

Замечательная статья и отличные библиотеки.

Я пытаюсь использовать ваши примеры под MT5, но получаю эту ошибку:

2014.12.15 15:44:16.387 MySQL-001 'C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\libraries\MQLMySQL.dll' is not 64-bit version

Вы запускаете MT5 под 32-битной средой?

Не могли бы вы помочь мне с этим?

Большое спасибо!

Кармине Марроне.

Здравствуйте, Кармине

К обсуждению выше я приложил проект для x64, посмотрите и/или скачайте из этого поста.

Надеюсь, это поможет.

С уважением,

Евгений