Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Как связать 2 таблицы на PARADOX BDE |
Автор: Diless 10.3.2006, 12:15 |
В общем в этом суть: есть в приложении 2 таблицы, хотелось бы связать. В DataBase Desktop, когда пытаюсь связать отображается только левая колонка с полями, где правая? Чего делать? |
Автор: 307450614 10.3.2006, 12:58 |
DataBase Desktop хорошо связывает таблицы в том случае, когда связываемые поля имеют одинаковое название и являются индексными... |
Автор: Diless 10.3.2006, 13:40 |
Надо связать по Значению Project_Number. В первой таблице он во всех строках разный, а во второй может в нескольких строках быть одинаковым. Мне кажется в этом проблема. Добавлено @ 13:45 может быть такие таблицы надо решать как нибудь по-другому? чтобы не возникало конфликта при привязывании одному полю нескольких? как это делается? |
Автор: StranikS 11.3.2006, 09:55 |
Почитай литературу на тему "Создание БД формата PARADOX", в любом толстом учебнике про Delphi есть таковой раздельчик. Если коротко, то: 1. Все структуры БД классифицируются на следующие категории по взаимосвязи таблиц БД: - отношение "один ко многим": Таб№1 поле А |_________________ Табл№2 поле B |_________________ Табл№3 поле B |_________________ Табл№4 поле B ... - остальные "один к одному", "многие ко многим" и т.д. (посмотришь сам); 2. Для создание связи ("отношения") двух таблиц необходимо: - в главной таблице (таб№1) выбрать (создать) поле которую будет обеспечиать связь (поле А) и сделать его ключевым (*); - в дочерней таблице (табл№2) создать поле, задача которого связывание с первой таблицей и более ничего (поле В). Как правило его даже называют тем же именем что и поле А; - формат полей А и B должен быть однотипен, т.е. "Целые и целые", "автоинк и целые", "строковая и строковая" и ... - при задании связи в DataBase Desktop указываются эти поля (А и В); - в табл№2 поле В большей своей функцией является служебным и не показывается пользователю в DBGrid; - входе работе приложения при добавлении записи в табл№2 в поле В будут авт. заноситься значение поля А активной записии табл№1; - перед удалением записи в табл№1 нужно удалить соотв. ей все записи в табл№2. Добавлено @ 10:00 Забыл сделать вывод: У тебя во всех остальных таблицах нельзя использовать Project_Number для связи с главной таблицей, а надо создать новое поле например T_Pro_Num и вот ТОЛЬКО его использовать для связи с главной таблицей. |
Автор: Diless 13.3.2006, 08:44 | ||
Я так сделала, но тогда при сохранении данных Project_Number второй таблицы затирает Project_Number первой, потому что в 1 таблице Ключевому полю ID=2 соответствует Project_Number = например 201, а во второй 200 (там две записи с Project_Number =200). ЧЕГО ДЕЛАТЬ?????????? Неужели никто не сталкивался с такой проблеммой? Неужели мне теперь для каждого Project_Number делать отдельную таблицу? это ж повеситься можно! |
Автор: StranikS 14.3.2006, 23:32 |
Я не хочу показаться заумным но твоя БД не соответствует трем формам нормализации. Коротко: в литературе для тех кто создает БД есть три правила (три нормальные формы БД) при соблюдении, которых такие вот проблемы не случаются. Это вот на будущее. Теперь что делать: Не понятно зачем у тебя дублируются просто так поля в таблица. Зачем Project_Number в первой и во второй таблице одновременно, понятно что теперь там каша и как я понял Project_Number второй таблицы может не соответ. Project_Number первой (это кстати ошибка второй нормальной формы или первой - вот уже не помню). Удали Project_Number из второй таблицы, его функцию выполняет T_Pro_Num. Значения Project_Number должны задаваться только в одной таблице в главной, а в дочерней они только отображаются в T_Pro_Num. |
Автор: Diless 17.3.2006, 09:00 |
Спасибо. Действительно таблицы неправильно составила. |