Access violation read libmysql.dll

 

Всем доброго!

Вопрос к бывалым и разработчикам!!!

Использую длл-ку для работы с БД, все вроде хорошо работает за одним исключением, если к примеру падает канал связи, то в теле бота возникает ошибка(Access violation read libmysql.dll) при работе с длл-кой, что приводит к остановке работы бота. Есть ли решение в подобных случаях? Т.е. есть в mql4 последнего билда, функции обработки исключений?

Заранее всем спасибо!

 
Скорее всего проблема в неверном использовании функции, которая вызывается у вас в этом случае. Ошибка 2006 возвращается исправно.
 
vita1y:
Скорее всего проблема в неверном использовании функции, которая вызывается у вас в этом случае. Ошибка 2006 возвращается исправно.


Еще раз, есть бот который на прямую работает с БД MySQL, через libmysql.dll, билд терминала 574, т.е. тот самый что уже требует корректной работы с функциями работающими со строками.

И так, сам бот работает корректно, но если я останавливаю работу MySQL сервера, бот вываливается с ошибкой Access violation read 0х00000ННН libmysql.dll, после чего сам бот так же перестает работать, потому что произошло исключение внутри длл-ки.

Вопрос:

1. Есть конструкции MQL4 позволяющие корректно обрабатывать ошибки вызванные в длл-ке?

2. Если кто-то сталкивался с такой же проблемой, какие еще есть решения кроме обработки исключений(если таковые имеются в MQL4 ) ?

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

Заранее спасибо!

 
gfm73:

1. Есть конструкции MQL4 позволяющие корректно обрабатывать ошибки вызванные в длл-ке?

Нет.

2. Если кто-то сталкивался с такой же проблемой, какие еще есть решения кроме обработки исключений(если таковые имеются в MQL4 ) ?

Писать нормальный правильный код.

 
TheXpert:

Нет.

Писать нормальный правильный код.


Можете сказать где в этом коде не верность? Выше описанная ситуация имеет место происходить в этом коде.

Буду признателен за помощь!!!

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

 
gfm73:

Можете сказать где в этом коде не верность? Выше описанная ситуация имеет место происходить в этом коде.

Нет... в приведенном коде явных ошибок вроде не видно. Принтуйте и проверяйте все подряд.
 
Этим я занимаюсь, но то что я описал, не может быть только моей проблемой, если вы работали с длл от MySQL, может попробуйте проверить описанный случай на своих ботах?
 
gfm73:
Этим я занимаюсь, но то что я описал, не может быть только моей проблемой, если вы работали с длл от MySQL, может попробуйте проверить описанный случай на своих ботах?
Работал но давно, сейчас вряд ли найду. С вашей стороны наверное будет лучше выложить на форум минимальный полный листинг тест-кейса с воспроизводящимся багом.
 

Добавил функцию mysql_ping, так же переделал свою функцию(как не странно работала, но все же не совсем корректно), результат стабильной работы бота получен.

Всем откликнувшимся спасибо.