2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
MS Access Разные результаты на одних исходных данных17.09.2024, 11:41. Показов 1660. Ответов 24
Здравствуйте господа и товарищи!
Случилася беда откуда не ждали: при очередной обкатке было обнаружено странное поведение модуля обработки и вывода данных! При запуске процедуры результаты расчетов могут отличаться и значительно. Уже не знаю куда смотреть, то ли я накосячил где в С++, то ли БД работает как-то особо и я это пропустил. Короче выложу текст задействованных процедур, они запускаются в отдельном потоке, т.к. считаются иногда очень долго а пользователь может передумать. И да к базе обращается все равно только 1 поток, а значения в исходной таблице не меняются. Знаю что есть некоторые дублирования, они сделаны для обхода оптимизации и отслеживания значений при отладке. Процедуры выкладываю снизу вверх: 1. расчет значения
LatToY() и LonToX() - работают правильно ибо все точки отображаются процедуры запуска процесса расчета и отображения не вижу смысла приводить, они только веса добавят, а работают правильно, хотя бы по тому, что все расчетные точки присутствуют при отображении - проблема висит в вычислении значений, а это первые 2 процедуры. Шапки таблиц ежели кому надо:
0
|
17.09.2024, 11:41 | |
Ответы с готовыми решениями:
24
Спрогнозировать результаты матча на основе исходных данных Вывести значения вводимых исходных данных и результаты расчетов Вычислить значений выражений при заданных исходных данных. Сравнить полученные результаты с указанными правильным рез-ом Вычисления значений функций с указанными значениями исходных данных. Результаты вывести в виде таблицы. Использовать пот |
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
17.09.2024, 12:48 [ТС] | 3 |
нету, вообще предполагается, что данные уникальны, по чем сортировать?
в смысле при заполнении таблицы дубликаты удаляются по определенным правилам Попробовал сортировку по значению - оно в расчете участвует - без результата Добавлено через 26 минут Очень странно, попробовал другую более тяжелую процедуру такая же проблема, такое впечатление что при выборке данных из базы значения выдаются хаотично...
0
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
17.09.2024, 15:22 [ТС] | 5 |
зачем по DT, если там четкое соответствие, ID - индекс номинальный, он вставлен только для чистки базы от дубликатов и значения не имеет, совокупность MD_ID, DT, LAT, LON, SOURCE однозначно определяют координаты данных в таблице Weather. Результаты вычислений сохраняются в таблице вообще без ID.
0
|
17.09.2024, 16:08 | 6 |
я в алгоритм не вникал, просто предположил, что если следующий расчет зависит от предыдущего, то сортировка важна. А так надо понять. что именно подразумевается под различием. Если в одном случае 2+2 = 4, а в другом 2+2 = 5 это одно. Если в одном случае результат: 1,2,3,4 а в другом 3,2,4,1 то это другое.
Добавлено через 26 минут Сортировка, кстати, в AQLAT. вроде не указан запрос в него.
0
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
17.09.2024, 16:59 [ТС] | 7 |
Именно, при повторном прогоне раз на раз не приходится, но при всех равных исходных данных - разные значения
AQLAT - формируется в Select_LatLon() я об этом написал, может не хорошо видно Добавлено через 2 минуты Не зависит никак, расчеты наполняют таблицу, которая отсортирована по DT, причем выполняются они также по порядку возрастания DT... Добавлено через 1 минуту В алгоритме отрисовки указатель устанавливается на первую строку с DT и далее отрисовывает пока не встретит другое DT
0
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
18.09.2024, 17:55 [ТС] | 9 |
Вообще закрадывается сомнение, а кто-то проверяет работу приложений с базами данных на корректность выборки?
Добавлено через 1 час 35 минут Кажется вопрос решен! Попробую проверить, но видимо дело с синхронизацией потока расчета данных и процедуры отображения. Они работали с одной таблицей и соответственно перемещали текущий указатель, в результате записи вставлялись как попало, странно только почему отображались ВСЕ!!! точки, как можно обойти проверку на изменение параметра времени... Добавлено через 1 час 24 минуты К сожалению ни применение выборки, ни оборачивание в транзакцию результата не дает, расчеты "липовые"...
0
|
18.09.2024, 18:25 | 10 |
Надо учесть, что "insert into ..." вставляет данные непосредственно в таблицу БД, а Датасеты работают с теми данными, которые были считаны из БД когда то давно.
Добавлено через 7 минут И сдается мне, в данном случае надо кардинально менять схему. Надо сначала скопом считывать данные в массив, обрабатывать во второй массив и потом результат записывать в таблицу.
0
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
18.09.2024, 18:29 [ТС] | 11 |
проблема не в этом, проблема в том, что при повторном расчете результаты в таблице отличаются, они не пропадают или их не хватает, они именно не совпадают от раза к разу, однако после перезапуска программы первый расчет вроде бы одинаковый...
Добавлено через 2 минуты И на кой тогда спрашивается я трахаюсь с изучением БД и ЭСКУЭЛЬ? создал бы массив и работал бы с ним... Добавлено через 1 минуту Видимо это следующий шаг, придется убрать поток, и добавить кнопку "стоп"...
0
|
18.09.2024, 18:31 | 12 |
Это неизвестно. Просто используешь инструмент не-по назначению.
Добавлено через 1 минуту Может забываешь перед расчетами обновить Датасет из таблицы? Впрочем без конкретных примеров гадать можно долго.
0
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
18.09.2024, 18:35 [ТС] | 13 |
Я подозреваю, что такой функции опять же нет, да еще чтобы синхронизацию для 3 разных параметров соблюсти ибо потом каждую запись придется искать "вручную"
Добавлено через 1 минуту Зачем обновлять статическую таблицу? в ней на момент расчетов ничего не меняется И я вроде бы объясняю, что данные из таблицы подтягиваются, вот только почему-то результат расчетов всегда разный...
0
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
18.09.2024, 18:41 [ТС] | 15 |
боюсь она в принципе уже сделана по сути, только результаты распихиваются не по промежуточным массивам а записываются в другую таблицу.
И проблема выдергивания "разных" данных существует, хотя по "закону" ее не должно быть! Запрос формируется по одному и тому же алгоритму из одной той же базы данных, в начале алгоритма таблица результатов очищается, а в некоторых ситуациях (например выход из режима расчетов) вообще удаляется
0
|
18.09.2024, 18:46 | 16 |
Я не про правильность работы, а про скорость. В массиве считалось бы все мгновенно и не надо было бы мутить с потоками. Возможно и ошибки бы не было из-за рассинхронизации или тому подобного.
0
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
18.09.2024, 19:02 [ТС] | 17 |
Все верно, только в массив-то все равно надо было выборку запихнуть, не подскажете как это сделать "быстро"?
Выборку то все равно делать, чтобы в массив засунуть Добавлено через 8 минут Тут конечно может быть стоило бы освоить сложные запросы SQL, но насколько я понял формулы с логикой туда очень трудно вписать будет, Покажите пример как сложить "значения" для 1 разного "параметра" и группы одинаковых из 1 таблицы или на худой конец где прочитать, простых примеров тьма, а по сложному программированию весьма скудновато
0
|
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
|
|
18.09.2024, 19:28 [ТС] | 19 |
ну вот пример, скажем мне надо сложить 3 значения (ZNCH) с разными MD_ID и одинаковыми DT, LAT, LON, SOURCE, соответственно поместить в результаты выборки вместе с параметрами по которым выбирали (можно без SOURCE), да при этом не мешало бы выбрать мах из QUAL, да проверить UDT на равенство, ежели не равно то можно просто не выполнять никаких действий с этой группой. Вот только нужно понимать, что MD_ID далеко не 3, а десятка 2, так что просто агрегатная сумма не прокатит формула на самом деле страшнее чем просто сумма
0
|
18.09.2024, 19:59 | 20 |
0
|
18.09.2024, 19:59 | |
18.09.2024, 19:59 | |
Помогаю со студенческими работами здесь
20
Вычислить значения переменных. Вывести на печать значения вводимых исходных данных и результаты вычислений Разные типа соединения с сервером, разные результаты. разные сервера разные результаты Может ли функция при одних и тех же значениях абсцисс иметь разные ординаты? md5 разные результаты Разные результаты @dblookup Разные результаты парсинга Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |