Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2009, 12:17   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию связь один ко многим

ADO, MS SQL.
В-общем,дело обстоит так.в БД есть 2 таблицы.
Первая - OBJECT. Поля:
NUM_REP - int(ключ)
NAME - varchar.
Вторая - FULLOBJECTS. Поля:
NUM_REP - int
Y
M
OBJECTS.
Создаю связь один ко многим.Теперь форма. На ней есть edit поля,кнопка Сохранить. Нажимаю сохранить
Код:
DataMod.Command.Parameters.ParamByName('M').Value:=EDIT4.Text;
числа должны залиться в БД таким образом, (к примеру) чтобы на одну запись в таблице OBJECT, в таблице FULLOBJECTS было несколько записей. Затем хочу сделать чтобы выпадал список со значениями полей NAME,Y и M и рядом (допустим в memo) выводились все поля, (соответствующие выбранным) из таблицы FULLOBJECTS.
Помогите кто может. Постоянно вылетает ошибка что невозможно добавить числа, тк установлен первичный ключ и т.д.
Может нужно как то по-другому организовать БД?

Последний раз редактировалось kate158; 18.06.2009 в 14:42.
kate158 вне форума Ответить с цитированием
Старый 18.06.2009, 14:21   #2
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

а само значение в поле NUM_REP в обих таблицах как заносите? не автоикрементного они типа?
фЁдОр вне форума Ответить с цитированием
Старый 18.06.2009, 14:41   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

Автоинкрементных полей нет.
Значение NUM_REP,NAME,Y,M, OBJECTS пользователь добавляет в БД через edit.
Просто хочу чтобы числа добавлялись в обе таблицы в NUM_REP. В ОДНОЙ ТАБЛИЦЕ ПЕРВИЧНЫЙ КЛЮЧ, В ДРУГОЙ ВНЕШНИЙ.
ОШИБКА:
insert statement conflicted with column foreign key constraint 'FK_OBJECT_FULLOBJECT'...

Последний раз редактировалось kate158; 18.06.2009 в 14:58.
kate158 вне форума Ответить с цитированием
Старый 18.06.2009, 14:53   #4
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

тогда просто заносите данные как в обычные поля, только в данном случае сделать проверку, что бы пользователь мог только цифры вводить в поля NUM_REP. я обычно заносил данные таким способом:
ADOQuery1.insert;
ADOQuery1.FieldByaName('NUM_REP').A sInteger:=StrToInto(edit1.text);
ADOQuery1.Post;
фЁдОр вне форума Ответить с цитированием
Старый 18.06.2009, 15:00   #5
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

ЭММММ....
вопрос не в том какого типа данные.
если все сделать без ключей, то добавлются записи.
но мне именно нужно с первичным и внешним ключом.\чтоб потом при выборе лукап поля по одному названию пользователь мог увидеть все объекты.
извините за назойливость, просто хочу решить проблему

Последний раз редактировалось kate158; 18.06.2009 в 15:04.
kate158 вне форума Ответить с цитированием
Старый 18.06.2009, 15:10   #6
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

не назначайте никаких ключей, сделайте просто по одному полю числового типа в каждой таблице и свяжите эти таблицы по этим поля с помощью условия в запросе. а дальше как обычным способом добвляете данные и всего делов-то
фЁдОр вне форума Ответить с цитированием
Старый 18.06.2009, 15:24   #7
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

вот мой запрос.
Код:
insert into fullobject (NUM_REP, NAME, Y,  M) values (:NUM_REP, :NAME, :Y, :M)
SELECT 
FROM OBJECT INNER JOIN FULLOBJECTS ON OBJECT.num_rep = FULLOBJECTS.num_rep;
который находится в ado command.
КАК ЗДЕСЬ МОЖНО СВЯЗАТЬ fullobject (NUM_REP) с object (NUM_REP) ?
чего то я не догоняю

Последний раз редактировалось kate158; 18.06.2009 в 15:35.
kate158 вне форума Ответить с цитированием
Старый 18.06.2009, 15:42   #8
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

поступите другим способом. в свойстве SQL компонента ADOQuery1 пропишите
Код:
select *
 from fullobject, object
 where object.NUM_REP=fullobject.NUM_REP
и все, здесь вы связали эти таблицы. А как добавлять данные я уже показывал, только теперь немного поправим:

Код:
ADOQuery1.insert;
ADOQuery1.FieldByaName('object.NUM_REP').A sInteger:=StrToInto(edit1.text);
ADOQuery1.FieldByaName('fullobject.NUM_REP').A sInteger:=StrToInto(edit1.text);
ADOQuery1.Post;
зы: проверить не на чем, но поидеи все должно работать
фЁдОр вне форума Ответить с цитированием
Старый 18.06.2009, 15:56   #9
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

Получается такая тема. В обеих таблицах будут записи повторяться. И даже если их связать по одинаковому NUM_REP, то количество их не измениться.Т.е. када пользователь захочет выбрать одну группу с одним именем (т.е. допустим, одну запись в таблице OBJECT), он выберет выпадающий список, в тотором будут повторяться одинаковые ЗАПИСИ. Блин, наверно Я коряво объясняю, т.к. тему вижу.
kate158 вне форума Ответить с цитированием
Старый 18.06.2009, 16:00   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Катя, а прикрепи ка сюда в архиве свой проектик.
Ато так на слух определить что ты там затеяла мне лично трудновато...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь многие-ко-многим andirock2112 БД в Delphi 10 12.04.2009 22:05
Многие ко многим ("")(Э_Є)("") БД в Delphi 1 12.03.2009 01:18
связь с календарём Косtян Помощь студентам 2 06.11.2008 14:51
Связь с БД Elena БД в Delphi 4 03.05.2007 16:08