Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизСводная таблица Найти похожие ветки
← →
ankazh © (2012-09-03 00:02) [0]Есть две таблицы. Дом1(поля: фамилия, имя) Дом2(поле: фамилия).Вывожу в dbgrid через adoquery select дом1.имя from дом1 union select дом2.имя from дом2.
Возможно ли как-нибудь, выбранную запись в дбгриде, удалить(DBGrid1.DataSource.DataSet.delete) и при этом чтобы соотв.запись в табл дом1 также удалялась (чтоб удалялось фамилия и имя)??????
Как это возможно реализовать?
← →
sniknik © (2012-09-03 00:44) [1]например (соответствующий хелп), один из вариантов (есть еще триггеры, удаление по связанному полю, и т.д. моло ли напридумывали мне неизвестного...)
->
Можно указать подлежащие выполнению действия с внешней таблицей, исходя из соответствующего действия, выполняемого над ключом в той таблице, для которой определено предложение CONSTRAINT. Например, рассмотрим следующее определение таблицы «Клиенты»:
CREATE TABLE Клиенты (ИндексКлиента INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))
Рассмотрим следующее определение таблицы «Заказы», в котором задано отношение для внешнего ключа, адресующее ключ в таблице «Клиенты»:
CREATE TABLE Заказы (КодЗаказа INTEGER PRIMARY KEY, ИндексКлиента INTEGER, ПримечанияЗаказа NCHAR VARYING (255), CONSTRAINT ВнКлЗаказыИндексКлиента FOREIGN KEY (ИндексКлиента) REFERENCES Клиенты ON UPDATE CASCADE ON DELETE CASCADE
Оба предложения ON UPDATE CASCADE и ON DELETE CASCADE определены для внешнего ключа. Предложение ON UPDATE CASCADE означает, что в случае обновления кода клиента (ИндексКлиента) в таблице «Клиенты», в таблице «Заказы» будет произведено соответствующее каскадное обновление. Каждый заказ, содержащий соответствующее значение кода клиента, будет автоматически обновлен с использованием нового значения этого кода. Предложение ON DELETE CASCADE означает, что в случае удаления клиента из таблицы «Клиенты», все строки таблицы «Заказы», содержащие код данного клиента, также будут удалены.
← →
Inovet © (2012-09-03 06:42) [2]> [1] sniknik © (03.09.12 00:44)
У автора UNION и явно не нормализована база - две по сути одинаковые таблицы, ещё и без ИД, видимо однофамильцев не бывает, или бывают редко же и мы им в конце точку припишем.
← →
sniknik © (2012-09-03 07:53) [3]> У автора UNION
и что?
> и явно не нормализована база
см. пример в [1], для чего он по твоему тут?
← →
Inovet © (2012-09-03 08:45) [4]Автор это спрашивал?> [3] sniknik © (03.09.12 07:53)
> см. пример в [1], для чего он по твоему тут?
Автор об этом спрашивал? Про удаление из дом2 в вопросе ничего не вижу.
← →
sniknik © (2012-09-03 09:34) [5]> Автор об этом спрашивал? Про удаление из дом2 в вопросе ничего не вижу.
а ты поменяй в вопросе дом2 на дом1 и наоборот, или у меня в ответе Клиенты на Заказы и наоборот.
какая вообще разница имя таблицы в принципе? вопрос не в именах таблиц, а в "Как это возможно реализовать?".
← →
ankazh © (2012-09-03 10:04) [6]sniknik, вы правы. таблиц будет много у всех них есть два поля с одинаковой структурой и одинаковым именем, по ним я их всех и вывожу запросом с помощью UNION в dbGrid. Затем мне при выделении записи в гриде нужно ее удалить(и все что связано с ней(что соответственно в др.таблице)), или новую добавить....
Теоретически я понимаю, что между выводящимся и таблицами должна существовать связь, но ведь то. что я вывожу это всего лишь запрос как мне сделать там какой либо ключ?????
← →
Inovet © (2012-09-03 10:42) [7]> [6] ankazh © (03.09.12 10:04)
> Теоретически я понимаю, что между выводящимся и таблицами
> должна существовать связь
Так и надо эту связь сделать, а у тебя получается просто набор таблиц, которые ты сливаешь с выкидыванием в запросе дубликатов. Обычно, но не обязательно, в "главной" таблице делается поле с сурогатным ключом integer ID с автоинкрементом, в других "подчинённых", кроме своего ID, поле с ID_главная и CASCADE на удаление, изменение (если надо). Вот тут и смотри пример из [1]. А для начала надо определиться что и где хранить.
Задача какая?
← →
sniknik © (2012-09-03 10:50) [8]> но ведь то. что я вывожу это всего лишь запрос как мне сделать там какой либо ключ?????
"там" уже никак, ключ это в базе, если хочешь в запросе то уже либо сам "ручками" обеспечивай связку/удаление. либо меняй связку на ту которая может обеспечить "автоудаление", что впрочем без ключа и поля связи тоже не делается.
← →
ankazh © (2012-09-03 11:49) [9]у меня 2 дома, на каждый дом своя таблица. Когда я делаю ключ(счетчик) ,то значение счетчика при слитии 2-х таблиц будут не уникальны уже. Или выход только прописывать руками???????
← →
sniknik © (2012-09-03 12:02) [10]> у меня 2 дома, на каждый дом своя таблица.
начни с чтения основ баз данных. т.к. вот это из-за непонимания их ВООБЩЕ.
← →
Inovet © (2012-09-03 12:05) [11]> [9] ankazh © (03.09.12 11:49)
А 3 дома, миллион домов, на каждый по таблице? Наверное подойдёт структура
Улицы (ИД, Название)
Люди (ИД, Фамилия, Имя)
Дома (ИД, ИД_Улицы, номер_дома)
Проживающие (ИД_Дома, ИД_Люди)
← →
ankazh © (2012-09-03 12:09) [12]нет ,на самом деле у меня не дома, я так чтоб объяснить быстрее. У меня части речи, а их всего 10. 10 таблиц, в каждой из таблиц есть пара одинаковых полей, которые я и вывожу. По мимо них у каждой табл. есть и отличн. поля (своя специфич. каждой части речи)
← →
sniknik © (2012-09-03 12:15) [13]> Или выход только прописывать руками???????
вообще можно взять готовое, например КЛАДР. не скажу, что структура в нем идеальна... (скорее наоборот), но он очень распространен.
← →
sniknik © (2012-09-03 12:16) [14]> нет ,на самом деле у меня не дома, я так чтоб объяснить быстрее.
ССЗБ
← →
ankazh © (2012-09-03 12:25) [15]из всего вышепосоветованого, поняла что дела не будет.... и запихну я это все в 1 таблицу в которой сделаю полей так 15-20. Если у кого-то есть решение лучше и конкретный выход, прошу помочь.... потомучто такая каша в 1 таблице жесть.... но как я вижу работает...
← →
sniknik © (2012-09-03 12:27) [16]> конкретный выход
третья нормальная форма в базах данных.
← →
sniknik © (2012-09-03 12:29) [17]http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0
← →
ankazh © (2012-09-03 12:37) [18]
> sniknik
)))) я как бы пишу в разделе "Начинающим" :)
← →
Inovet © (2012-09-03 12:37) [19]Слова - совсем другая задача. Надо было догадаться?
Хорошо. Допустим так.
Части_речи(ИД, Название)
Формы (ИД, ИД_Части_речи, Название)
Слова (ИД, Написание_в_основной_форме)
Написание (ИД, ИД_Слова, ИД_Формы, Написание)
Для частей речи и форм можно и не заводить отдельные справочники, поскольку они устоявшиеся и их немного.
← →
ankazh © (2012-09-03 12:55) [20]....это части речи на иностранном языке
← →
Inovet © (2012-09-03 12:56) [21]> [20] ankazh © (03.09.12 12:55)
> ....это части речи на иностранном языке
И что?
← →
sniknik © (2012-09-03 14:38) [22]> )))) я как бы пишу в разделе "Начинающим" :)
поэтому я и дал ссылку, "не начинающий" должен и сам знать/найти.
← →
sniknik © (2012-09-03 14:44) [23]> Для частей речи и форм можно и не заводить отдельные справочники, поскольку они устоявшиеся и их немного.
можно их самих сделать "естественным" ключом. и в этом смысле структура в [0] уже не такая уж "убогая"...
еще один + к [14].
← →
ankazh © (2012-09-03 16:12) [24]спасибо всем большое, сделала вс е как хотела. А всего-то надо было в sql колум поставить, для принадлежности к одной или другой таблице. Работы на 10 сек, а развели демагогию :)
← →
sniknik © (2012-09-03 16:56) [25]> а развели демагогию :)
спрашивать нужно конкретно, а не разводить... уж не знаю что.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.067 c