Скорее всего проблема в неверном использовании функции, которая вызывается у вас в этом случае. Ошибка 2006 возвращается исправно.
Еще раз, есть бот который на прямую работает с БД MySQL, через libmysql.dll, билд терминала 574, т.е. тот самый что уже требует корректной работы с функциями работающими со строками.
И так, сам бот работает корректно, но если я останавливаю работу MySQL сервера, бот вываливается с ошибкой Access violation read 0х00000ННН libmysql.dll, после чего сам бот так же перестает работать, потому что произошло исключение внутри длл-ки.
Вопрос:
1. Есть конструкции MQL4 позволяющие корректно обрабатывать ошибки вызванные в длл-ке?
2. Если кто-то сталкивался с такой же проблемой, какие еще есть решения кроме обработки исключений(если таковые имеются в MQL4 ) ?
Просьба, не просто писать то что Вам пришло первое в голову, а хотя бы адекватные ответы.
Заранее спасибо!
1. Есть конструкции MQL4 позволяющие корректно обрабатывать ошибки вызванные в длл-ке?
Нет.
2. Если кто-то сталкивался с такой же проблемой, какие еще есть решения кроме обработки исключений(если таковые имеются в MQL4 ) ?
Писать нормальный правильный код.
Нет.
Писать нормальный правильный код.
Можете сказать где в этом коде не верность? Выше описанная ситуация имеет место происходить в этом коде.
Буду признателен за помощь!!!
#import "libmysql.dll" int mysql_init(int db); int mysql_errno(int dbConnectId); int mysql_real_connect( int dbConnectId,uchar &host[],uchar &user[],uchar &password[], uchar &DB[],int port,uchar &socket[],int clientflag); int mysql_real_query(int dbConnectId,uchar &query,int length); void mysql_close(int dbConnectId); int mysql_store_result(int dbConnectId); int mysql_fetch_row(int result); int mysql_fetch_lengths(int result); int mysql_num_rows(int result); int mysql_num_fields (int result); int mysql_field_count(int dbConnectId); int mysql_affected_rows(int dbConnectId); void mysql_free_result(int result); int mysql_query(int dbConnectId, uchar &query[]); int mysql_error(int dbConnectId); #import
bool ShowErrors = true; void OnTick() { //--- string query = StringConcatenate("Select * from trades" ," WHERE " ,"closetime = 0" ); if ( mt4_mysqlQuery(MySqlHadle, insertQuery) ) { //Print("Select good"); } } bool mt4_mysqlQuery(int dbConnectId, string Query) { int length = StringLen(Query); if(length > 5){ uchar query[]; ToAnsi(Query, query); mysql_query(dbConnectId, query); if ( mt4_mysqlNoError(dbConnectId) ) { return (true); } } return (false); } bool mt4_mysqlNoError(int dbConnectId) { int error = mysql_errno(dbConnectId); if ( error > 0 ) { if(ShowErrors) Print("mysqlNoError: mysql_errno: ", error); return (false); } return (true); }
Можете сказать где в этом коде не верность? Выше описанная ситуация имеет место происходить в этом коде.
Этим я занимаюсь, но то что я описал, не может быть только моей проблемой, если вы работали с длл от MySQL, может попробуйте проверить описанный случай на своих ботах?
Добавил функцию mysql_ping, так же переделал свою функцию(как не странно работала, но все же не совсем корректно), результат стабильной работы бота получен.
Всем откликнувшимся спасибо.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем доброго!
Вопрос к бывалым и разработчикам!!!
Использую длл-ку для работы с БД, все вроде хорошо работает за одним исключением, если к примеру падает канал связи, то в теле бота возникает ошибка(Access violation read libmysql.dll) при работе с длл-кой, что приводит к остановке работы бота. Есть ли решение в подобных случаях? Т.е. есть в mql4 последнего билда, функции обработки исключений?
Заранее всем спасибо!