1 (edited by tserduk 2021-10-13 07:04:53)

Topic: Спортивные программы.

Какую формулу или скрипт нужно применить для расчета результата спортсменов, при известных времени старта и финиша?
То есть, нужно вычесть время старта из времени финиша и записать в ячейку результат. В готовых формулах такого нет.

2 (edited by CDB 2021-10-13 09:23:28)

Re: Спортивные программы.

Do you need to store the calculations in the database or just view them?

If just viewing you will need to write a 'calculated field' entry. This means everytime you view the record the time will be calculated on the spot as you look at the record.

To do this on the database setup page find the table that has the start and finish times and make a new calculated field:


Field Name:   timings

strftime(%s, TABLE_NAME.your_field_finishtime) - strftime(TABLE_NAME.your_field_starttime)

On a clear disk you can seek forever

3 (edited by tserduk 2021-10-13 09:43:26)

Re: Спортивные программы.

Понятно, спасибо. Все получилось.

Re: Спортивные программы.

Еще одна проблема, как умножить одно поле на другое, причем одно -- это время, а второе -- целое число.
Если написать просто, то это должно быть вот так:
0:20:00 * 2 = 0:40:00

5 (edited by sparrow 2021-10-13 22:35:36)

Re: Спортивные программы.

Все будет корректно до 23:59:59. 24 часа отобразится снова как  00:00:00.
Обработка в формате более 24 часов потребует изменить решение


Для SQLite

00:20:00 * 5


1.пересчитать время в секунды
  00:20:00 = 1200
2.умножить на 5
  1200 * 5 = 6000
3. в sqlite используем функцию time()
  time(6000, 'unixepoch') = 01:40:00


01:45:00 * 2
6300 * 2
time(12600, 'unixepoch') = 03:30:00

SELECT TIME((STRFTIME('%s', '01:45:00'))*2, 'unixepoch')

Для скрипта:

Form1.Edit1.Text := TimeToStr(StrToTime('01:45:00')*2);
= 03:30:00

Re: Спортивные программы.

Ввожу:

TIME((STRFTIME('%s',time(Mtime))*2 , 'unixepoch')

Пишет:

near ",": syntax error

В чем проблема?

Re: Спортивные программы.

tserduk wrote:

Ввожу:

TIME((STRFTIME('%s',time(Mtime))*2 , 'unixepoch')

Пишет:

near ",": syntax error

В чем проблема?

а что вы хотите сделать ?
Просто умножить Mtime * 2 ?

Тогда

SELECT TIME((STRFTIME('%s', Mtime))*2, 'unixepoch')

Re: Спортивные программы.

Не все так просто, мне нужно значения в одном столбце умножить на значение в другом и поместить в третий. В первом это "время" во втором целые числа 1 или 2, в третьем снова "время". Плюс еще значение третьего идет в качестве аргумента в вычислениях четвертого.
Мне кажется, все это невозможно сделать в вычисляемых полях, как только значение вычисляемого поля появляется в вычислениях другого, программа сразу выдает ошибку "такого столбца не существует".
Не знаю как быть. Скрипты я еще писать не умею.

9 (edited by sparrow 2021-10-14 13:37:15)

Re: Спортивные программы.

Умножить и поместить это не проблема.
Необязательно записывать вычисленное значение.Значение можно вычислить моментально в любом запросе и подставить для решения дальше. Все зависит от объема базы даных ее структуры и выводимой информации.

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

Если у вас до этого небыло опыта работы с базами данных можно прочитать здесь
http://myvisualdatabase.com/forum/misc. … download=1
Советую обратить внимание на тему k245
http://myvisualdatabase.com/forum/viewtopic.php?id=4593

Re: Спортивные программы.

Задача такая:
В поле "Время на дистанции" записан результат по секундомеру. В поле "Пропуск КП" -- количество пропусков, максимум -- 2. В поле "Штраф за пропуск" -- 20 минут, умноженные на значение поля "Пропуск КП", ну и конечный результат, где все это складывается, в поле "Результат".
В EXCEL  это займет 30-40 секунд. Но  EXCEL меня и многих других секретарей соревнований не устраивает из-за ненадежности и легкости потери данных.
Уже сутки не могу решить задачу.

Re: Спортивные программы.

В базе данных вам достаточно хранить информацию Время на дистанции, Пропуск КП, Штраф за пропуск(20 мин).
Соответственно в программе должны быть поля для ввода этих данных. .
Вычисления для поля Результат можно производить в вычисляемом поле для вывода в таблице на экран или в репорт.


Вот что должно быть в вычисляемом поле:


Время на дистанции + (Пропуск * Штраф за пропуск)

TIME((STRFTIME('%s', Время на дистанции) + STRFTIME('%s', Штраф за пропуск) * Пропуск КП), 'unixepoch')

Re: Спортивные программы.

Я так делал, не получается, пишет "invalid действия с плавающей точкой". Не хочет умножать время на число.
Вот это выражение не работает -- strftime('%s',time(TimeTaxO)*(taxO))

13 (edited by sparrow 2021-10-15 07:45:23)

Re: Спортивные программы.

tserduk wrote:

Я так делал, не получается, пишет "invalid действия с плавающей точкой". Не хочет умножать время на число.
Вот это выражение не работает -- strftime('%s',time(TimeTaxO)*(taxO))


Я прошу прощения, но где у меня в примере такая строчка как у вас ?

TIME((STRFTIME('%s', Время на дистанции) + STRFTIME('%s', Штраф за пропуск) * Пропуск КП), 'unixepoch')

Прежде чем дать вам я проверил работает ли это.

Вот проверка

TIME((STRFTIME('%s', '00:45:00') + STRFTIME('%s', '00:20:00') * 2), 'unixepoch')
01:25:00

Re: Спортивные программы.

Если у вас "Время на дистанции", "Штраф за пропуск" определено в программе как  ДатаВремя или Время, а "ПропускКП" как целое то никаких дополнительных преобразований Time() не требуется. Просто используйте мой пример но подставьте свои поля данных из таблицы.

Re: Спортивные программы.

Большое спасибо! Все получилось. Я учусь.