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

База данных и даты с событиями

14.02.2025, 14:19. Показов 4594. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Разрабатываю приложение для больницы в рамках личного использования в котором содержатся отделения, пациенты, данные и даты поступления и перевода. Как организовать чтобы можно было видеть через DBGrid при фильтрации между датами путь пациента? Например: пациент A поступил в терапевтическое отделение 01.02.2025. Был переведен в реанимацию 03.02.2025 (то есть с 03.02.2025 в терапевтическом отделении он перевелся, а в реанимации появился), далее 08.02.2025 он перевелся обратно в терапевтическое отделение и уже 12.02.2025 идет выписка (то есть в отделении реанимации 08.02.2025 перевод, а в терапевтическом с 08.02.2025 он снова появляется)? Сейчас реализовано только возможность отображение пациента в отделении между датами поступления и перевода/выписки. Правильно ли я понимаю, что требуется отдельная таблица с датами движения пациентов, отделений и ключ пациента, который связывает 2 таблицы? В 1 таблице ФИО, паспортная часть
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2025, 14:19
Ответы с готовыми решениями:

Список баз данных SQL-сервера
Как список имен таблиц SQL сервера загнать в combobox? Получить их могу, только они отображаются в dbGrid. Пробовал указать DataSource у...

Перенос баз данных
Всем привет! Есть программка на делфи, которая использует базы данных. Как можно перенести ее и базы на другой комп, и можна...

Настройка псевдонимов баз данных и драйверов
Помогите настроить чтоб приложение с базой данных Paradox открывалось на другом компе без среды разработки пишет (Unknown datebase Alias:...

36
0 / 0 / 0
Регистрация: 21.06.2024
Сообщений: 70
16.02.2025, 11:15  [ТС]
Студворк — интернет-сервис помощи студентам
krapotkin, может я чего-то не понимаю, но мой порядок удобен ведь. Благодаря наличию законченной строки имеется работающая фильтрация по отделениям и нахождение пациента в заданном промежутке. В случае если дробить каждое действие подобное будет невозможно. Плюс каждая строка это дата поступления и законченное действие в виде перевода/выписки/летального исхода, что сразу отображается. Если дата поступления не закрыта, то в программе пациент числится за отделением, которое было введено в последней строке. Прям строгий порядок действий и не требуется ведь - требуется именно отображение поступления в отделение и исход с датой этого события. Ну и на самой истории требуется дата поступления в стационар и выписка для итогового подсчёта койко-дней.
А про поле arrival думал - да, действительно, это будет работать. Только пока так и не придумал как сделать его присвоение. Если в первом случае ещё можно придумать, то на повторную госпитализацию сделать что-то вроде кнопки повторной госпитализации с присвоением +1 к полю arrival? При этом возможность дополнительного фильтра на протоколах для просмотра только текущей госпитализации - добавить данное поле и в таблицу протоколов
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,681
Записей в блоге: 21
16.02.2025, 13:05
1) тема гласит, что ваш удобный вариант - не удобный
2) см. 1)

если чего-то непонятно, всегда есть возможность уточнять до посинения
фильтрация по отделениям - в чем проблема?
есть запись "поступил"
в ней очевидно должно быть какое-то поле - куда поступил.
ставим условие - все записи, у которых arrival из предыдущего поста = "куда поступил"
??

чем повторная госпитализация отличается от первичной?
только тем, что она повторная
можно это вычислить, если смотреть просто историю поступлений
но вдруг предыдущий случай с этим не связан
тогда есть смысл просто сделать поле "related_to" и туда пихать опять же код события первичного поступления

Добавлено через 4 минуты
действия по текущей госпитализация - все записи, у которых arrival_id = <указываем id поступления>
действия по исходной госпитализации - все записи, у которых arrival_id = related_to_id
все действия от исходной до текущей госпитализации - все записи, у которых related_to_id = текущему related_to_id плюс записи у который arrival_id = текущему related_to_id (записи исходной г.)
0
2917 / 1947 / 214
Регистрация: 05.06.2011
Сообщений: 5,767
18.02.2025, 15:21
Цитата Сообщение от Varyag061 Посмотреть сообщение
как в Access в типе даты и время сделать чтобы прописывалось время не 4:00:00, а 04:00:00 - не могу из-за этого адекватно реализовать время поступления и выписки
Вот тут не понял. Какие претензии к Access? У вас морда-то на чём-то другом, судя по ADOQuery и т.п.
Движение между датами — DataPos <= Date2 and DateVyb >= Date1.
0
0 / 0 / 0
Регистрация: 21.06.2024
Сообщений: 70
05.05.2025, 16:26  [ТС]
krapotkin, по истечению времени в конечном итоге требуется на каждое событие своя строка. Для того чтобы в итоге адекватно отобразить все события по пациенту. Вот только возможно ли реализовать все пожелания через одну дату? Условно в таблице Date и в неё записывать и дату поступления, и дату перевода с выпиской? Плюс требуется при переводе пациента чтобы автоматически делалась запись в переводе из текущего отделения и поступлении в другом отделении с единой датой и временем
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,681
Записей в блоге: 21
05.05.2025, 19:41
чтобы адекватно отобразить все события по пациенту, нужно как раз и вести общий список событий по пациенту
дата-время, событие
дата-время, событие
и т.д.
а для каждого типа событий можно вести отдельные дополнительные таблицы
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
09.05.2025, 06:51
Логично иметь такую структуру таблицы событий.
а) Id пациента
б) Дата время события
в) Тип события - (поступил, выписался, умер, проведена операция, взяты анализы и т.д.)
г) Ссылка на доп.инф. по событию (отд.таблица, в завис.от в)
д) Какие-то другие параметры

Добавлено через 5 минут
При этом, при вводе и коррекции этой таблицы, необходим контроль (зашита от дурака), чтобы не возникало абсурдных ситуаций, типа выписался, но ещё не поступил и т.д.

Добавлено через 2 минуты
То. что мы с krapotkin вам советуем - поверьте, это оптимальный вариант, другие решения приведут в конечном итоге к коллизиям и порче БД.

Добавлено через 13 минут
Уточню для ясности -
в) Здесь должен находиться Id (целое число) события из отдельной таблицы-справочника событий.
г) Здесь должен находиться Id (целое число) записи из таблицы данного типа событий.
д) Возможно, Id (целое число) отделения записи из таблицы-справочника отделений, в которое/из которого поступил пациент.

Если осуществляется перевод из отделения в отделение, то формируются 2 записи в таблице событий "переведён в другое отделение" и "переведён из другого отделения". С единой датой/временем, естественно. При этом помнить, что при коррекции одной из этих записей, нужно корректировать и другую.

Добавлено через 5 минут
Другой вариант при переводе - совместить это в одной записи события, но в этом случае будет немного сложнее извлекать данные для построения цепочки по пациенту, хотя это не критично.
0
0 / 0 / 0
Регистрация: 21.06.2024
Сообщений: 70
10.05.2025, 17:00  [ТС]
Massaraksh7, вариант отличный - спору нет. Но возникает вопрос на который пока я не могу получить ответ. Самое основное помимо описания всех событий это фильтрация данных. То есть сейчас идет в одной строке дата поступления и дата выписки/перевода и так далее. На основе этого я использую фильтрацию различную: указываю текущую дату и у меня отображается кто сейчас находится в отделении, подсчёт койко-дней между двумя датами. Будет ли работать адекватно фильтрация при наличии только даты события? На неё так же потребуется завязать подобный код
Pascal
1
2
3
4
5
SELECT * FROM Baza INNER JOIN Dvizh ON Baza.id=Dvizh.id Where Otd3='
                  + '"' + ADOQuery1.FieldByName('otd').AsString +
                  '" and  (DateVyb IS NULL and :DateFrom BETWEEN DataPos and 9999-31-12) OR Otd3='
                  + '"' + ADOQuery1.FieldByName('otd').AsString +
                  '" and (:DateFrom1 BETWEEN DataPos and DateVyb) ORDER BY DateVyb ASC
