Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232

Как правильно суммировать время и дату Adoquery

19.09.2013, 22:51. Показов 2849. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Есть dbgrid datasource adoquery все между собой соединено.

Так же имеется база (роль исполняет: текстовый файл "log.txt")

- В log.txt постоянно добавляются записи следующего типа:
№0009 , 19.09.2013 23:18:12
№0009 , 19.09.2013 23:18:13
№0010 , 19.09.2013 23:18:14
№0010 , 19.09.2013 23:18:15 и т.д.

Вывожу в dbgrid следующим кодом:

Delphi
1
2
3
4
5
6
7
8
if FileExists(getcurrentdir+'\LOG\'+'log.txt')  then
begin
AdoQuery1.Active:=false;
adoquery1.SQL.Text:='select F1, Sum(F2) as F2  from [log#txt] group by F1';
adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+getcurrentdir+'\LOG\'+';Mode=Read;Extended Properties="Text;HDR=No";Persist Security Info=False';
AdoQuery1.Active:=true;
SetGridColumnWidths(db1);
end;
в DBgrid получаю:

Delphi
1
2
3
4
5
6
7
__________________________________________
|         F1        |          F2        |
-----------------------------------------
|       №0009       |   17,7594791666667 |
-----------------------------------------
|       №0010       |   25,5454693189436 |
-----------------------------------------
Вопрос: как правильно сложить дату и время и вывести в колонку F2.

На данный момент программа складывает, но выводит не как дату и время а вот в таком виде: 17,7594791666667 это примерно за 5 секунд.

Спасибо за ранее за помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2013, 22:51
Ответы с готовыми решениями:

Как правильно достать дату и время из строки?
есть строка с текстом в ней есть дата или дата и время мне нужно их достать, раньше я извращался там как мог много неправильно находило...

Как правильно хранить и отображать дату и время?
MVC 4 C# Есть модель данных, в которой требуется хранить дату и время для каждого объекта. В базе созданы столбцы типа Date и Time (not...

как правильно сотнести дату и время друг к другу
Добрый день есть текст в котором хаотично размещены дата, интервалы дат и время интервалы времени. Вот исходный текстписью 15 июля в 22:00....

15
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
19.09.2013, 23:41
Цитата Сообщение от cezer_ak Посмотреть сообщение
складывает, но выводит не как дату и время
А что ты хотел увидеть в результате суммирования 19.09.2013 23:18:12 и 19.09.2013 23:18:13 ?
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
20.09.2013, 09:57  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
А что ты хотел увидеть в результате суммирования 19.09.2013 23:18:12 и 19.09.2013 23:18:13 ?
Понял, значит нужна разница между датами и временем. А как будет выглядеть разница даты и времени допустим суммирование это: Sum(F2) as F2. А разница в колонке F2 как будет выглядеть? Подскажите пожалуйста.

Добавлено через 1 час 37 минут
Есть кто может помочь?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
20.09.2013, 10:51
Цитата Сообщение от cezer_ak Посмотреть сообщение
как будет выглядеть разница ..допустим суммирование
разница = нахождение разности = результат выполнения операции вычитания одного значения из другого

Ты вникни в то что ты сказал - "как будет выглядеть результат выполнения операции вычитания .. допустим сложение" ..
0
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
20.09.2013, 10:56  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
разница = нахождение разности = результат выполнения операции вычитания одного значения из другого

Ты вникни в то что ты сказал - "как будет выглядеть результат выполнения операции вычитания .. допустим сложение" ..
Сейчас в DBgrid выводятся данные и не дублируются номера допустим если в файле мы имеем N0009 повторяющийся 50 раз с разным временем то получаем в dbgrid одну строку N0009 и суммированное значение времени из 50 строк. а как сделать вычитание в запросе и чтоб в dbgrid выводилось так же одна строка N0009 и правильным временем я к сожалению не знаю(
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
20.09.2013, 11:40
cezer_ak, приведите пример условия (например, пусть это будет табличка из стартового поста) и пример того, что должно получиться. (Уже минут 10 читаю и не могу понять что Вы хотите получить).

Добавлено через 8 минут
Например 19.09.2013 23:18:12 + 19.09.2013 23:18:13 = 11.06.2127 22:36:25
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
20.09.2013, 11:52  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
cezer_ak, приведите пример условия (например, пусть это будет табличка из стартового поста) и пример того, что должно получиться. (Уже минут 10 читаю и не могу понять что Вы хотите получить).

Добавлено через 8 минут
Например 19.09.2013 23:18:12 + 19.09.2013 23:18:13 = 11.06.2127 22:36:25
Здравствуйте Waddonato.

Уже нужно не суммирование а вычитание пример: 19.09.2013 23:18:12 - 19.09.2013 23:18:13 = 00.00.0000 00:00:01

Вообщем просто подсчет времени на каждый номер секунды минуты часы дни месяцы годы.
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
20.09.2013, 12:28
cezer_ak, разница между двумя датами является числом с плавающей точкой, где целая часть - это дни, дробная часть - это время. Отсчет дат в компьютере идет не с даты 00.00.0000 00:00:00, а с 30.12.1899 00:00:00 (отрицательные числа ). Т.е. вы получите 19.09.2013 23:18:13 - 19.09.2013 23:18:12 = 30:12:1899 00:00:01. Минимальная отображаемая дата (-657434) равняется 01.01.0100 00:00:00, т.е. меньше чем 100 лет вы не отобразите.

Запрос на отображение разницы между минимальной и максимальной датами:
SQL
1
2
SELECT Nnn, FORMAT(MAX(date1)-MIN(date1), 'DD:MM:YYYY HH:MM:SS')
FROM Table2 GROUP BY Nnn
Запрос на отображение минимального значения:
SQL
1
2
SELECT Nnn, FORMAT(-657434, 'DD:MM:YYYY HH:MM:SS')
FROM Table2 GROUP BY Nnn
Запрос на отображение нулевого значения:
SQL
1
2
SELECT Nnn, FORMAT(0, 'DD:MM:YYYY HH:MM:SS')
FROM Table2 GROUP BY Nnn
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
20.09.2013, 12:39  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
...
Т.е. то что мне нужно не выдет? мне просто нужен подсчёт потраченного времени.

Может не так объясняю(( Попытаюсь ещё раз но по другому.

в файле запись след. рода:

F1 | F2 |
------------------
N00009 , 13:33:00
N00009 , 13:33:01
N00009 , 13:33:02
N00009 , 13:33:03

Таких строк много. Дабы не загружать этими строками, в DBgrid группируется по F1

в итоге получаем одну строку в dbgrid с записью:

N00009 , 13:33:03

а теперь самое важное нужен подсчет времени на N00009

Получается что на N00009 было потрачено 4 секунды должен отображать в DBgrid так: 00:00:04

Вот как то так(((((
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
20.09.2013, 12:43
Цитата Сообщение от cezer_ak Посмотреть сообщение
4 секунды должен отображать в DBgrid так: 00:00:04
SQL
1
SELECT F1, FORMAT(MAX(F2)-MIN(F2), 'HH:MM:SS') FROM ... GROUP BY F1
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
20.09.2013, 12:48  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
SQL
1
SELECT F1, FORMAT(MAX(F2)-MIN(F2), 'HH:MM:SS') FROM ... GROUP BY F1
Ураааа Спасибо большое Waddonator. как я понял с датой такой трюк не выдет?

Добавлено через 2 минуты
Да не получается пишет в DBgrid дату след рода: 30-12-1899 но время считает правильно.
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
20.09.2013, 12:48
cezer_ak, в том формате, который вы хотите - не выйдет. Можно отображать количество дней целым числом, но перевести его в месяцы и годы нельзя, т.к. в разных месяцах/годах разное количество дней.
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
20.09.2013, 12:51  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
Можно отображать количество дней целым числом
А такое как будет выглядеть? добавить в формат
SQL
1
FORMAT(MAX(F2)-MIN(F2), ''DD HH:MM:SS'')
не получается пишет Поставщик данных вернул состояние E_Fail
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
20.09.2013, 12:58
Берете разницу между датами и отбрасываете время округлением:
SQL
1
SELECT F1, Round(MAX(F2)-MIN(F2),0) FROM ...
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
20.09.2013, 15:08  [ТС]
Цитата Сообщение от Waddonator Посмотреть сообщение
...
Класс огромнейшее спасибо вам Waddonator!!!

Добавлено через 2 часа 7 минут
Цитата Сообщение от Waddonator Посмотреть сообщение
...
Беда , поторопился я с выводом. Не правильно считает( Но это ошибка не ваша. у меня он записывает данные так

Delphi
1
'['+number+']'+' , '+FormatDateTime('hh:mm:ss', Now);
запись каждую секунду в файл.

и получается в файле:

N00009 , 16:00:00
N00009 , 16:00:01
N00009 , 16:00:02 //Тут запись останавливается и через 18 секунд продолжается в след строке
N00009 , 16:00:20

то получается что он мне выводит в DBgrid 23 секунды хотя должен выводить всего 4 секунды.

Я так понимаю нужно создавать на каждую точку остановки переменную запоминать последнее время а там уже считать? Как правильно сделать подскажите.
0
 Аватар для Waddonator
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
20.09.2013, 15:21
Цитата Сообщение от cezer_ak Посмотреть сообщение
то получается что он мне выводит в DBgrid 23 секунды хотя должен выводить всего 4 секунды.
Что Вам нужно, то и отображайте. По вашему приведенному примеру я вижу разницу в размере 20 секунд (а не 23). Машинная логика не может понять, что 20-0=4. Значит у Вас неправильно поставлено условие задачи:
Цитата Сообщение от cezer_ak Посмотреть сообщение
Уже нужно не суммирование а вычитание пример: 19.09.2013 23:18:12 - 19.09.2013 23:18:13 = 00.00.0000 00:00:01
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2013, 15:21
Помогаю со студенческими работами здесь

Как найти пункт назначения и дату adoquery?
Есть база данных созданная,YuryK,выражаю огромную благодарность. на дельфи будем задавать параметры для запроса: пунк назначения и...

Как суммировать время?
Необходимо определить, сколько всего времени студент провел на занятиях. В таблице есть поля Код Студента, Дата, Время начала занятия,...

Как суммировать время (в часах и минутах)
Помогите! Мне нужно сделать запрос, и в нем кроме всего прочего нужно посчитать (суммировать) время в столбце! Как это сделать? Всё...

Как правильно суммировать сумму по столбцам.
т.е. надо чтобы при использования фильтра (запроса SQL) таблица автоматически суммировалась Я использовал два варианта: 1. Бегал...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Подключение 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 - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru