0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 15
1

Выбор таблицы при вводе данных в базу

02.09.2017, 12:00. Показов 587. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
База данных ACCESS.
Cхема на рисунке.
https://www.cyberforum.ru/atta... 1504342060
Таблицы: Наблюдатели, Птицы, Встречи, Поведение и 4-е таблицы вариантов поведения. Вообщем Наблюдатель встречает объект и по его поведению данные о нем заносятся в одну из четырех таблиц. Через таблицу Поведение - привязаны данные Встреч ко всем 4-м вариантам поведения по принципу многие-ко-многим. Никак не могу решить проблему: при вводе данных для одного варианта поведения - требуется ввод данных и для остальных 3-х. Как в ACCESS-е можно реализовать этот выбор - так чтобы вводить данные только для одной выбранной таблицы?
Ниже код реализующий ввод данных с вариантом поведения - таблица Observations .. при котором вылетает ошибка: .. для обеспечения целостности данных необходимо наличие связанной записи в таблице Migrations. В примере подключены только 2-е из 4-х таблиц.
Некоторые пояснения к коду:
adotb1->Birds - Объекты
adotb2->Watchers - Наблюдатели
adotb3->Meets - Встречи
adotb4->Behaviors - Поведение
adotb5->Observations - ПростоеПоведение
adotb6->Migrations - МиграционноеПоведение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//---------------------кнопка Добавить-----------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
adotb1->Append();
adotb2->Append();
adotb3->Append();
adotb4->Append();
adotb5->Append();
//adotb6->Append();
}
//------------------------кнопкаПрименить---------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TLocateOptions SearchOptions;
if(adotb1->Locate("BName", DBComboBox1->Text, SearchOptions<<loPartialKey<<loCaseInsensitive) == true)
{
    adotb3->FieldByName("ID_bird")->AsInteger = adotb1->RecNo;
}else
{
    adotb1->FindLast();
        adotb3->FieldByName("ID_bird")->AsInteger = adotb1->RecNo + 1;
}
if(adotb2->Locate("WName", DBComboBox2->Text, SearchOptions<<loPartialKey<<loCaseInsensitive) == true)
{
    adotb3->FieldByName("ID_watcher")->AsInteger = adotb2->RecNo;
}else
{
    adotb2->FindLast();
        adotb3->FieldByName("ID_watcher")->AsInteger = adotb2->RecNo + 1;
}
 
if(adotb3->Modified == true)
    adotb3->Post();
if(adotb5->Modified == true)
    adotb5->Post();
 
adotb3->FindLast();
adotb4->FieldByName("ID_meet")->AsInteger = adotb3->RecNo;
adotb5->FindLast();
adotb4->FieldByName("ID_observation")->AsInteger = adotb5->RecNo;
//adotb4->FieldByName("ID_migration")->AsInteger = 0;
if(adotb4->Modified == true)
    adotb4->Post();
Миниатюры
Выбор таблицы при вводе данных в базу  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2017, 12:00
Ответы с готовыми решениями:

При вводе данных в базу данных вводятся лишь цифры
Доброго времени суток, столкнулся с ненастью, при добавлении данных в базу данных заносятся лишь...

Ошибка при вводе пароля в базу данных. Что делать?
Добрый вечер. Такое задание - создать форму, которая обеспечивает разноуровневый доступ (то есть...

Функция. Выборка данных из таблицы при вводе месяца
Есть пользовательская функция SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE...

Заполнение данных из таблицы при вводе ИНН в форму
Добрый день. Как сделать что бы при вводе ИНН в форме &quot;ФормаОбщая&quot; автоматически заполнялись...

4
6 / 4 / 4
Регистрация: 26.06.2017
Сообщений: 135
04.09.2017, 23:36 2
Все верно, для создания записи в таблице Behaviors все её поля, имеющие связи с другими таблицами, должны быть заполнены. Вам нужно изменять структуру базы данных.

Либо могу предложить костыль - в каждой таблице создать некую служебную запись, со значением, например 00000. Вы вводите данные только для одной таблицы, а в остальных выбирается эта служебная запись. Делать так крайне не рекомендую, ибо если удалить эту запись, произойдет каскадное обновление данных и удалится куча записей в других таблицах.

Есть ли действительно необходимость создавать отдельные таблицы для разных поведений? Можно создать одну, а в ней добавить поле Тип поведения
0
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 15
05.09.2017, 01:35  [ТС] 3
"..Можно создать одну, а в ней добавить поле Тип поведения"
Но ведь каждое поведение обладает кучей атрибутов (от 6 до 9) - присущих только ему (у меня в таблицах на рис. не все введены). А как потом в запросе по конкретному поведению вывести данные .. или может я не правильно себе представляю предложенный вариант?
0
6 / 4 / 4
Регистрация: 26.06.2017
Сообщений: 135
06.09.2017, 01:37 4
А, тогда да, целесообразно делать разные таблицы. В таком случае, правильным будет создать буферные таблицы, вот таким образом.
Миниатюры
Выбор таблицы при вводе данных в базу  
0
0 / 0 / 0
Регистрация: 30.05.2016
Сообщений: 15
06.09.2017, 03:19  [ТС] 5
Благодарю .. буду пробовать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2017, 03:19
Помогаю со студенческими работами здесь

Как подсветить ячейки заголовка при вводе данных в ячейку таблицы?
При вводе данных в поля таблицы как обеспечить подсветку соответствующих ячеек верхней строки и...

Как перенаправить в другую базу данных при вызове конкретной строки из таблицы другой базы данных?
Здравствуйте добрые люди! У меня вопрос о базе данных. Есть несколкько баз данных,в каждом из них...

Триггер на заполнение поля в дочерней таблице из другой таблицы при вводе данных в дочернюю
Необходимо заполнить поле date_admission в таблице deliveries(дочерняя), взяв значение date_end из...

Выбор данных из другой таблицы при заполнении поля
Приветствую. Подскажите пожалуйста. Есть база данных, созданная в SQL SERVER. Имеет 3 таблицы....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru