This is topic Ошибка Calc loop is big in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Здравствуйте! Я создал проекта по вашему примеру из 5-го занятия "Учебный проект. Создания SQL-запроса для работы с внешней реляционной базой данных", я его изменил так, что бы значения записывались постоянно, записывает он данные с генератора синусоиды. Вопросы следующие: 1) При записи в Access интервал записи всегда разный, от полу минуты, до 7 минут и на оборот, почему так? 2) Лог проекта выдает ошибку Calc loop is big через минут 10 работы проекта, проект от этого не завершается, а продолжает нормально работать, может быть эта причина разного интервала записи и как это исправить?
Posted by Nico (Участник № / Member № 5342) on :
Для SQL-эапросов период пересчета idle. ТМ не предназначен для быстрой записи в базы данных. Необходимо контролировать окончание запроса и только после этого инициировать следующий.
[ 08.06.2012, 13:34: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Posted by Константинов Сергей (Участник № / Member № 5626) on :
В какое поле узла RTM выстовлять период пересчета idle?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Нужно открыть канал вызова SQL-запроса на редактирование и в качестве единицы периода пересчета выставить "цикл IDLE".
Posted by Константинов Сергей (Участник № / Member № 5626) on :
Теперь попробовал перенести ваш пример создания базы данных в свой проект и в новосозданную базу данных нечего не вносится, не знаю что делать. Лог трассировщика прилогаю http://narod.ru/disk/52687763001.18f82740e8925c2af2a7b107ff9bf0a0/SQL.LOG.html Posted by Константинов Сергей (Участник № / Member № 5626) on :
Так же если пройти в базу данных access и ввести любое значения вручную, то видно, что инентификатор изменился в соотведствии с количеством отправленных запросов. Получается что запрос проходит, но нечего не вводит в базу
Posted by Константинов Сергей (Участник № / Member № 5626) on :
Проект в МРВ работает, но сигнала от ком порта не получает так, как сейчас нет возможности подключить программу в месте применения. Запустил проект и вручную изменил все входные параметры с датчиков, значения в базу данных записались. Может быть так, что из-за отсутствия сигнала от ком порта значения в базу данных не записываются или же из-за настроек множителя и смещения в минусовое значение в каналах привязанных к базе данных?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В файле трассировщика ошибка несоответствия типа данных.
Вероятней всего проблема в различие разделителе дробной и целой части числа в базе данных и Trace Mode. В Trace Mode в качестве разделителя используется точка. Убедитесь, что в базе данных разделителем тоже является точка.
Posted by Константинов Сергей (Участник № / Member № 5626) on :
Спасибо, помогло.
И появился еще один вопрос, как ограничить количество записей в базу данных? Нужно что бы после записи допустим id=65536, значения в базу данных прекращались записываться, а просто обновляли старые записи, все как в СПАД архиве или есть другие варианты?
Posted by Nico (Участник № / Member № 5342) on :
после достижения нужного числа записей(INSERT) работать через другой SQL шаблон (UPDATE)
Posted by Константинов Сергей (Участник № / Member № 5626) on :
И все таки не пойму как этого добиться. Запись в базу данных при достяжении определенного числа записей остановить удалось. Запустить обновления вроде как тоже удалось, но не работает, шаблон такой:
UPDATE tab1 SET mktime=#mktime#, pila=#Пила_1_R#, sinus=#Синусоида_3_R#, treug=#Треугольник_2_R#
Для всего этого используется 2 канала вызова базы данных и опять стало вылазить сообщение Calc loop is big
Posted by Nico (Участник № / Member № 5342) on :
а какая запись в базе при этом обновися ?
Posted by Константинов Сергей (Участник № / Member № 5626) on :
да по плану старые по порядку дожны начать обновляться
Posted by Nico (Участник № / Member № 5342) on :
если mktime - это время текущей записи где указание какую запись нужно обновить
Posted by Константинов Сергей (Участник № / Member № 5626) on :
Мне нужно что бы обновлялась каждая запись по порядку при подачи запроса на обновления, нет смысла обновлять одну строчку или одно значение
Posted by Nico (Участник № / Member № 5342) on :
может ошибаюсь а WHERE где ?
Posted by Константинов Сергей (Участник № / Member № 5626) on :
функция WHERE в том что бы сузить круг изменений производимых функцией UPDATE, т.е. допустим моя функция:
UPDATE tab1 SET mktime='#mktime#', pila='#Пила_1_R#', sinus='#Синусоида_3_R#', treug='#Треугольник_2_R#'
обновит все что косается выше перечисленных полей, а функция:
UPDATE tab1 SET mktime='#mktime#', pila='#Пила_1_R#', sinus='#Синусоида_3_R#', treug='#Треугольник_2_R#' WHERE pila=5
обновит только те поля где будут совпадения колонки pila со значением 5.
Я же в свою очаредь приследую такую цель: Нужно произвести запись в базу данных за неделю с интервалом между записью в 1 минуту итого 10080 записей за недель. После достижения 10080 строк нужно прекратить записывать новые, а начать обновлять старые и так в цикле. Остановить запись мне удалось, обнавить старые данные тоже удалось, но обнавление проходит криво. Вместо обновления одной строки по порядку с каждым запросом, происходит одновременное обновления всех строк итого во всех 10080 записях одно и тоже время и значения.
Вопрос в следующем как правильно составить запрос на обновления или же какой другой вариант есть по реализации данной задачи
Posted by Nico (Участник № / Member № 5342) on :
сами же себе ответили UPDATE tab1 SET mktime='#mktime#', pila='#Пила_1_R#', sinus='#Синусоида_3_R#', treug='#Треугольник_2_R#'
обновит все что косается выше перечисленных полей, во всех записях
1. Проще всегда INSERT и иногда вызывать DELETE (старые по времени) 2 или иметь номер записи = F(time) и UPDATE по нему 3 Да и INSERT не нужен при старте создать недостоверные записи и только UPDATE