Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/23: Рейтинг темы: голосов - 23, средняя оценка - 4.70
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1

Связать таблицы в DataSet

30.09.2009, 18:28. Показов 4676. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеем базу пусть с двумя таблицами.

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

как это указать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.09.2009, 18:28
Ответы с готовыми решениями:

Передача данных из таблицы одной dataSet в таблицу другой dataSet
Здравствуйте. У меня возникла ситуация когда необходимо передать данные из таблицы одной dataset в таблицу другой dataset, которая хранит...

Как связать CrystalReports и DataSet
Доброго времени суток. Моя проблема заключается в следующем: имеется DataSet, требуется создать отчет с помощью CrystalReport. Создаю...

Как можно связать DataSet с компонентами checkedListBox и treeView
Добрый вечер! Подскажите пожалуйста как можно связать DataSet с компонентами checkedListBox и treeView? Или, как вытащить данные из...

10
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
30.09.2009, 23:53  [ТС]
единственное что в голову пришло - ловить событие RowChanging, лезть в первую таблицу и посмотреть имеет ли она значение, на которое меняется данная клетка, и если нет - или "дефолт" присвоить или каким-то образом не допустить изменений. наверняка есть способы получше.

где бы почитать красиво по теме?
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
01.10.2009, 03:09
Цитата Сообщение от novi4ok Посмотреть сообщение
как это указать?
Цитата Сообщение от novi4ok Посмотреть сообщение
где бы почитать красиво по теме?
Что указать? По какой теме?
Поставьте вопрос нормально.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.10.2009, 12:24  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
Что указать? По какой теме?
Поставьте вопрос нормально.
если бы я был в состоянии поставить правильно вопрос, то я скорее всего и ответ знал бы. или по крайней мере знал бы где его искать.

я не знаю, можно ли в каком-нибудь визарде указать, что такая-то колонка таблицы должна иметь значение, содержащиеся в такой-то колонке другой таблицы.

например, одна таблица:

номер (ключ); название
1 проект один
340 проект второй
76 проект третий

вторая таблица:

начало (ключ) ; конец; номер проекта (должен содержаться в колонке один первой таблицы!)
22/03/2005 30/02/2006 340
ДД/ММ/ГГГГ ДД/ММ/ГГГГ 340
ДД/ММ/ГГГГ ДД/ММ/ГГГГ 222 //ошибка!
ДД/ММ/ГГГГ ДД/ММ/ГГГГ 76

теперь "нормальный" вопрос:

какими средствами можно наилучшим образом обеспечить, чтобы значения колонки три второй таблицы были только из колонки один первой?
если у вас есть вариант, то сразу: что произойдет, если в первой таблице произойдет корректура?
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
02.10.2009, 02:57
Для размышлений о правильности движения:
1. Ключ суррогатный?
2. Для чего вам отображать и изменять ключ у строки?

Создать связь между таблицами в DataSet - DataRelation. Если DataSet типизированый, то в дизайнере перетащить поле с ключом первой таблицы на поле во второй таблице на номер проекта. Должно появиться окно создания связи между таблицами. В окне выбрать "Foreign Key Constraint Only", в "Update Rule" поставить "Cascade".
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
02.10.2009, 11:55  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
Для размышлений о правильности движения:
1. Ключ суррогатный?
2. Для чего вам отображать и изменять ключ у строки?

Создать связь между таблицами в DataSet - DataRelation. Если DataSet типизированый, то в дизайнере перетащить поле с ключом первой таблицы на поле во второй таблице на номер проекта. Должно появиться окно создания связи между таблицами. В окне выбрать "Foreign Key Constraint Only", в "Update Rule" поставить "Cascade".
Green, вашими наводящими вопросами вы мне уже помогли лучше понять, что же мне нужно. в базах данных у меня знания довольно поверхностные (из учебников и литературы. реально столкнулся с тем, что что-то нужно сделать впервые).

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

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

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

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

я не нашел способа указать такое свойство в каком-нибудь визарде. если нужно это специально программировать - я готов. но не хочется программировать что-то, а потом окажется, что то же самое еще лучше можно было "мышкой наклацать".
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
02.10.2009, 19:24
Какую БД Вы решили использовать?
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.10.2009, 00:28  [ТС]
Цитата Сообщение от IT-Skyline Посмотреть сообщение
Какую БД Вы решили использовать?
пока никакую. это имеет значение на данном этапе? я так понял, что смогу потом подсоединиться к любой. а могу вообще ни к какой. просто хранить ее в xml-файлах и все.
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
03.10.2009, 19:06
Цитата Сообщение от novi4ok Посмотреть сообщение
уникальный номер (ключ. приходит "сверху", т.е. не суррогатный)
А почему бы не делать это поле ключом. Имею ввиду основным ключом. Пускай будет себе уникальный. Можно прилепить доп. поле, типа GUID (глобальный уникальный идентификатор). Положительные стороны заключаются в том, что исчезает вопрос об обновлении этого поля, а главное, если база будет распределенной, то пропадает проблема синхронизации, т.к. этот тип гарантирует (с очень большой вероятностью) уникальность созданного идентификатора на любой клиентской машине. Минус, поле достаточно тяжелое, файл базы будет более весомым.

Цитата Сообщение от novi4ok Посмотреть сообщение
все остальные сотрудники ведут каждый свою собственную таблицу (так предписано)
А почему бы не использовать одну таблицу, к которой пользователям закрыт доступ. И для каждого пользователя создать View, согласно требованиям. Это существенно упростит структуру БД и реализацию GUI для администратора.

Цитата Сообщение от novi4ok Посмотреть сообщение
конечно, для пользователя нужно будет создать удобный gui, и не давать ему "запороть" базу данных, но хотелось бы также иметь возможность смотреть и редактировать базу в DataGridView, и при этом не допустить ввести во вторую таблицу номер "несуществующего" проекта, например. также как "оно" не дает ввести в поле дата-время что-то в другом формате.
Использовать DataGridView и "запорость базу данных" - никак не связанные между собой понятия, пока вы сами не сведете их. В свойствах колонки в дизайнере просто выставляется ReadOnly и пользователь идет лесом. Также этот момент можно проконтролировать в БД, создав триггер на Update, в котором попытка изменить номер проекта на несуществующий будет сбрасываться.
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
03.10.2009, 20:34
Цитата Сообщение от novi4ok Посмотреть сообщение
пока никакую. это имеет значение на данном этапе? я так понял, что смогу потом подсоединиться к любой. а могу вообще ни к какой. просто хранить ее в xml-файлах и все.
Да, так как не все БД поддреживают связь внешнего ключа, это нужно делать программно. Если бд поддерживает связь (первичный - внешний ключи), то всю нагрузку можно положить на СУБД. А для программы можно просто в какой-то список выгружать значения первой таблицы.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.10.2009, 22:29  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
А почему бы не делать это поле ключом. Имею ввиду основным ключом. Пускай будет себе уникальный. Можно прилепить доп. поле, типа GUID (глобальный уникальный идентификатор). Положительные стороны заключаются в том, что исчезает вопрос об обновлении этого поля, а главное, если база будет распределенной, то пропадает проблема синхронизации, т.к. этот тип гарантирует (с очень большой вероятностью) уникальность созданного идентификатора на любой клиентской машине. Минус, поле достаточно тяжелое, файл базы будет более весомым.
какае именно поле?

Цитата Сообщение от Green Посмотреть сообщение
А почему бы не использовать одну таблицу, к которой пользователям закрыт доступ. И для каждого пользователя создать View, согласно требованиям. Это существенно упростит структуру БД и реализацию GUI для администратора.
какой в таком случае должна быть структура таблицы?

у администратора свои задачи: ввести новый проект, "закрыть" проект (чтобы на него уже нельзя было списывать затраты). возможно - изменить номер проекта (я против. пусть корректируют название, а номер лучше не трогать).
пользователей - два типа - "сотрудники" и "начальники". сотрудник, например, отработал день - отбил в базу: с такого-то времени по такое-то работал на проект 222, с такого-то по такое-то - на 333. начальник хочет посмотреть, как у него обстоят дела с затратами на его проект. не перерасходовал ли он уже выделенные средства.
мне почему-то кажется, что идея с одной таблицей затруднит реализацию всех этих задач. (?)

Цитата Сообщение от Green Посмотреть сообщение
Также этот момент можно проконтролировать в БД, создав триггер на Update, в котором попытка изменить номер проекта на несуществующий будет сбрасываться.
т.е. нужно программировать. я думал (надеялся), что можно где-то сказать, что значения этого поля - из множества значений колонки такой-то таблицы такой-то. типа "enum"

Добавлено через 4 минуты
Цитата Сообщение от IT-Skyline Посмотреть сообщение
Да, так как не все БД поддреживают связь внешнего ключа, это нужно делать программно. Если бд поддерживает связь (первичный - внешний ключи), то всю нагрузку можно положить на СУБД. А для программы можно просто в какой-то список выгружать значения первой таблицы.
я себе сейчас это так представляю, что если я буду перекладывать что-то на субд, то это будет никак не связано с ado.net. для меня же сейчас пока вырисовывается задача построить все на использовании класса DataSet. а что он использует в качестве источника - это второстепенно на данном этапе. хотя повторяю - я только начинаю практически работать с базами данных, посему ошибаться могу себе позволить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2009, 22:29
Помогаю со студенческими работами здесь

Связать два datagridview (один ко многим) с разными таблицами в разных dataset
Привет! Подскажите пожалуйста по немного нестандартной ситуации. У меня создан один класс, который полностью накладывает на...

DataSet и таблицы
Только более менее пошла работа, как тут же встала. Интересует вопрос, можно ли в один dataSet записать несколько таблиц и если можно то...

Вывод DataSet в DataGridView (2 таблицы)
хочу вывести в датагридвью, 2 таблицы со связями, в таком формате: в начале строки стоят "+" ,при нажатии на которые...

DataSet заполнение таблицы без подключения
Здравствуйте! Хочу сделать такую программку, чтобы работала с БД без подключения. Чтобы можно было перенести ее на другой комп на котором...

Как получить данные из таблицы в DataSet?
Такой вопрос, имеется БД созданная в Access подключил её к проекту, создался DataSet но как забрать данные из таблицы ? (допустим нужно...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru