2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331

Как сделать проверку на добавление записи в БД

13.05.2021, 14:29. Показов 5827. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть таблица расписание (raspisanie) куда я добавляю запись о каком-либо занятий группы. И мне нужно как-то сделать проверку на то, чтобы один преподаватель не мог вести в одинаковое время 2 пары. И ещё, чтобы нельзя было добавлять занятие для группы, если например у этой группы уже есть занятие в это время. Время получается из (id_day(это день недели) и id_para(это время пары)). Преподаватель может преподавать несколько дисциплин, и он указан в таблице discipline_academic как id_teacher. Помогите пожалуйста.
Миниатюры
Как сделать проверку на добавление записи в БД  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2021, 14:29
Ответы с готовыми решениями:

Как сделать проверку на свободное время для записи в Yii2?
разрабатываю систему для записи съемок , хотелось бы узнать как проверять на свободное время человека для записи, день и время, (аналогия...

Как сделать добавление записи через ADOTable?
Как осуществить добавление записи через ADOTable, чтобы он был в новой форме и там 6 столбцов

Сделать проверку на добавление данных в listbox
На форме listbox, текстовое поле, кнопка по кнопке в listbox добавляется тест, введенный в текстовое поле: ...

42
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
14.05.2021, 07:30
Студворк — интернет-сервис помощи студентам
Создание расписания чтоль? Генетический алгоритм?
0
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
14.05.2021, 08:59
Цитата Сообщение от Usaga Посмотреть сообщение
Какие категоричные заявления пошли)
Это не заявления, это объективный факт. Даже по этому треду видно - простое и естественное условие для pg задаётся парой строк, в то время как для того же ms никто ничего показать не смог.
0
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
14.05.2021, 10:36
... а если доцент Первозванный залогинился, но отошел налить чашку кофе, а в это время ассистент Молодаядаранняя успела перехватить пару - индекс поможет?
0
Эксперт .NET
 Аватар для Usaga
14330 / 9423 / 1356
Регистрация: 21.01.2016
Сообщений: 35,517
14.05.2021, 11:31
mashmed135, не объективный это факт, а просто мнение ваше личное. Точно так же индекс и в MS SQL навешивается и в MySQL и в Firebird.

А что объективно так это то, что ТС, судя по всему, ни в зуб ногой, чтобы вообще хоть какой-то совет понять. Но выкладывать ему примеры для Postgres, когда он работает с MS SQL Server это, конечно, вообще классное решение.
0
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
14.05.2021, 11:43
Цитата Сообщение от Usaga Посмотреть сообщение
Точно так же индекс и в MS SQL навешивается и в MySQL и в Firebird
Нет, очевидно. Иначе почему ни вы, ни кто-либо ещё этого не сделали? А ответ один - ничего там не навешивается. Точнее, навешивается, но не индекс, а портянка которую даже писать лень.
Цитата Сообщение от Usaga Посмотреть сообщение
А что объективно так это то, что ТС, судя по всему, ни в зуб ногой, чтобы вообще хоть какой-то совет понять.
Ну это мало кого интересует, да и сам ТС мне не интересен в силу тех же причин.
Цитата Сообщение от Usaga Посмотреть сообщение
Но выкладывать ему примеры для Postgres, когда он работает с MS SQL Server это, конечно, вообще классное решение.
Это единственное адекватное и действительно классное решение. Тот факт, что ТС ничего не знает и не может оправданием не является, очевидно. Как и то, что вам и некоторым другим людям хозяин не дал выбора и вы вынуждены работать с ms.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
14.05.2021, 11:45  [ТС]
Usaga, В том то и дело, что не могу. Я за этим запросом и пришёл
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
14.05.2021, 12:13
danhiroman, Вы так и не ответили на вопрос, через какие инструменты Вы работаете с базой.
Вы код можете свой привести ?
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
14.05.2021, 12:19  [ТС]
MsGuns, Добавляю данные в базу, изменяю их и удаляю с помощью LINQ2SQL
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
14.05.2021, 12:24
Цитата Сообщение от danhiroman Посмотреть сообщение
MsGuns, Добавляю данные в базу, изменяю их и удаляю с помощью LINQ2SQL
Где код, в последний раз спрашиваю ?
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
14.05.2021, 12:26  [ТС]
MsGuns, Вот пример добавления записи в БД.
C#
1
2
3
4
5
6
7
8
9
10
11
12
            int number = findFreeID();
            DataContext db = new DataContext(connectionString);
            if (cmbGroup.SelectedValue != null && cmbDiscipline.SelectedValue != null && cmbPara.SelectedValue != null && cmbOffice.SelectedValue != null && cmbDay.Text.Length > 0)
            {
                if (OfficeIsFree())
                {
                    Raspisanie raspisanie1 = new Raspisanie { Id = number, IdDiscipline = Convert.ToInt32(cmbDiscipline.SelectedValue), IdOffice = Convert.ToInt32(cmbOffice.SelectedValue), IdPara = Convert.ToInt32(cmbPara.SelectedValue), DayWeek = Convert.ToInt32(cmbDay.SelectedValue) }; // объект для добавления в БД
                    db.GetTable<Raspisanie>().InsertOnSubmit(raspisanie1);
                    db.SubmitChanges();
                    UpdateDGV();
                }
            }
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
14.05.2021, 12:48
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
// Проверка на существование дубликатов в критичных полях Raspisanie
if (db.Raspisanie().Where({здесь выражение выборки по условиям}).FirstOrDefault() != null)
{
   MessageBox.Show("В базе уже назначена пара");
   return false;
}
Raspisanie raspisanie1 = new Raspisanie { Id = number, IdDiscipline = Convert.ToInt32(cmbDiscipline.SelectedValue)
               , IdOffice = Convert.ToInt32(cmbOffice.SelectedValue)
               , IdPara = Convert.ToInt32(cmbPara.SelectedValue)
               , DayWeek = Convert.ToInt32(cmbDay.SelectedValue) }; // объект для добавления в БД
db.GetTable<Raspisanie>().InsertOnSubmit(raspisanie1);
 db.SubmitChanges();
 UpdateDGV();
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
14.05.2021, 13:16  [ТС]
MsGuns, Это всё конечно хорошо. Но проблема собственно заключается в написание выражения для выборки. Информация о группах и учителе не содержится напрямую в Raspisanie. Там содержится только поле id_discipline, которое вводит пользователь и в котором как раз хранятся id_teacher и id_group. Получается что мне нужно. Мне надо получить значения id_teacher и id_group на основе выбранной пользователем дисциплины из Combobox, и потом сравнить их с теми полями в БД (при этом при сравнении нужно постоянно, получать из id_discipline значения соответствующих id_group и id_teacher.), в которых id_day и id_para совпадают с введёнными в соответствующих combobox. Но как это записать программно я незнаю.
0
 Аватар для Andrey-MSK
3363 / 2249 / 388
Регистрация: 14.08.2018
Сообщений: 7,603
Записей в блоге: 4
14.05.2021, 13:58
Цитата Сообщение от danhiroman Посмотреть сообщение
Информация о группах и учителе не содержится напрямую в Raspisanie.
Сделайте VIEW на сервере на основе нужных таблиц и по нему проверяйте.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
14.05.2021, 14:27
Цитата Сообщение от danhiroman Посмотреть сообщение
проблема собственно заключается в написание выражения для выборки. Информация о группах и учителе не содержится напрямую в Raspisanie. Там содержится только поле id_discipline, которое вводит пользователь и в котором как раз хранятся id_teacher и id_group. Получается что мне нужно. Мне надо получить значения id_teacher и id_group на основе выбранной пользователем дисциплины из Combobox, и потом сравнить их с теми полями в БД (при этом при сравнении нужно постоянно, получать из id_discipline значения соответствующих id_group и id_teacher.), в которых id_day и id_para совпадают с введёнными в соответствующих combobox. Но как это записать программно я незнаю.
И что Вам мешает добавить в Модель новый класс, содержащий "расшифрованную" информацию о всем, что Вам нужно, а потом через Linq запросом с join-ми выбирать данные с условиями, заданными комбобоксами и текстбоксами ? И вместо Raspisanie подставить в выражение if выборку из этой новой модели ?

Добавлено через 4 минуты
И еще одно. Если учителя и группу Вы выбираете из списков (ComboBox), то не надо никакой новой модели, просто добавьте в комбобоксы кроме отображаемых строк еще и Value, куда и заносите айдишники. Их-то и извлекайте для подстановки в запрос на выборку для проверки.

Добавлено через 34 секунды
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Сделайте VIEW на сервере на основе нужных таблиц и по нему проверяйте.
Из пушки по воробьям

Добавлено через 5 минут
danhiroman, Перечитал внимательно еще раз [32].
Возникли некоторые мысли:
Цитата Сообщение от danhiroman Посмотреть сообщение
Информация о группах и учителе не содержится напрямую в Raspisanie
Очень странное "расписание", не находите ?
Цитата Сообщение от MsGuns Посмотреть сообщение
Там содержится только поле id_discipline, которое вводит пользователь и в котором как раз хранятся id_teacher и id_group
Т.е. у Вас дисциплина жестко привязана к учителю и группе ? А если история читается тремя разными учителями 20 разным группам, как тогда ?
Цитата Сообщение от danhiroman Посмотреть сообщение
Мне надо получить значения id_teacher и id_group на основе выбранной пользователем дисциплины
Связанный запрос + новая модель, которую этот запрос извлекает из нескольких связанных таблиц.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
14.05.2021, 14:40  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Т.е. у Вас дисциплина жестко привязана к учителю и группе ? А если история читается тремя разными учителями 20 разным группам, как тогда ?
По поводу этого. У меня есть 2 таблицы. Одна просто таблица дисциплин всех, и потом ещё таблица дисциплин специально для группы. Тоесть там может быть такое, что например историю ведет 3 учителя и история преподается разным группа. Просто каждый будет иметь отдельную запись в discipline_academic
0
 Аватар для Andrey-MSK
3363 / 2249 / 388
Регистрация: 14.08.2018
Сообщений: 7,603
Записей в блоге: 4
14.05.2021, 14:44
Цитата Сообщение от MsGuns Посмотреть сообщение
Из пушки по воробьям
А зачем на клиенте городить кучу джоинов, когда на сервере запустил представление (по сути просто запрос, который и отработает быстрее, чем джоины в ORM), по нему проверил что надо и на клиенте уже записал необходимое
Ну и конечно под это представление сделать модель в клиенте.
А так проверки можно делать по разному, один из вариантов с MERGE и временной таблицей. Передаем новые данные во времянку, с помощью MERGE проводим все проверки и выполняем что надо из условия, либо отклоняем добавление, либо переписываем, либо удаляем Ну и в клиенте ловим эксепшены, которые генерируем в хранимке с MERGE.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
14.05.2021, 17:47  [ТС]
MsGuns, Спасибо за помощь и потраченное время. Вроде бы получилось сделать проверку.
0
Эксперт .NET
 Аватар для Usaga
14330 / 9423 / 1356
Регистрация: 21.01.2016
Сообщений: 35,517
18.05.2021, 09:10
Цитата Сообщение от mashmed135 Посмотреть сообщение
Нет, очевидно. Иначе почему ни вы, ни кто-либо ещё этого не сделали? А ответ один - ничего там не навешивается. Точнее, навешивается, но не индекс, а портянка которую даже писать лень.
Я не стал ничего советовать потому, что уже надоело такие вещи советовать. А MsGuns в первом же посте про индекс уникальный сказал.

Цитата Сообщение от mashmed135 Посмотреть сообщение
Это единственное адекватное и действительно классное решение.
Адекватное решение - посоветовать сменить СУБД?
0
112 / 110 / 30
Регистрация: 08.05.2021
Сообщений: 485
18.05.2021, 09:59
Цитата Сообщение от Usaga Посмотреть сообщение
уже надоело такие вещи советовать
Это всего лишь оправдания. Я уже сообщал - индекс в ms не навешивается.
Цитата Сообщение от Usaga Посмотреть сообщение
А MsGuns в первом же посте про индекс уникальный сказал
Я уже отвечал на это - говорить его не просили, просили показать. Зачем ты пишешь про "сказал" когда речь о другом?

Кстати, выше он привёл код, в котором ошибся именно так, как я и сказал. Смотри sql в базу от этого кода, если интересно. Не поймёшь - пасти полную транзакцию сюда, попробую объяснить.
Цитата Сообщение от Usaga Посмотреть сообщение
Адекватное решение - посоветовать сменить СУБД?
Во первых, никакой смены СУБД здесь нет, есть выбор СУБД, поскольку ничего не готово. Во вторых, если уж не повезло выбрать сразу нормально, заменить большой проблемы не представляет.
0
18.05.2021, 13:47

Не по теме:

Цитата Сообщение от mashmed135 Посмотреть сообщение
Я уже сообщал - индекс в ms не навешивается.
Эх, жаль, что вас так рано забанили и вы не успели рассказать про это подробнее

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

Подскажите как сделать форму добавление записи в DBGrid
Привет, проблема такая: есть DBGrid, и есть кнопка &quot;Добавить&quot; если ее нажать должна появится форма с Label-амы и Edit-амы их должно...

Как сделать добавление/редактирование/удаление записи в dbgrid?
подскажите, пожалуйста, как сделать добавление/редактирование/удаление записи в dbgrid? проект и базу прикрепляю. и еще такой...

Как сделать добавление записи через запрос в Access
Нужно сделать добавление записи в datagridview через запрос , через отдельную форму, не получается. проект ниже

Как сделать проверку на пустую строку и проверку что в слове нет повторяющихся букв
string r; string word; int output; Console.Write(&quot;Введите слово : &quot;); ...

Как добавлять записи в файл, делая проверку на пустые записи
k = 0 'Ñ÷åò÷èê ïócòûõ çàïèñåé For x = 0 To 7 If Text1(x).Text = &quot;&quot; Then Shape1(x).Visible = True k = k + 1 ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru