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

 
Eugeniy Lugovoy:

o_O

Если что я могу поднять тот проект для SQLite, написать тестовые скрипты/EA и если будут снова локи, то можем вместе разобраться (если Вы не против) и предоставить программное решение сообществу.

Возможно стоит уделить этому внимание т.к. есть некоторые преимущества бд (автономность, SQL, мобильность, встраиваемость и т.п.). 

По факту, я брал готовую DLL от SQLite (не исходники) и ее не перекомпиливал, а просто работал с С++ API.

Было бы действительно интересно, если бы "миф" о локировании SQLite был бы подтвержден или развеян. Если бы не эта неопределенность, или решения ее устраняющие, то SQlite оч привлекательный вариант взаимодействия. Интересно было бы узнать также что либо о ее быстродействии, например по сравнению с одинаковой базой с Access. Разумеется, если у кого либо найдется реальное время и желание проделать такую работу.

Возникают правда еще вопросы подключения базы к стороннему ПО, которое можно подключить к любой БД - Access, SQL Server, Oracle и пр. Имеется ли в SQLite драйвер, устанавливаемый на компьютер типа OLEDB или хотя бы ODBC? Причем в тот-же Access несколько приложений могут писать-читать в одну и ту же БД асинхронно через различные интефейсы без каких либо проблем. Подозреваю. что с SQLite это может не прокатить.

 
Yuriy Asaulenko:

Было бы действительно интересно, если бы "миф" о локировании SQLite был бы подтвержден или развеян. Если бы не эта неопределенность, или решения ее устраняющие, то SQlite оч привлекательный вариант взаимодействия. Интересно было бы узнать также что либо о ее быстродействии, например по сравнению с одинаковой базой с Access. Разумеется, если у кого либо найдется реальное время и желание проделать такую работу.

Возникают правда еще вопросы подключения базы к стороннему ПО, которое можно подключить к любой БД - Access, SQL Server, Oracle и пр. Имеется ли в SQLite драйвер, устанавливаемый на компьютер типа OLEDB или хотя бы ODBC? Причем в тот-же Access несколько приложений могут писать-читать в одну и ту же БД асинхронно через различные интефейсы без каких либо проблем. Подозреваю. что с SQLite это может не прокатить.

Ну OLEDB для SQLite есть, достаточно погуглить. Кстати интересная идея прогнать тестовые скрипты по поводу лока через OLEDB к SQLite... изврат конечно, но все мы здесь извращенцы...

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

 
Eugeniy Lugovoy:

Ну OLEDB для SQLite есть, достаточно погуглить. Кстати интересная идея прогнать тестовые скрипты по поводу лока через OLEDB к SQLite... изврат конечно, но все мы здесь извращенцы...

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

У меня есть приложение создающее БД и пишущее (не читающее) в нее большие объемы информации во многие таблицы. Если удастся найти OLEDB драйвер устанавливаемый на компьютер и видимый через настройки приложения, то SQLite можно легко протестировать на отсутствие зависаний. Аналогичным образом можно подключить к SQLite тот-же Access и попробовать параллельно читать и изменять таблицы. Что-то измерить, разумеется, не удастся.

Посмотрел инет. С ходу такой OLEDB провайдер обнаружить не удалось. Все больше OLEDB DLL, которые можно использовать только из языков программирования, насколько я понял.

 

начало постоянно вылазить, что значит?

 

при выполнении моего кода в этой строчке

if(DB==-1){DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

 
Pavel Kolchin:

начало постоянно вылазить, что значит?

 

при выполнении моего кода в этой строчке

if(DB==-1){DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

В MQL все строки юникодные и вы их передаете вместо ANSI.

Поэтому и падает дллка.

 
MetaQuotes Software Corp.:

В MQL все строки юникодные и вы их передаете вместо ANSI.

Поэтому и падает дллка.

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

//if(DB==-1){

DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

 
MetaQuotes Software Corp.:

В MQL все строки юникодные и вы их передаете вместо ANSI.

Поэтому и падает дллка.

В DLL перекодировка выполняется
 
Pavel Kolchin:

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

//if(DB==-1){

DB=MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

//}

res = MySqlCursorOpen(DB, "SELECT id, account, symbol FROM `current` WHERE account="+account);

А что за логика? у Вас коннект до этого кода выполнен? Чему DB равно до условия? Если переменная DB не инициализирована, то скорее всего из-за этого.

А в последнем примере вы штатно открываете соединение с базой и поэтому курсор тоже отрабатывает 

Скрипты поставляемые с DLL отрабатывают?
 

Приветствую Евгений!

За скрипт спасибо. Решил внедрить в свой проект. Но на стадии тестирования скриптов которые Вы приложили к проекту у меня есть 1 баг, не понятного рода. Не работает ReadIni. Может я что не так делаю, но он всегда возвращает пустые значения из ini. В чем может быть причина? Я подозреваю, что не находит файл по указанному пути, но я проверил из разных директорий все правильно и на месте.

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

использую mt4.
 
И вот еще проблема: русский текст вставляется караказябами. Я конечно понимаю, что в dll выполняется перекодировка, но у меня бд на UTF-8. Что мне делать, чтобы читабельный русский текст вставлялся...? это мне сильно упростит жизнь...
Причина обращения: