Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связать две таблицы в одном DataSet, разные таблицы 
V
    Опции темы
vespa
Дата 20.3.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 20.3.2007

Репутация: нет
Всего: нет



У меня есть две таблицы, созданные в Visual Fox Pro. Задача в следующем, по данным из одной таблицы отображать соответсвующие данные из другой таблицы.
Связь данных между этими двумя таблицами логическая. Т.е. одинаковых полей в этих таблицах нет. Например, в одной таблице есть поле Name1, в другой - Name2.
Известно, что по смыслу Name1 и Name2 содержат одинаковую информацию (одни и те же названия). 
Я создала на форме объект DataSet, добавила в него обе таблицы, причем в обоих случаях выборка производится так: Select * from Table1 и Select * from Table2.
На форме также есть TextBox'ы, в которых отображается информация из таблиц (DataBinding). 
Что нужно сделать (желательно с помощью Wizard'a), чтобы при просмотре информации из первой таблицы отображалась соответсвующая информация из второй таблицы?
 
Может быть запросы поменять для второй таблицы?
Или сделать DataRelation(как?)?
Или параметризированный запрос ?
Или еще что-нибудь?
PM MAIL   Вверх
mr.DUDA
Дата 21.3.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(vespa @  20.3.2007,  16:06 Найти цитируемый пост)
Или сделать DataRelation(как?)?

Правильный ответ.

В дизайнере датасета нужно перетянуть поле Name2 на поле Name1, в появившемся диалоге поставить птицу "Create both relation and constraint", нажать Ok, после чего появится стрелка от одной таблицы к другой.


--------------------
user posted image
PM MAIL WWW   Вверх
vespa
Дата 21.3.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
mr.DUDA
Дата 22.3.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Ключик значит что поле Name2 стало первичным ключом (primary key). А ошибка говорит о том, что в таблице базы данных есть строки с повторяющимся полем Name2, что для первичного ключа недопустимо. Поможет выставление "Relation Only" вместо "Both Relation and Foreign Key Constraint" при создании связи.


--------------------
user posted image
PM MAIL WWW   Вверх
vespa
Дата 27.3.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 20.3.2007

Репутация: нет
Всего: нет



Я поменяла "Foreign key constraint" на "Relation only". 
Все равно, при запуске приложения выбирается информация из родительской таблицы. И из дочерней тоже вся таблица, независимо от родительской.
Уже неделю пытаюсь что-нибудь придумать. Ничего не выходит.
У меня подозрение, что дело в том, что исходные таблицы никак между собой не связаны, т.е не принадлежат одной базе данных.
Или например, из-за того, что они созданы в формате .dbf и в них опять-таки не хватает какой-то информации для установления связи.
Но с другой стороны, в датасет они загружаются, в датасете связь между ними есть. 
Вообщем, мистика.
Люди, помогите понять в чем дело  smile  
А если бы у кого-нибудь нашелся работающий пример, вообще было бы здорово  smile 
PM MAIL   Вверх
vespa
Дата 11.4.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 20.3.2007

Репутация: нет
Всего: нет



Все оказалось очень просто. Нужно, чтобы связуемые поля в таблицах имели одинаковый размер и тип соответственно.
PM MAIL   Вверх
mr.DUDA
Дата 11.4.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Цитата(vespa @  11.4.2007,  13:25 Найти цитируемый пост)
Нужно, чтобы связуемые поля в таблицах имели одинаковый размер и тип соответственно.

Хм, ну это подразумевалось smile
Вообще, матчасть по ADO.NET не помешало бы почитать.


--------------------
user posted image
PM MAIL WWW   Вверх
vespa
Дата 12.4.2007, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 20.3.2007

Репутация: нет
Всего: нет



Цитата

Вообще, матчасть по ADO.NET не помешало бы почитать.


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

Изначально у меня таблицы созданы в FoxPro и работала я с ними через дельфи. Там при выборке из двух таблиц связанных данных все работает, независимо от того какой размер имеют поля. Главное чтобы совпадали значения. 

Кто ж знал что ADO.NET сравнивает поля, только если они одинаковой длины.



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.