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

 
Спасибо автору, я модифицировал этот проект локально, так что я могу использовать неанглийские слова, хранящиеся в кодовой странице MySQL DB в формате UTF8.
 
Amy Liu:
Спасибо автору, я модифицировал этот проект локально, так что я могу использовать неанглийские слова, хранящиеся в кодовой странице MySQL DB UTF8.

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

 

Привет всем!

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

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

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

Удачи всем с вашими проектами!


С наилучшими пожеланиями,

Евгений

 
dragossh:

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

Во-первых, спасибо, что нашли время для создания этого проекта.

Я уже несколько недель ищу, как импортировать/обновить все открытые/закрытые сделки с торгового счета в таблицу MySQL, по возможности в реальном времени. есть ли способ сделать это с помощью вашей библиотеки?

Заранее большое спасибо.

Драгос

Привет, Драгос!

Конечно, вы можете построить советник с использованием этой библиотеки для вставки данных в вашу базу данных Mysql и поддержания их в актуальном состоянии (близком к обновлению в реальном времени).

Обратите внимание, что закрытые ордера в MT4/5 доступны программно только тогда, когда они перечислены на вкладке History. Так, если вы установите фильтр в истории 3 последних дня - вам будут доступны только сделки, обработанные в этот период.

Это не зависит от данной библиотеки, это просто инфраструктура MQL-MT4.

С уважением,

Евгений

 

 Access violation read to 0x000003B0 in '\MQL4\libraries\MQLMySQL.dll'

не подскажете куда капать?

OS win 10, mariadb 5.5.59
 

Юджин,

Потрясающая работа, так как это было очень просто заставить работать.

Любопытно, пытались ли вы или кто-то еще здесь заставить это работать в тестере стратегий? Я развил скрипт на инди в живой среде и все в порядке, но не повезло интегрировать в среду бэктестинга.


br Джордж

 
Eugeniy Lugovoy:

Привет, Эми. Это здорово, у меня не было времени делать это самостоятельно. Так что, если вы не против, не могли бы вы поделиться источниками с сообществом?

Привет, Евгений,

Извините за поздний ответ. Вот что я сделал с вашим кодом. Я просто модифицировал одну функцию cMySqlGetRowField для использования MultiByteToWideChar. Оригинальный код прокомментирован для сравнения.

// возвращает строковое представление значения поля
// должен вызываться после MySqlCursorFetchRow()
// pCursorID - ИДЕНТИФИКАТОР КУРСОРА
// pField - номер поля из списка SELECT (начиная с 0) - 0,1,2 e.t.c.
MT4_EXPFUNC wchar_t* __stdcall cMySqlGetRowField(int pCursorID, unsigned int pField)
{
        SCOPE_LOCK_MUTEX(g_mutex.get());
        ClearCursorErrors(pCursorID);
        if ((pCursorID >= 0) && (pCursorID < MAX_CURSORS) && (Cursors[pCursorID].Id!=-1))
        {
                if ((pField >= 0) && (pField < mysql_num_fields(Cursors[pCursorID].RecordSet)))
                {
                        // 预算-缓冲区中宽字节的长度
                        int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, nullptr, 0);
                        if (unicodeLen<=1024)
                        {
                                // 开始向缓冲区转换字节
                                MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, Cursors[pCursorID].Value, unicodeLen);
                                return(Cursors[pCursorID].Value);
                        }
                        //sprintf_s(Cursors[pCursorID].Value, "%s", Cursors[pCursorID].CurrentRow[pField]);
                        //swprintf(Cursors[pCursorID].Value, 1024, L"%S", Cursors[pCursorID].CurrentRow[pField]);
                        //return (Cursors[pCursorID].Value);
                }
                else
                {
                        Cursors[pCursorID].CursorErrorNumber = -4;
            swprintf(Cursors[pCursorID].CursorErrorDescription, 32, L"Wrong number of field.\x00");
                }
        }
        else
        {
                CursorErrorNumber = -5;
                swprintf(CursorErrorDescription, 32, L"Wrong CURSOR identifier.\x00");
        }
        return (WideNull);
}
 

здравствуйте коллеги, такой вопрос:

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

Cursor #0 closing error:-5: Wrong CURSOR identifier.

в чем может быть проблема?

 
Dmitry Melnichenko:

здравствуйте коллеги, такой вопрос:

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

Cursor #0 closing error:-5: Wrong CURSOR identifier.

в чем может быть проблема?

попробуйте подключаться под другими реквизитами. То есть c другими login/pass для MySQL. То есть завести там ещё один логин с соотв.правами на базу.

и работать в транзакционном режиме. 


 
Maxim Kuznetsov:

попробуйте подключаться под другими реквизитами. То есть c другими login/pass для MySQL. То есть завести там ещё один логин с соотв.правами на базу.

и работать в транзакционном режиме. 


создал нового пользователя, пробовал подключится под его реквизитами, не помогло!