Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614

Отношение между несколькими таблицами

27.10.2016, 22:59. Показов 1328. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Тема в принципе похожа на предыдущую, но все же отличается.
Итак, есть три таблицы - Data, History, TypeHistory. Data, TypeHistory - независимые таблицы(нет внешних ключей). History - зависимая таблица(Зависит от ключей Data.id и TypeHistory.id)
Есть форма; DataGridView, который отображает таблицу Data. У DataGridView есть событие CellDoubleClick, которое срабатывает, когда щелкнули по строке мышкой дважды. В обработчике события происходит следующее - создается новая форма; ComboBox, который привязан к TypeHistory; DataGridView, который привязан к History.Делаю отображение в DataGridView зависимым от выбранного пункта в ComboBox вот так:
C#
1
2
3
4
...
this.historyBindingSource.DataMember = "FK_History_ToTypeHistory";
this.historyBindingSource.DataSource = this.typeHistoryBindingSource;
...
Теперь при переходе с пункта на пункт в ComboBox происходит выборка в DataGridView, которая отображается таблицу History.
И собственно вопрос: А как же сделать так, чтобы выборка в History происходила еще по ключу в таблице Data? Тоесть при двойном нажатии кнопки мыши по строке в DataGridView, которая отображает таблицу Data, выводило в DataGridView, которая отображает History, только те строки, которые зависят от выбранной строки в таблице Data, и вдобавок еще от таблице TypeHistory(при переключении пунктов в ComboBox)?
Впринципе можно создать метод в Adapter'е от таблицы History, который принимает id от таблицы Data, и в этом методе производить запрос на базу с "WHERE id_data = @id...", но я считаю это глупо, так как база уже загружена в DataSet, и лишнии запросы слать не строит.Кто нибудь знает как решить такую задачу? Очень буду благодарен
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2016, 22:59
Ответы с готовыми решениями:

Отношение между таблицами
Есть какой- то класс, который мог сливать БД в DataSet таблицы с отношениями? что бы их в ручную не писать

Отношение между таблицами
Привет всем. Такой вопрос. Хочу создать отношение между двумя таблицами по foreign key. К примеру таблицы: CREATE TABLE . ( ...

Отношение между двумя таблицами
Привет всем. Есть две таблицы - Card и Pooshren. У Card есть первичный ключ(столбец itemperson). У pooshren есть столбец itemparent - это...

16
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
28.10.2016, 09:29
Цитата Сообщение от Bretbas Посмотреть сообщение
Впринципе можно создать метод в Adapter'е от таблицы History, который принимает id от таблицы Data, и в этом методе производить запрос на базу с "WHERE id_data = @id...", но я считаю это глупо, так как база уже загружена в DataSet, и лишнии запросы слать не строи
глупо клиента нагружать инфой, совершенно ему не нужной
0
6 / 6 / 4
Регистрация: 20.10.2014
Сообщений: 393
28.10.2016, 13:51
Можно сделать обработчик на нажатие в Грид и запоминать ячейку с ключом, а дальше простой Select с условием (в условии переменная которая заполнилась после нажатия на ячейке в грид).
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
28.10.2016, 23:07  [ТС]
pincet, твои предложения?)
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
30.10.2016, 11:10  [ТС]
Так как же сделать? Кто нибудь а курсе? По любому как то можно автоматически сделать, без кода. Ведь с двумя таблицами можно
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
30.10.2016, 13:33
Цитата Сообщение от Bretbas Посмотреть сообщение
pincet, твои предложения?)
ты же жЪ не слушаешь ответы. или не хочешь их понимать.
А за
Цитата Сообщение от Bretbas Посмотреть сообщение
По любому как то можно автоматически сделать, без кода.
+100500 к репе. Больше бы таких "погромистов"
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
30.10.2016, 18:19  [ТС]
pincet, я слушаю ответы, просто я иной раз не понимаю их. К примеру вот ответ:
Можно сделать обработчик на нажатие в Грид и запоминать ячейку с ключом, а дальше простой Select с условием (в условии переменная которая заполнилась после нажатия на ячейке в грид).
Ты думаешь, я сам не знал, что так можно сделать? Зачем тогда эти foreign key, если с помощью Select в DataSet можно получить любую инфу.

Я считаю, что если сделана автоматическая выборка в DataGridView на примере двух таблиц, то эту выборку модно сделать и на примере трех таблиц, четырёх и тд.
И если Вы мне не можете помочь в этом, то не надо говорить, что я не слушаю ответы
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
30.10.2016, 19:14
Bretbas, по-хорошму, не нужно вообще всё разом вытягивать на клиента, если в этом нет необходимости. Я бы в такой ситуации данные тащил бы только по мере надобности - щёлкнул юзер на строке, мы новый запрос базе, юзеру - форму с подробностями.

Так, что не грей голову, и в обработчике двойного щелчка делай новый запрос.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
31.10.2016, 08:58
Цитата Сообщение от Bretbas Посмотреть сообщение
Зачем тогда эти foreign key
FK нужны исключительно для обеспечения ссылочной целостности данных.
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
31.10.2016, 20:33  [ТС]
pincet
FK нужны исключительно для обеспечения ссылочной целостности данных.
Объясни зачем она нужна в данной задаче? По идее если я буду обращаться на базу с запросом за данными, постоянно когда это нужно, то я могу обойтись и без FK

Добавлено через 1 минуту
Usaga,
по-хорошму, не нужно вообще всё разом вытягивать на клиента, если в этом нет необходимости. Я бы в такой ситуации данные тащил бы только по мере надобности - щёлкнул юзер на строке, мы новый запрос базе, юзеру - форму с подробностями.

Так, что не грей голову, и в обработчике двойного щелчка делай новый запрос.
Я согласен, но...я же уже при загрузки формы выкачал всю базу в DataSet! Теперь мне не нужно обращаться к ней, я буду работать с DataSet, а потом перед закрытием формы сохраню все разом в базу(все изменения)
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.11.2016, 08:50
Цитата Сообщение от Bretbas Посмотреть сообщение
я же уже при загрузки формы выкачал всю базу в DataSet!
особенно тебя удивят результаты работы в многопользовательской среде

Добавлено через 1 минуту
Цитата Сообщение от Bretbas Посмотреть сообщение
Объясни зачем она нужна в данной задаче?
ну, если у тебя нет понимания про ссылочную целостность данных (а по всему видно, что так оно и есть) то я и не предлагал тебе пользовать FK
1
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
01.11.2016, 09:10
Цитата Сообщение от Bretbas Посмотреть сообщение
Я согласен, но...я же уже при загрузки формы выкачал всю базу в DataSet! Теперь мне не нужно обращаться к ней, я буду работать с DataSet, а потом перед закрытием формы сохраню все разом в базу(все изменения)
С таким подходом получается, что база даных как таковая тебе просто не нужна. Сохраняй\загружай в XML файл. Там ни ссылочной целостности,которая тебе так не нравится, ни каких-то отдельных северов. Всё просто и понятно.

Цитата Сообщение от Bretbas Посмотреть сообщение
я же уже при загрузки формы выкачал всю базу в DataSet!
А если база весит несколько гигабайт, состоит из сотни-другой таблиц и находится на сервере на другом конце планеты? Ты всёравно будешь выкачивать всё, только для того, чтобы пользователю какой-то combobox заполнить?

И ещё, как уже выше заметили, что ты будешь делать, если базой пользуется больше одного человека? Тупо переписывать все изменения произошедшие с момента выгрузки тобой всех данных?

Такой подход очень похож на работу с файлом лежащим в общедоступной сетевой папке, но уж ни как не с БД. Ты либо не те средства вырал для своей задачи, либо слабо понимаешь как ими пользоваться.
1
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
01.11.2016, 09:28
Usaga,
ТС просто не понимает (или не хочет понимать) что
Машинная программа выполняет то, что вы ей приказали делать, а не то, что бы вы хотели, чтобы она делала
1
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
02.11.2016, 10:20  [ТС]
Спасибо за ответы Короче нахрен этот DataSet, просто буду, как Вы уже сказали ранее, посылать запросы за данными только тогда, когда нужно.
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
02.11.2016, 10:25
Bretbas, постарайся вообще забыть не только про DataSet, но и про DataTable. Ты довольно простыми средствами можешь получать на руки коллекции удобных в работе объектов. А там и таблицы на их основе строить и комбобоксы заполнять.
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
04.11.2016, 19:40  [ТС]
Usaga, вот смотри. Я так понял, что выгружать всю таблицу не нужно, как делает это DataSet. Так? Достаточно, просто посылать запросы на сервер за нужной инфой, будь то поиск(TextBox) и тд. Тогда после того как я выполню запрос, мне нужно результат куда-то помещать. В DataSet? Или DataTable? Или может куда-нибудь еще?
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,945
04.11.2016, 20:06
Bretbas, DataSet - пассивное хранилище. Он никуда никаких запросов не посылает. .NET не ограничивает и не диктует тебе как работать с БД. Хочешь, работай с БД через ADO.NET, хочешь, используй EF, хочешь используй NHibernate, хочешь, самопальное что-то мути.

Если ты перейдёшь по ссылке в моём предыдёщем посте, то увидишь (внезапно), что там идёт работа с БД без DataSet и DataTable. Я, конечно, понимаю, что это дико сложно - перейти по ссылке и попытаться осмыслить букавы на экране монитора, но ты постарайся. И извини за такую грубость и агрессивный сарказм, но по-другому люди, как правило, не понимают.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2016, 20:06
Помогаю со студенческими работами здесь

Отношение между таблицами в типизированном DataSet
Ув. сообщество, подскажите, пожалуйста, как мне решить мою проблемку. Для доступа к БД Access я использую типизированный DataSet,...

Связь 1:1 между несколькими таблицами Entity Framework
Есть недвижимость 3-х типов земельные участки, квартиры и дома хочу внести адресные данные в общую таблицу и остальные по соответствующим...

Управление несколькими таблицами одним bindingNavigator
В общем-то есть аналогичная тема (https://www.cyberforum.ru/ado-net/thread525826.html), но что-то она не благополучна окончена. В...

Создание класса для работы с несколькими таблицами БД
Добрый вечер форумчане. Помогите с такой как я думаю не большой(но у меня к сожалению не как не выходит) проблемой. Нужно сделать так...

Связи между таблицами
Кто нибудь сталкивался с выводом связей таблиц? То есть на форме есть кнопка, при ее нажатии выводит связь между таблицами. Как это...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru