![]() |
|
Модераторы: gambit |
![]()
|
|
| vespa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.3.2007 Репутация: нет Всего: нет |
У меня есть две таблицы, созданные в Visual Fox Pro. Задача в следующем, по данным из одной таблицы отображать соответсвующие данные из другой таблицы.
Связь данных между этими двумя таблицами логическая. Т.е. одинаковых полей в этих таблицах нет. Например, в одной таблице есть поле Name1, в другой - Name2. Известно, что по смыслу Name1 и Name2 содержат одинаковую информацию (одни и те же названия). Я создала на форме объект DataSet, добавила в него обе таблицы, причем в обоих случаях выборка производится так: Select * from Table1 и Select * from Table2. На форме также есть TextBox'ы, в которых отображается информация из таблиц (DataBinding). Что нужно сделать (желательно с помощью Wizard'a), чтобы при просмотре информации из первой таблицы отображалась соответсвующая информация из второй таблицы? Может быть запросы поменять для второй таблицы? Или сделать DataRelation(как?)? Или параметризированный запрос ? Или еще что-нибудь? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Правильный ответ. В дизайнере датасета нужно перетянуть поле Name2 на поле Name1, в появившемся диалоге поставить птицу "Create both relation and constraint", нажать Ok, после чего появится стрелка от одной таблицы к другой. -------------------- ![]() |
|||
|
||||
| vespa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.3.2007 Репутация: нет Всего: нет |
Я установила связь от Name2 к Name1.
В дизайнере поставила галочку у "Both Relation and Foreign Key Constraint". В итоге рядом с Name2 появился ключик. После этого появилась ошибка при запуске программы: на строке private void OnLoad(object sender, EventArgs e) { // TODO: This line of code loads data into the 'mydataSet.Table2' table. this.Table2TableAdapter.Fill(this.mydataSet.Table2); } сообщение Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints. Больше ни у каких полей ключиков нет. Это сообщение отредактировал(а) vespa - 21.3.2007, 16:58 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Ключик значит что поле Name2 стало первичным ключом (primary key). А ошибка говорит о том, что в таблице базы данных есть строки с повторяющимся полем Name2, что для первичного ключа недопустимо. Поможет выставление "Relation Only" вместо "Both Relation and Foreign Key Constraint" при создании связи.
-------------------- ![]() |
|||
|
||||
| vespa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.3.2007 Репутация: нет Всего: нет |
Я поменяла "Foreign key constraint" на "Relation only".
Все равно, при запуске приложения выбирается информация из родительской таблицы. И из дочерней тоже вся таблица, независимо от родительской. Уже неделю пытаюсь что-нибудь придумать. Ничего не выходит. У меня подозрение, что дело в том, что исходные таблицы никак между собой не связаны, т.е не принадлежат одной базе данных. Или например, из-за того, что они созданы в формате .dbf и в них опять-таки не хватает какой-то информации для установления связи. Но с другой стороны, в датасет они загружаются, в датасете связь между ними есть. Вообщем, мистика. Люди, помогите понять в чем дело А если бы у кого-нибудь нашелся работающий пример, вообще было бы здорово |
|||
|
||||
| vespa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.3.2007 Репутация: нет Всего: нет |
Все оказалось очень просто. Нужно, чтобы связуемые поля в таблицах имели одинаковый размер и тип соответственно.
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Хм, ну это подразумевалось Вообще, матчасть по ADO.NET не помешало бы почитать. -------------------- ![]() |
|||
|
||||
| vespa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.3.2007 Репутация: нет Всего: нет |
Вообще-то матчасть я почитала. Просто одно дело, когда сам создаешь таблицы, а другое, когда пользуешься уже готовыми. Изначально у меня таблицы созданы в FoxPro и работала я с ними через дельфи. Там при выборке из двух таблиц связанных данных все работает, независимо от того какой размер имеют поля. Главное чтобы совпадали значения. Кто ж знал что ADO.NET сравнивает поля, только если они одинаковой длины. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |