<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: QLua и БД]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме QLua и БД форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 28 Apr 2026 11:09:54 +0300</pubDate>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31751/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br />Пришлите дамп падения на quiksupport@arqatech.com вместе со скриптом и библиотеками. <br />
			<i>14.06.2018 05:12:40, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31751/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31751/topic3681/</guid>
			<pubDate>Thu, 14 Jun 2018 05:12:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31750/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Продолжил работать над задачей описанной в начале темы. Поместил методы записи в базу в отдельную dll (таким образом почти полностью переписал функционал с lua на c++), к сожалению проблема осталось той же: QUIK падает через некоторое время работы. Зато теперь падает с дампом. Уважаемая тех. поддержка, куда мне нужно направить файл дампа, чтобы кто-нибудь мог посмотреть возможную причину? Так как pdb у меня нет, то символы из дампа я загрузить не могу, вижу только ошибку &quot;Access violation reading location xxxx&quot;. <br />
			<i>13.06.2018 23:59:26, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31750/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31750/topic3681/</guid>
			<pubDate>Wed, 13 Jun 2018 23:59:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31299/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Все же лучше смотреть в сторону отдельного процесса. Я сделал так: lua-скрипт в OnAllTrade вызывает ф-ю dll для передачи нужных параметров (практически - всех) строки таблицы всех сделок. Длл-ка в свою очередь при инициализации подключена к именованному пайп-серверу (почему-то пайпы выбрал, а не tcp/ip). А вот пайп-сервер - уже отдельно запущенное приложение со своими потоками - принимает от пайп-клиента данные, сохраняет/обрабатывает/отправляет ответ клиенту (т.е. в &nbsp;длл). Если длл получает ответ - вызывает коллбэк уже в квике. Работает стабильно. <br />
			<i>25.05.2018 21:21:27, icebird.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31299/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31299/topic3681/</guid>
			<pubDate>Fri, 25 May 2018 21:21:27 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31295/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Кажется, причина ясна.Дело оказалось вовсе не в БД, а в одновременном доступе к мапу из разных ниток. <br />В потоке main() делалось чтение из базы и загрузка данных из нее в глобальный мап типа { &quot;SR&quot; = {...}, &quot;GZ&quot; = {...}, &quot;RI&quot; = {} } (то есть таблица, где ключом является не индекс, а строки).<br />В функции обратного вызова делалось чтение из этого глобального мапа с использованием pairs(). Пока вторая нитка перебирала элементы, первая как раз в этот же момент изменила мап, и все упало.<br />Я конечно знаю про потокобезопасные функции table.sinsert и т.д., но они только для нумерованных таблиц.<br />Так что придется использовать что-то типа эмуляции критической секции, как описано здесь <noindex><a href="https://forum.quik.ru/forum10/topic3272/" target="_blank" rel="nofollow">https://forum.quik.ru/forum10/topic3272/</a></noindex> или поменять структуру данных. Сделать все в один поток не получится, потому что скрипт сложный и большой и он не только занимается работой с базой. <br />
			<i>25.05.2018 12:41:03, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31295/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31295/topic3681/</guid>
			<pubDate>Fri, 25 May 2018 12:41:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31290/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_bCPmgVCy" href="/user/901/" bx-tooltip-user-id="901">Suntor</a> написал:<br />Смысл в том, чтобы вынести ваш код работы с БД в другой процесс физически. И если там ошибка, то упадёт другой процесс, а Quik останется работать вместе с LuaRPC частью. И вы убедитесь, что валится именно процесс с вашим кодом... что там внутри той же &nbsp;quik-lua-rpc вам знать не нужно, вам лишь нужно, чтобы ваш скрипт работал в другом процессе и делал вызовы в Quik через посредника.<br />=============<br />Поддерживаю!<br />====quote====<br /><a class="blog-p-user-name" id="bp_Y1xr3DpR" href="/user/4021/" bx-tooltip-user-id="4021">Сергей</a> написал:<br />Если записи в БД делать два раза в секунду, то падает через несколько минут. <br />=============<br />А память сжирается процессом квика за эти несколько минут? <br />
			<i>25.05.2018 11:16:10, icebird.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31290/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31290/topic3681/</guid>
			<pubDate>Fri, 25 May 2018 11:16:10 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31257/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_v7HuKJRo" href="/user/4021/" bx-tooltip-user-id="4021">Сергей</a> написал:<br />Не вполне пойму, в чем противоречие.<br />=============<br />Противоречие в том, что как вы сами пишите, когда ваш скрипт пишет в файл, то ничего не падает, а когда ваш скрипт пишет в БД, то падает. В обоих случаях Quik один и тот же, разница только в вашем коде работы с БД и в библиотеках работы с БД. Значит Quik отбрасываем. Остаются ваш код и библиотеки работы с БД. Но вы перепробовали их несколько, и падение повторилось в каждом случае. Значит их тоже отбрасываем. Остаётся только ваш код работы с БД... простой метод исключений, немного дедукции, и виновник найден... Элементарно! )))<br />====quote====<br /><a class="blog-p-user-name" id="bp_erGbK3cG" href="/user/4021/" bx-tooltip-user-id="4021">Сергей</a> написал:<br />Не очень знаком с технологиями &quot;Protocol Buffers&quot;, &quot;ZeroMQ&quot;, которые тут указаны. Я так понял смысл в том, что мой скрипт будет запущен обычным интерпретатором Lua и будет RPC-клиентом.<br />=============<br />Смысл в том, чтобы вынести ваш код работы с БД в другой процесс физически. И если там ошибка, то упадёт другой процесс, а Quik останется работать вместе с LuaRPC частью. И вы убедитесь, что валится именно процесс с вашим кодом... что там внутри той же &nbsp;<noindex><a href="https://github.com/Enfernuz/quik-lua-rpc" target="_blank" rel="nofollow">quik-lua-rpc</a></noindex> вам знать не нужно, вам лишь нужно, чтобы ваш скрипт работал в другом процессе и делал вызовы в Quik через посредника. <br />
			<i>24.05.2018 12:15:38, Suntor.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31257/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31257/topic3681/</guid>
			<pubDate>Thu, 24 May 2018 12:15:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31254/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_P5pqMPIg" href="/user/4021/" bx-tooltip-user-id="4021">Сергей</a> написал:<br />Думаю легче сделать по другому: написать dll, которая сама будет делать inset'ы в базу, <br />=============<br />еще проще это сделать свою структуру и писать ее lua-скриптом.<br /><br /><noindex><a href="http://lua-users.org/wiki/StructurePacking" target="_blank" rel="nofollow">http://lua-users.org/wiki/StructurePacking</a></noindex><br /><br />чем проще решение, тем оно стабильнее и более управляемо. <br />
			<i>24.05.2018 09:38:39, rinat.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31254/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31254/topic3681/</guid>
			<pubDate>Thu, 24 May 2018 09:38:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31252/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br />Проблема скорее всего в Вашем скрипте.<br />Использую LuaSQLite3. Читаю ТВС. Раз в полсекунды (уверен, можно и чаще) пишу новые сделки в таблицу. Далее транзакциями пишу в базу свежую порцию сделок... Итак уже полгода и по всем акциям и фьючам. База занимает 2 гига. <br />
			<i>24.05.2018 09:18:44, Алексей Ч.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31252/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31252/topic3681/</guid>
			<pubDate>Thu, 24 May 2018 09:18:44 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31251/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_eN7mqFsV" href="/user/901/" bx-tooltip-user-id="901">Suntor</a> написал:<br />Первое утверждение противоречит второму. Косяк явно в коде работы с БД.<br /><br />=============<br />Не вполне пойму, в чем противоречие. У меня в скрипте довольно тонкая прослойка к упомянутым третьесторонним библиотекам - открываю соединение, получаю данные из QUIK'а о нужных инструментах, делаю вызов INSERT, как в примере <noindex><a href="https://keplerproject.github.io/luasql/examples.html" target="_blank" rel="nofollow">https://keplerproject.github.io/luasql/examples.html</a></noindex>. У LuaSQLite3 другой API и обращение к другой dll - и падение то же самое повторяется. Если бы в моем скрипте была бы ошибка, то не работало бы вообще.<br /><br /><br /><br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_toP2WJk7" href="/user/901/" bx-tooltip-user-id="901">Suntor</a> написал:<br />Попробуйте вынести весь свой скрипт в отдельный процесс через LuaRPC (найдите любую реализацию в сети, к примеру, есть готовая под QLua: quik-lua-rpc), и посмотрите, какой процесс у вас будет падать в итоге...<br />=============<br />Не очень знаком с технологиями &quot;Protocol Buffers&quot;, &quot;ZeroMQ&quot;, которые тут указаны. Я так понял смысл в том, что мой скрипт будет запущен обычным интерпретатором Lua и будет RPC-клиентом. Для получения данных из QUIK он будет делать RPC вызовы на скрипт (RPC-сервер) запущенный в это время в QUIK'е. Я правильно понимаю? В итоге получается, что &quot;вынести в отдельный процесс&quot; означает по сути &quot;переписать всю программу&quot; на этих неизвестных мне технологиях. Думаю легче сделать по другому: написать dll, которая сама будет делать inset'ы в базу, а lua-скрипт из QUIK'а просто будет давать dll'ке нужные данные. <br />
			<i>24.05.2018 09:13:08, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31251/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31251/topic3681/</guid>
			<pubDate>Thu, 24 May 2018 09:13:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31246/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_C2yi0wZl" href="/user/4021/" bx-tooltip-user-id="4021">Сергей</a> написал:<br />То, что один и тот же результат воспроизводится для различных библиотек и различных СУБД, говорит о том, что дело не в них, а в QUIK'е или QLua.<br />=============<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_e3OE1N1E" href="/user/4021/" bx-tooltip-user-id="4021">Сергей</a> написал:<br />Если записывать все нужные данные просто в файл csv, а не в БД, то все стабильно работает.<br />=============<br />Первое утверждение противоречит второму. Косяк явно в коде работы с БД.<br /><br />Попробуйте вынести весь свой скрипт в отдельный процесс через LuaRPC (найдите любую реализацию в сети, к примеру, есть готовая под QLua: <noindex><a href="https://github.com/Enfernuz/quik-lua-rpc" target="_blank" rel="nofollow">quik-lua-rpc</a></noindex>), и посмотрите, какой процесс у вас будет падать в итоге... <br />
			<i>24.05.2018 03:00:07, Suntor.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31246/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31246/topic3681/</guid>
			<pubDate>Thu, 24 May 2018 03:00:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>QLua и БД</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message31242/topic3681/">QLua и БД</a></b> <i>QLua и БД</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Есть проблема, с которой борюсь довольно давно, но к сожалению, так ее и не удалось решить, и похоже все дело именно в связке QUIK-QLua-Lua.<br />Я написал скрипт на Lua, который периодически записывает данные о параметрах опционов (волатильность и т.д.) в БД, чтобы в дальнейшем использовать данную информацию для сложных запросов. Для записи в БД пробовал пользоваться несколькими сторонними библиотеками: LuaSQL (<noindex><a href="https://keplerproject.github.io/luasql/" target="_blank" rel="nofollow">https://keplerproject.github.io/luasql/</a></noindex>) и LuaSQLite3 (<noindex><a href="http://lua.sqlite.org/index.cgi/index" target="_blank" rel="nofollow">http://lua.sqlite.org/index.cgi/index</a></noindex>). При этом в случае LuaSQL пробовал реализацию для sqlite и mysql. <br />Сами библиотеки прикрутить к QUIK'у удалось, хотя это непросто. Но итоговый результат к сожалению печальный: скрипт работает определенное время, делает записи в БД, как надо, но потом QUIK просто падает (без дампа, без всего). Если записи в БД делать два раза в секунду, то падает через несколько минут. Если писать раз в минуту (как изначально мной предполагалось), то падает через полчаса, а может через пару часов. Мне нужна стабильная работа в течение всего дня. За одну итерацию пишу около сотен строк в БД, что полная ерунда для современных мощностей. Смотрел на использование ЦП QUIK'ом во время работы скрипта - все нормально. Пробовал запись как из потока main, так и из функций обратного вызова - результат один и тот же.<br />То, что один и тот же результат воспроизводится для различных библиотек и различных СУБД, говорит о том, что дело не в них, а в QUIK'е или QLua. Если записывать все нужные данные просто в файл csv, а не в БД, то все стабильно работает. По опыту могу сказать, что падение может быть вызвано ошибкой при одновременном доступе к одному участку памяти в QUIK'е или запил памяти, но так как у меня нет исходного кода ни qlua.dll, ни quik.exe, то я не могу ничего сказать и сделать. Неужели моя задача никак не решается с использованием QUIK? Хотелось бы получить ответ от разработчиков. Я могу дать код скрипта, если нужно. Пробовал на версиях QUIK 7.14 и 7.16. <br />
			<i>24.05.2018 00:13:49, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message31242/topic3681/</link>
			<guid>http://forum.quik.ru/messages/forum10/message31242/topic3681/</guid>
			<pubDate>Thu, 24 May 2018 00:13:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