То есть есть основная база с пациентами (1), есть таблица с движением пациента (связь через id) (2) и есть дата поступления (DataPos), дата перевода/выписки и так далее (DateVyb). При этом ещё отдельно прописан пункт по которому DateVyb может отсутствовать - удобно если пациент находится в отделении без события. Плюс в одной строке есть закрепление пациента между двумя этими датами на отделение.
Заключение: фильтрация идёт по отделению, между двумя датами есть 3 дата - текущая. Возможно ли реализовать подобное при наличии только даты события?
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
10.05.2025, 17:27
Цитата Сообщение от Varyag061 Посмотреть сообщение
То есть есть основная база с пациентами (1), есть таблица с движением пациента (связь через id)
Не совсем так методологически. То, что вы называете основной базой с пациентами - это всего лишь справочник пациентов. А то, что вы называете "таблица с движением пациента" - это и есть главная таблица, от которой пляшется всё остальное.
Цитата Сообщение от Varyag061 Посмотреть сообщение
ON Baza.id=Dvizh.id
Не может id одной таблицы сравниваться с id другой таблицы, поле надо назвать как-то по-другому, например
ON Baza.id=Dvizh.idpatient
Цитата Сообщение от Varyag061 Посмотреть сообщение
Возможно ли реализовать подобное при наличии только даты события?
Да, конечно.
0
0 / 0 / 0
Регистрация: 21.06.2024
Сообщений: 70
10.05.2025, 18:02  [ТС]
Massaraksh7, там не сравнение идёт, а сопоставление. То есть связь 2х таблиц идёт через поле id. Данных для сравнения между двух таблиц нет - они взаимодополняют друг друга. Все данные для сравнения идут из одной таблицы названной Dvizh
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
10.05.2025, 18:28
Я, к сожалению, не работал конкретно с базой Access, но во всех СУБД в таблицах именем Id обычно называют первичный уникальный автоинкрементный ключ, который никак не сопоставляется с Id других таблиц.
0
0 / 0 / 0
Регистрация: 21.06.2024
Сообщений: 70
10.05.2025, 19:17  [ТС]
Massaraksh7, первичный уникальный ключ просто назван другим именем. Поэтому расхождения нет в этом
А как SQL запрос создать для сравнения между датами из одной строки на примере запроса выше?
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
10.05.2025, 20:26
Я лично с Dbgrid не работаю, и вам не советую. Составляю запросы на выборку минимально необходимых данных в память, там их обрабатываю, фильтрую, если нужно, и отображаю в Stringgrid. Уверен, это можно сделать и одним запросом. Но для этого нужно иметь конкретную структуру БД, и конкретный вид отображаемых данных.
0
130 / 109 / 22
Регистрация: 23.05.2015
Сообщений: 724
10.05.2025, 21:01
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Уверен, это можно сделать и одним запросом. Но для этого нужно иметь конкретную структуру БД, и конкретный вид отображаемых данных.
Золотые слова. Однако!
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
11.05.2025, 01:41
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
Не может id одной таблицы сравниваться с id другой таблицы, поле надо назвать как-то по-другому
Это почему же?
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
во всех СУБД в таблицах именем Id обычно называют первичный уникальный автоинкрементный ключ
Кто называет?
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,748
Записей в блоге: 7
11.05.2025, 10:55
Цитата Сообщение от northener Посмотреть сообщение
Это почему же?
"Можно всё, но зачем?" (с)
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,681
Записей в блоге: 21
11.05.2025, 21:18
Когда вопрос ставится - имею ли я право называть поля как хочу? - да конечно, на здоровье.
Только сами потом и @ с ними.

Очень, крайне, неприлично часто мейнстримовые фреймворки или фичи подразумевают, что разработчик не только писатель, а еще читатель, и знает пару-тройку отраслевых стандартов.
В этом случае все справочники автоматически (магически) линкуются по ключам, подключаются разные там связи и т.д.
А еще следующий разработчик, которому выпала высокая честь разбираться в вашем продукте после вас, не тратит слишком много денег на проработку травм у психолога.

Поэтому таблицы называются по имени сущностей в мн.ч., ключевые поля обычно называются id, а ссылки на них - имя сущности в ед.ч. + _id
И жить становится полегче.

Но это, конечно, принижает креативность и не дает развернуться настоящему таланту с большой, как имена классов в делфи, буквы Т.

Добавлено через 1 минуту
P.S. ключ не обязательно автоинкрементный
Если БД любит реплицироваться, или подгружать данные из внешних источников, то хороший выбор - современные time-based GUIDs
1
Эксперт Pascal/Delphi
 Аватар для droider
4893 / 2826 / 867
Регистрация: 04.10.2012
Сообщений: 10,278
25.07.2025, 15:12
Цитата Сообщение от iifat Посмотреть сообщение
я-то работаю в Пенсионном фонде
какой регион ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2025, 15:12

Привязка баз данных
Добрый день програмисты, меня девушка попросила чтоб я у вас спросил - как привязать базу данных? по ссылке эт архив что она сделала, и там...

Создание многозвенного приложения для обработки баз данных SQL server.
Всем здравствуйте. Я хочу в приложении для обработки БД предоставить выбор имени базы данных пользователем. Хочу сделать так, чтобы в...

нужна пояснительная записка к курсовой работы по delphi на тему разработка баз данных автомобильного салона Премьер - Авто и сама прога если можно ...
нужна пояснительная записка к курсовой работы по delphi на тему разработка баз данных автомобильного салона Премьер - Авто и сама прога...

Вывод дат из базы в виде дерева
Подскажите как можно организовать такую функцию: имеется база данных, в ней в поле Date хранящее дату (число.месяц.год) нужно через...

Использование Access баз данных
Как написать правильно SQL запрос для Query, чтобы выдавались только строки таблицы где дата меньше или больше указанной: например, ...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости. Решение: Создан документ со следующими. . .
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово. Решение: Создан документ с единственным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru