МТ + MySQL - нужна помощь! (+)

 

Добрый день!

'TicksInMySQL'

Тут код эксперта, позволяющий писать из МТ данные ( в этом примере тики real-time ) в базу MySQL. Я немного переделал код, теперь он собирает бары заданного интервала, но мне хочется добавить функцию заполнения "дыр" по простому алгоритму:

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

Для этого нужно не только передавать в MySQL query на исполнение, но также иметь возможность оперировать с возвращаемым результатом, если таковой имеется.

Проблема в том, что нужные функции из libmysql.dll возвращают структуру MYSQL_RES ( например, mysql_store_result() http://dev.mysql.com/doc/refman/5.1/en/c-api-function-overview.html ).

Как это сделать или обойти???

Заранее огромное спасибо,

Сергей.

ЗЫ в аттаче код сборщика без этой проверки.

Файлы:
 
Наверное, написать промежуточную DLL?
 

1. Да, Вы правы.

2. Я не умею этого делать, как Вы посоветуете поступить?

 
Dervish писал(а) >>

1. Да, Вы правы.

2. Я не умею этого делать, как Вы посоветуете поступить?

Извините, все нашел ('simple mysql wrapper')

спасибо.

 

Позвольте еще один вопрос, пожалуйста, он больше относится к "правильности" работы с сервером MySQL.

Очередная версия программы собрана и работает, вылезла такая проблема:

Я прописал установку соединения непосредственно перед выполнением операции с таблицей и закрытие соединения сразу после.

При наложении эксперта на большое количество графиков ( в данный момент 20, в готовой версии нужно больше ) при очередном апдейте выскакивает пара-тройка ошибок типа "..lost connection to server", "..MySQL server gone away", то есть сервер не справляется с очередью запросов на коннект.

Если соединение с сервером делать в init(), а дисконнект в deinit() - все прекрасно работает, но меня смущает, что я держу кучу открытых коннектов к серверу.

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

И еще один вопрос - в мануале MySQL рекомендуется использовать конструкцию mysql_library_init() {код} mysql_library_end() для корректной работы с выделяемой памятью. Ни в одном из приведенных на форуме примеров этого нет. Имеет смысл поправить?

Спасибо за помощь!!

 
Я все же считаю, что рациональней и правильней делать подключение к СУБД в init() и отключение в deinit(). Ибо операции коннекта/дисконнекта дорогие по времени и нагрузке на ресурсы сервера. Прикиньте, что будет, если у вас будут постоянно апдейтиться, допустим, 50 графиков и с каждым апдейтом будет логин+логаут.
 
Daniil писал(а) >>
Я все же считаю, что рациональней и правильней делать подключение к СУБД в init() и отключение в deinit(). Ибо операции коннекта/дисконнекта дорогие по времени и нагрузке на ресурсы сервера. Прикиньте, что будет, если у вас будут постоянно апдейтиться, допустим, 50 графиков и с каждым апдейтом будет логин+логаут.

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

Беда в недостатке знаний - я представляю, как это сделать через MySQL /NET Connector, но не через библиотечный вызовы из МТ

В целом на данный момент устраивает все, кроме того, что графики после установки эксперта нельзя трогать - пре переинициализации эксперта МТ падает с крэшлогом по понятной причине.

Ладно, пока остановлюсь на том что есть и буду копать дальше. Спасибо!!!

 
Dervish:

Если соединение с сервером делать в init(), а дисконнект в deinit() - все прекрасно работает, но меня смущает, что я держу кучу открытых коннектов к серверу.

Аналогично, может есть способ указать советнику использовать соединение, установленное другим советником?

Причина обращения: