|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Межтабличные связи
Собственно, буду кратка - как создать связи между таблицами, например 1:1 или один ко многим. Я имею ввиду с помощью какого компонента? Поподробнее, пожалуйста, напишите! Тип таблиц - dBase IV, создать связи нужно для базы данных, не для приложения. Читала, что компонент MasterSource делает связи, но тогда как с ним работать, если так?
|
#2
|
|||
|
|||
Вообще, создать физическую связь для таблиц dBase невозможно (на сколько я помню), т.к. данный функционал не поддерживается на уровне БД. Однако, в программе можно настроить компоненты доступа к данным (TTable и TQuery) так, чтобы получить желаемую связь.
Связь создается с помощью свойства MasterSource в подчиненном компоненте. Там при установке значения должен появиться диаложек, где указываются поля для связи. |
#3
|
||||
|
||||
А можно поподробнее, пожалуйста, про настройку компонентов Table и Ouery? Знаю, что как-то можно создать связь через компонент Table по принципу главная-подчинённая таблицы, но как точно? Если знаете, и не трудно, по шагам можете написать? Благодарна за ответ!
|
#4
|
||||
|
||||
Допустим вы подключаетесь к DBF через BDE.
1. Добавляете на форму компоненты Table1 и Table2 2. Добавляете на форму компонент DataSource1 Допустим Table1 у вас главная, а Table2 подчиненая, тогда: Код:
DataSource1.DataSet := Table1; Table2.MasterSource := DataSource1; Table2.MasterFields := 'ID'; // ID - это ключевое поле мастер-таблицы Table2.IndexFieldNames := 'MasterID'; // MasterID - это поле из детайл-таблицы по которому осуществялется связь с мастер-таблицей Вот собственно и все. Теперь при смене записи в мастер-таблице будет автоматом выбраны подходящие записи из детайл-таблицы Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
А можно ли так связать таблицы находящиеся на разных формах? Дело в том, что у меня концептуальная модель с бинарными связями и нет таблиц с общими полями соответсвенно...Т.е. на форме с главной таблицей поставить Table1 и DataSource1, а на форме с подчинённой таблицей поставить Table2, который будет видеться как Table1, т.к он на другой форме..? И где писать код, в смысле надо просто писать его во вкладке Unit, если не ошибаюсь?
|
#6
|
||||
|
||||
Можно, достаточно в секции Uses упомянуть имя модуля с таблицей, но обычно так не делают. В Дельфи есть специальный вид формы Data Module в котором и размещают все компоненты доступа к БД, а уже потом подключают его к нужным формам по той-же схеме, что я упомянул вначале.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
||||
|
||||
А как создать эту форму Data Module? Как понять подключаться к DBF через BDE? Я вроде никак не подключалась... Просто создавала формы, размещала на них таблицы, запросы, компоненты, необходимые для каждой таблицы или запроса. Мне ведь не нужно удалять созданные формы, а насколько поняла, создать одну Data Module и на ней создавать связи между таблицами?
|
#8
|
||||
|
||||
Удалять конечно нет необходимости. Создаете одну форму DataModule куда переносите все компоненты доступа к базе данных. У вас это должны быть TTable,TQuery,TDataSource
Создать Data module можно так: File|New|Other|Delphi files|Data module BDE - это просто технология подключения к базам данных. На сегодняшний день считается устаревшей, но во многих случаях - это более удобный способ подключения. Дельфи предоставляет еще ряд технологий подключения к базам данных в том числе ADO. ADO - более продвинутая технология доступа и является альтернативой BDE. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
||||
|
||||
Почитала статью о компонентах доступа с другого сайта с этого форума -там создаётся связь БД Поставщики и Поставки через Table. Но какая именно связь - 1:1, один ко многим, или вообще другого типа, скажите? Спасибо, что отвечаете.
|
#10
|
||||
|
||||
Какой именно тип связи определяется содержимым таблиц. Указать каким-либо образом, в настройках этих связей какого они типа для DBF нельзя.
Например, если у меня есть таблица Лицо и в нем есть словарное поле [Пол], то очевидно что связь может быть только 1:1 А вот если мне потребуется хранить информацию об адресе прописки и фактическом адресе проживания, то тут уже будет связь 1:Много И в первом и втором случае связь между таблицами будет настроена одинаково. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 06.01.2011 в 13:13. |
#11
|
||||
|
||||
Я понимаю, что вы имеете ввиду, но у меня вот такой случай: я делаю БД про собак...Приведу например такие таблиц, которые должны быть связаны между собой связью один ко многим:
СОБАКА № Собаки Кличка Порода Возраст Дата прививки ВЫСТУПАЕТ № Собаки № Клуба № Ринга Дата КЛУБ № Клуба Название Адрес Телефон Т.е. одна собака может выступать в нескольких клубах и в одном клубе может выступать несколько собак. Таблица "Выступает" - таблица-связка из логической модели, насколько я поняла, она не создаётся и не заполняется..? Причём я создала 30 собак и 20 клубов, чтобы как-раз таки в некоторых клубах выступало несколько собак. Вопрос - для таких таблиц с разным количеством записей возможна такая связь через Table? И если сделать такую связь, как распределить какая собака в каком клубе выступает без добавления нового поля? Последний раз редактировалось NightVamp, 07.01.2011 в 13:36. |
#12
|
||||
|
||||
Не так. Таблица Выступает должна быть реальной. В ней просто будут хранится ссылки (ключи) на таблицу Собака,Клуб и возможно Ринг(если необходимость в такой таблице есть) и какие-то вспомогательные данные - Дата и т.д.
На мой взгляд этих 3-таблиц достаточно для получения полной информации о Выступлении,Клубе,Собаке. Для ввода информации вполне достаточно такой связки: Выступает.№Собаки -> Собака.№Собаки Выступает.№Клуба -> Клуб.№Собаки С поиском нужной информации по одному или нескольким полям из этих таблиц уже сложнее, но можно реализовать через SQL-запросы. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#13
|
||||
|
||||
Т.е. создать эту таблицу-связку также как остальные через DataBase Dekstop и просто заполнить её имеющимися номерами собак, клубов? Кстати, насчёт ринга вы угадали - есть такая таблица(в ней тоже 20 записей). И ещё вопрос - тип таблицы "Выступает" сделать Paradox наверно нужно? И этот способ связи через Table будет подходить если, скажем, выставить на форму все три эти таблицы и начать связывать таблицу "Собака" с "Выступает" и таблицу "Клуб" с "Выступает"?
|
#14
|
||||
|
||||
Не надо делать таблицы в разных базах данных. Это не виннегрет. Все таблицы должны быть одного типа. Раз вы начали делать как DBF, то и заканчивать надо тем-же.
Схема конечно сильно упрощенная, по хорошему тут много чего надо добавить и переделать, но для начала и так пойдет. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 07.01.2011 в 20:59. |
#15
|
||||
|
||||
Вроде бы нашла код для создания первичного ключа:
ALTER TABLE Имя_таблицы ADD PRIMARY KEY(имя_поля). Не могу понять куда и как его писать? Раз это команда SQL, значит нужно добавить Query и в его свойстве SQL записать этот код? А можно просто через Database Dekstop изменить структуру таблицы, выбрав индекс? В вашем файле поля Порода и Кличка указаны как вторичные ключи, кажется..? Зачем они нужны? Последний раз редактировалось NightVamp, 09.01.2011 в 14:09. |