Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Замена ключевого поля на нормальные значения


Автор: sharok 15.12.2009, 14:15
Как заменить ключевое поле на нормальные значения:
Есть две таблицы: Контрагенты и Банки.
В таблице Контрагенты есть поле БИК(переименовал, было Код Банка) отображается код банка, а нужно БИК??????
Как это сделать?
вот скриншот чтоб было понятно:
http://pic.ipicture.ru/uploads/091215/FuHltYoRER.jpg

Автор: KuMa1104 15.12.2009, 18:32
Код

private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'pUBSDataSet.publishers' table. You can move, or remove it, as needed.
            this.publishersTableAdapter.Fill(this.pUBSDataSet.publishers);
            this.pUBSDataSet.publishers.Columns[" Код Банка"].ColumnName = " БИК"

        }


Добавлено через 8 минут и 51 секунду
Аррр написал потом сообразил, если же вам нужно лиш поменять имя у datagridViev то
Код

 publishersDataGridView.Columns[1].HeaderText = "GGGGG";

Автор: sharok 15.12.2009, 19:09
нет нет.... мне нужно не просто поменять название, мне нужно чтоб туда подставлялись значения БИК из таблицы Банки.

Таблицы выглядят так: 
Банки: Код Банка, Наименование, БИК
Контрагенты: Код Контрагента, Наименование, Адрес, ..., Код банка(это свзяь с таблицей Банки. Код Банка)
 и вот нужно чтоб не код Банка отображался, а сам БИК

Автор: KuMa1104 15.12.2009, 19:22
Ааа.
Насколько я вас понял вы хотите сделать sql запрос чтобы выбрать данные из 2 таблиц.

Автор: sharok 15.12.2009, 19:25
Я пробовал так.... В дизайнере выбрат TableAdapter соответствующий, там есть методы Fill и GetData
Я  пробовал создать новый метод FillBy и в нем запрос написал, и в построителе запросов он нормально выводится. Но когда пишу его в Load событии, то ошибка выводится при запуске....
Это КАК я пробовал, думаю есть другие варианты

Автор: KuMa1104 15.12.2009, 19:26
Код

SELECT  [Код Контрагента], Наименование, Адрес,БИК   FROM Банки,Контрагенты WHERE Банки.КодБанка = Контрагенты.КодБанка

Автор: sharok 15.12.2009, 19:27
Цитата(KuMa1104 @ 15.12.2009,  17:22)
Ааа.
Насколько я вас понял вы хотите сделать sql запрос чтобы выбрать данные из 2 таблиц.

получается так

Добавлено через 46 секунд
Цитата(KuMa1104 @ 15.12.2009,  17:26)
Код

SELECT  [Код Контрагента], Наименование, Адрес,БИК   FROM Банки,Контрагенты WHERE Банки.КодБанка = Контрагенты.КодБанка

запрос я могу сделать, я не знаю куда его вставить чтоб в гриде он отобразился правильно

Автор: KuMa1104 15.12.2009, 19:29
Покажите как вы это делаете

Автор: sharok 15.12.2009, 19:34
вот ссылка на скриншот:
http://s59.radikal.ru/i164/0912/36/ef51bed3fe78.jpg

в этом окне ввожу

Добавлено через 1 минуту и 52 секунды
если я главный Fill переписываю то прога потом ваще не работает, а если новый создаю, то в  построителе работает, а при сохранении он выдет еще такое сообщение: что схема не совпадает с главным запросом

Автор: KuMa1104 15.12.2009, 19:41
Сеичас посмотрю.
Я просто это ручками обычно делал.

Автор: chip_and_dayl 15.12.2009, 19:44
Или писать sql запрос на объединение, или если  есть возможность создать подстановочное поле

Добавлено через 46 секунд
Ничего себе ответов, пока писал я свой

Автор: sharok 15.12.2009, 19:48
Цитата(chip_and_dayl @ 15.12.2009,  17:44)
Или писать sql запрос на объединение, или если  есть возможность создать подстановочное поле

Добавлено @ 19:45
Ничего себе ответов, пока писал я свой

проблема как раз в том что не могу найти где вставит запрос.... я все через дизайнер создавал
про постановочное поле можно поподробнее?

Автор: chip_and_dayl 15.12.2009, 19:55
sharok
Это поле, которое вместо кода по которому идет связь с другой таблицей, выводит результат. ТО есть в твоем случае в БИК будет выводится не код БИКА, а название которое соответствует этому коду. 
НО я с подстановочным полем в C# не работал и вообще не знаю, есть ли здесь такое понятие

Автор: sharok 15.12.2009, 20:00
Цитата(chip_and_dayl @ 15.12.2009,  17:55)
sharok
Это поле, которое вместо кода по которому идет связь с другой таблицей, выводит результат. ТО есть в твоем случае в БИК будет выводится не код БИКА, а название которое соответствует этому коду. 
НО я с подстановочным полем в C# не работал и вообще не знаю, есть ли здесь такое понятие

наверно combobox использовать, и его привязать к той таблице

Автор: chip_and_dayl 15.12.2009, 20:05
А если  http://s59.radikal.ru/i164/0912/36/ef51bed3fe78.jpg написать запрос, который дал 
KuMa1104, то он не работает?

Автор: sharok 15.12.2009, 20:10
Цитата(chip_and_dayl @ 15.12.2009,  18:05)
А если  http://s59.radikal.ru/i164/0912/36/ef51bed3fe78.jpg написать запрос, который дал 
KuMa1104, то он не работает?

если я главный Fill переписываю то прога потом ваще не работает,пропадает КонтрактыTableAdapter, а если новый создаю, то в  построителе работает(БИК выводит), потом там надо имя метода ввести я назвал FillBy, потом в обработчик события Load вставляю его, и при запуске появляется ошибка.Еще при сохранении он выдает такое сообщение: что схема не совпадает с главным запросом(имеется виду Fill)

Добавлено через 57 секунд
Цитата(chip_and_dayl @ 15.12.2009,  18:05)
А если  http://s59.radikal.ru/i164/0912/36/ef51bed3fe78.jpg написать запрос, который дал 
KuMa1104, то он не работает?

если я главный Fill переписываю то прога потом ваще не работает,пропадает КонтрактыTableAdapter, а если новый создаю, то в  построителе работает(БИК выводит), потом там надо имя метода ввести я назвал FillBy, потом в обработчик события Load вставляю его, и при запуске появляется ошибка.Еще при сохранении он выдает такое сообщение: что схема не совпадает с главным запросом(имеется виду Fill)

Автор: KuMa1104 15.12.2009, 20:27
Цитата(chip_and_dayl @  15.12.2009,  20:05 Найти цитируемый пост)
А если  сюда написать запрос, который дал 
 Ничего страшного я его не проверял, а просто автору в пример привёл.

А что за ошибка собствеено выскакивает что пишет.
Я там посмотрел что да как вроде всё работает.

Автор: sharok 15.12.2009, 20:37
Цитата(KuMa1104 @ 15.12.2009,  18:27)
Цитата(chip_and_dayl @  15.12.2009,  20:05 Найти цитируемый пост)
А если  сюда написать запрос, который дал 
 Ничего страшного я его не проверял, а просто автору в пример привёл.

А что за ошибка собствеено выскакивает что пишет.
Я там посмотрел что да как вроде всё работает.

При сохранении запроса: 

Схема данных, возвращаемая новым текстом команды, отличается от схемы основного запроса. Если она не подходит, проверьте текст команды в запросе.

а при вызове : Не удалось включить ограничения. По меньшей мере одна строка содержит значение, нарушающее ограничения по отсутствию пустых значений, уникальности или внешним ключам.



Автор: KuMa1104 15.12.2009, 20:41
У меня это тоже в начале выдовало

Автор: sharok 15.12.2009, 20:41
Цитата(KuMa1104 @ 15.12.2009,  18:41)
У меня это тоже в начале выдовало

и как Вы исправили?

Автор: KuMa1104 15.12.2009, 20:42
Собственно скорее всего из за того что вы делаете запрос к 2 таб. у тебя получаеться так что при выводе в грид у тебя для колонки с уникальным ключом получаються совпадающие значения, отсюда ошибка.

Автор: sharok 15.12.2009, 20:46
Нашел еще один способ., в datagridview можно выбрать тип столбца(кнопка, textbox), вот, есть combobox, и когда его выбираешь появляются дополнительные свойства: Data Source, Display Member и DisplayValue. Я выбрал Банки в качестве соурса, meber указал поле БИК, когда запускаешь вылазиет 10 штук исключений(у меня 10 записей в БД), потом используя bindingnavigator пройденая запись вроде обновляется, и появляется заветный БИК, но исключение все равно выскакивает((

Добавлено через 1 минуту и 33 секунды
Цитата(KuMa1104 @ 15.12.2009,  18:42)
Собственно скорее всего из за того что вы делаете запрос к 2 таб. у тебя получаеться так что при выводе в грид у тебя для колонки с уникальным ключом получаються совпадающие значения, отсюда ошибка.

но я веть не могу удалить где либо ключ, тогда при обновлении(изменении) ничего не сохраниться

Автор: KuMa1104 15.12.2009, 20:52
Даваите всётаки определимся с одним способом.
Я сеичас выяснять почему 10 исключении вылазиет не могу, другим занят.

Создаите представление или др. таблицу в редакторе в которои и делаете то что делали.

Или же что несколько проше но не уверен что лучше.
Проверьте все колонки которые у вас имеются в таблице и уберите все вашиограничения по отсутствию пустых значений, уникальности или внешним ключам.

Автор: sharok 15.12.2009, 21:05
пустых нету, уникальность тоже нормально

Автор: KuMa1104 15.12.2009, 21:11
Цитата(sharok @  15.12.2009,  21:05 Найти цитируемый пост)
 уникальность тоже нормально
 это как понять?

Вы их снесли?

Автор: sharok 15.12.2009, 21:13
я имел ввиду в одной таблице ключевой столбец имеет уникальные значения

Автор: KuMa1104 15.12.2009, 21:18
ИМХО.Поэтому у вас и исключение!!!!!!

Указано что значение должно быть уникальным но в ходе выполнения вашего sql запроса получаеться что несколько строк имеют одинаковые значения в виду того что однои записи в родительскои таблице может соответствовать несколько записей в дочерней.

Автор: sharok 15.12.2009, 21:19
но я же не смогу убрать ключ например в таблице Банки?

Автор: KuMa1104 15.12.2009, 21:29
Почему? Удалите если оно вам не нужно, а лучше создаите таблицу на основе ваших 2 таблиц, это не сложно делается прямо в редакторе.

Добавлено через 3 минуты и 49 секунд
Откроите ваш редактор.
Кликаете в свободном месте правои клавишеи
У меня команда называется
добавить->TableAdapter...

Автор: sharok 15.12.2009, 21:34
в этой таблице допустим....но у меня другие есть например Контракты там 4 поля связываются с таблицей Контрагенты: Код Грузоотправителя, код грузопринимателя, Код Поставщика, Код Покупателя..... там такая же ситуация будет

Автор: KuMa1104 15.12.2009, 21:38
Цитата(sharok @  15.12.2009,  21:34 Найти цитируемый пост)
. там такая же ситуация будет

несовсем понял.
Вы имеете ввиду что и там удалить ключи или что?


Автор: sharok 15.12.2009, 21:49
там я ключи удалить не смогу...поэтому опять будет ошибка

Автор: KuMa1104 15.12.2009, 21:57
Знаете у меня никогда не возникало такои проблемы.
Я всегда сам осушествлял привязку управление и настроику переходов.

А чем вам не подходит решение создать как я говорил представление, мне прямо интересно стало я зашол создал.
Идея в том что создаёте в дизаинере таблицу на основе уже существующих(хотя в принципе по сути вы до этого это и делали)т.е. у вас там автоматически отображаються ваши таблицы.А вы добавть ешё одну и пихаите туда то что вам нужно.

Автор: sharok 15.12.2009, 22:07
сделал новую таблицу в дизайнере, а если я изменю запись, например БИК поменяю, то они же не сохрантяся?

Автор: KuMa1104 15.12.2009, 22:14
Почему? обратите внимание что поскольку вы указываете для неё колонки из уже существующих таблиц, то и sql запрос осуществляеться к соответствующим табл.=> Изменения будут тоже происходить в них а вами созданная таблица это своего рода предстовление для удобства.

Но!!! Если соберётесь так делать проверте это сначала я точно не уверен.

Автор: sharok 15.12.2009, 22:25
сделал все....но теперь в bindingnavigator не горит кнопка сохранения почему то

Автор: KuMa1104 16.12.2009, 00:01
Да, про это я неподумал.

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

ИМХО.Понимаете вы можете создать для своего удобства сколько угодно представлении на основе ваших таблиц. Но!! если вы хотите чтобы на основе их делать изменения, дополнения.То вы сами должны реализовать всю эту логику.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)