Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 29.07.2011
Сообщений: 4

Получить данные из Access и построить отчет

29.07.2011, 09:59. Показов 1909. Ответов 5
Метки нет (Все метки)

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

Есть база данных на ACCESS, в ней есть одна таблица, в которой хранятся записи времени включения отключения датчиков

Структура примерно следующая
logtime id check
04.03.2011 15:36:15 0074000 1
04.03.2011 16:01:35 0074000 1
04.03.2011 15:40:15 0076000 1
04.03.2011 18:39:27 0074000 2
04.03.2011 18:34:12 0076000 2

logtime - время и дата включения и отключения
id - Номер датчика
check - 1 - включено 2 выключено

Базу подключил через ADO

Прошу помощи в написании запроса или алгоритма подсчета для датчиков времени работы между включением и отключением и вывода какого либо отчета по дням.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2011, 09:59
Ответы с готовыми решениями:

Возможно ли построить в Access 2000 кросс-отчет, используя SQL?
Господа, а возможно ли построить в Аccess(2000) кросс-отчет? Причем используя SQL. Заранее благодарен.

Отчет FastReport должен брать данные из БД Access
Доброго времени суток уважаемые коллеги:)...у меня появилась одна огромная проблема:wall: - и я решил обратиться за помощью к...

C# Access как подключиться с локальной формы и получить данные из БД Access расположенной на сайте
Товарищи прошу помощи. Литературы мало под рукой по C#. Много форумов пересмотрел но что то ничего не нашел. Есть локальная БД Access...

5
19 / 19 / 0
Регистрация: 22.07.2011
Сообщений: 68
29.07.2011, 10:35
Алгоритм подскажу...
1. Выбираешь записи по конкретному датчику за конкретный период.
2. Запросами типа
SELECT ... ORDER BY ... LIMIT 1
определяешь тип (включение или выключение) двух событий - первого и последнего за указанный период. Например, если у тебя самое раннее событие за период было выключением, логично предположить, что время начала периода будет как бы "включением", а если первое событие было включением - время начала периода нас не интересует, то же самое и со временем окончания периода/последней записью.

В ходе пункта 2 у тебя должно остаться четное число записей с равным количеством включений и выключений.

3. сложным запросом SELECT находишь разность между суммой времен включения и суммой времен выключения датчиков.

Если всё верно - profit

п.с. вместо 1/2 лучше использовать 0/1 - легче писать условия
0
0 / 0 / 0
Регистрация: 29.07.2011
Сообщений: 4
29.07.2011, 11:05  [ТС]
Алгоритм примерно я понял

С SQL запросами никогда не работал, тем более сложными...

Если не трудно можете привести код запроса?
0
19 / 19 / 0
Регистрация: 22.07.2011
Сообщений: 68
29.07.2011, 11:57
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT (
SELECT SUM(logtime) FROM название_таблицы
WHERE (CHECK=2 AND id=номер_датчика AND logtime>время_начала_периода AND logtime<время_конца_периода)
)-(
SELECT SUM(logtime) FROM название_таблицы
WHERE (CHECK=1 AND id=номер_датчика AND logtime>время_начала_периода AND logtime<время_конца_периода)
)+(
SELECT IF(CHECK=2,время_конца_периода,0) FROM название_таблицы WHERE (logtime=(
SELECT MAX(logtime) FROM название_таблицы 
WHERE (id=номер_датчика AND logtime>время_начала_периода AND logtime<время_конца_периода))
AND id=номер_датчика) 
)-(
SELECT IF(CHECK=1,время_начала_периода,0) FROM название_таблицы WHERE (logtime=(
SELECT MIN(logtime) FROM название_таблицы 
WHERE (id=номер_датчика AND logtime>время_начала_периода AND logtime<время_конца_периода))
AND id=номер_датчика)
);
То, что я наваял "на коленках". Хотя, честно говоря, мне кажется, что работоспособность в данном случае может зависеть от вещей типа молитв и кроличьих лапок

Должно возвращать integer, чтобы получить в формате времени, нужно перевести.
0
0 / 0 / 0
Регистрация: 29.07.2011
Сообщений: 4
01.08.2011, 21:06  [ТС]
Вариант работы отчета должен быть таков.
Выбирается период - например месяц.
В отчете должны быть отображены значения работы датчика в течение суток.

То есть 1 числа датчик работал 9 часов
2 числа -14 часов и т.д.

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

Можно ли все это сделать запросами SQL?

Или нужно брать таблицу и последовательно ее просчитывать по каждому id?
0
0 / 0 / 0
Регистрация: 29.07.2011
Сообщений: 4
06.08.2011, 10:02  [ТС]
Получилось сделать вот такой запрос - но есть проблемы

ADOTable1.active:=true;
ADOTable1.RecNo:=4;
ADOQuery1.SQL.Clear;


ADOQuery1.SQL.Add('SELECT
(SELECT max(logtime) FROM LOG WHERE (userid=:iduser and check=2 AND logtime>:tann AND logtime<:tann1)) -
(SELECT min(logtime) FROM LOG WHERE (userid=:iduser and functionno=1 AND logtime>:tann AND logtime<:tann1))');

ADOQuery1.parameters.parambyname('iduser ').value:=Adotable1.fieldbyname('userid' ).AsString;
ADOQuery1.parameters.parambyname('tann') .value:=DBDateTimePicker1.Date;
ADOQuery1.parameters.parambyname('tann1' ).value:=DBDateTimePicker2.Date;

ADOQuery1.Active:=True;

Заданы параметры выбора диапазона дат, а также userid - берется из другой таблицы
При выполнении этого запроса выдается ошибка: Предоставлены неполные или несовместимые сведения

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

А вот подсчитать разницу что то у меня не получается? в чем проблема?? Подскажите плиз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2011, 10:02
Помогаю со студенческими работами здесь

Как передать данные из access на сайт и после получить ответ с сайта и занести в access ?
Встал такой вопрос. Необходимо брать введенные данные из access и проверять их на сайте, и принимать ответ с сайта. Может кто подскажет...

Получить данные из таблицы в Access
Есть таблица в Access с полями XSize, YSize, ZSize и десятью строками. Нужно поочередно извлечь значения всех строк. Например: считываем 3...

Получить данные не используя DataGridView из Access в TextBox
Всем привет! Есть проблема. Не знаю как загрузить данные в TextBox из БД Access не привлекая DataGridView. На моем уровне знаний...

Как получить данные из таблицы access db в массив?
Вообщем есть таблица которая содержит информацию о заказа, то есть код заказа, ФИО, стоимость. Мне нужно как то сложить стоимость всех...

Подстановка области из excel в форму Access и перенос в отчет Access
Всем привет. Хочу сделать базу данных по формирования и отправке писем. Короче: 1. Есть 5 клиентов 2. В конце каждого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru