Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.12.2011, 22:12
Аватар для Sofia Guseva
Sofia Guseva Sofia Guseva вне форума
Прохожий
 
Регистрация: 24.12.2011
Адрес: Липецк
Сообщения: 11
Версия Delphi: 6.0
Репутация: 157
Печаль Подстановочные поля

Здравствуйте

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

Имеется связь таблиц Paradox:
Расписание <- группа -> дисциплины <- Преподаватели

Подскажите пожалуйста, как создать в таблице Расписание подстановочное поле из таблицы Преподаватели'PrepodName'. Из таблицы Дисциплины я смогла подставить значения. А вот соответствующего Дисциплине Преподавателя подставить ну никак не выходит!

И ещё один вопрос, как мне ограничить добавление строк в набор данных для Расписания (использую DBNAVIGATOR) количеством предметов для данной группы? (т.е. количество записей в Расписании для Группы1 должно совпадать с количеством Дисциплин, преподаваемых в Группе1)

Спасибо, что подарили мне ваше время.
Ответить с цитированием
  #2  
Старый 25.12.2011, 20:43
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

Попробую помочь. Но предлагаю все- таки не Paradox (скорее бы он умер!) а
все- таки что- нибудь посерьезней. Например Firebird
Здесь я набросал БД (наспех)
Суть вот в чем
БД содержит таблицы
-Список преподавателей
-Список дисциплин
-таблицу связи где указано какой преподаватель какую дисциплину преподает
Причем 1 преп может преподавать несколько дисципл. и обратно- одну дисц
могут преподавать разные преподы (те связь Многие- с многими)
-и наконец таблицу расписания
В примитивном случае можно отказаться от табл преподавателей и дисциплин
оставив только табл связи.
Но это полностью лишит тебя возможности доработок программы.

Ну и конечно до нового года не успеть. Если это не поздно- пиши. Сделаю.
Код:
/*****************************************************
    База данных программы Nikonov
    по заказу Никонова
******************************************************/


SET AUTODDL ON;
SET ECHO ON;
OUTPUT isql.txt;

CONNECT 'Nikonov.fdb'
USER 'sysdba' PASSWORD 'masterkey';
DROP DATABASE;
COMMIT;

SET NAMES WIN1251;
SET SQL DIALECT 3;
CREATE DATABASE 'Nikonov.fdb'
USER 'sysdba' PASSWORD 'masterkey'
DEFAULT CHARACTER SET WIN1251;
COMMIT;

CONNECT 'Nikonov.fdb'
USER 'sysdba' PASSWORD 'masterkey';





/***************************************************
        Список преподавателей
****************************************************/
CREATE TABLE Prepods (
    Tabnum INTEGER NOT NULL,           /* таб номер */
    Fam VARCHAR(50) NOT NULL,    /* фамилия препода */
    Sex CHAR(1),           /* пол */
    PRIMARY KEY(Tabnum)
    );

/***************************************************
        Дисциплины
****************************************************/
CREATE TABLE Diszipls (
    Naimen VARCHAR(20) NOT NULL,           /* наименование дисциплины первичный ключ */
    Chasov INTEGER,                         /* объем курса в часах */
    Auditoria VARCHAR(20),                  /* аудитория */
    PRIMARY KEY(Naimen)
    );

/***************************************************
        Таблица связи
****************************************************/
CREATE TABLE Sootv (
    NN INTEGER NOT NULL,        /* первичный ключ */
    Tabnum INTEGER NOT NULL,           /* таб номер */
    Naimen VARCHAR(20) NOT NULL,           /* наименование дисциплины первичный ключ */
    CONSTRAINT Tabnum_FK FOREIGN KEY (Tabnum) REFERENCES Prepods(Tabnum) ON DELETE CASCADE,
    CONSTRAINT Naimen_FK FOREIGN KEY (Naimen) REFERENCES Diszipls(Naimen) ON DELETE CASCADE,
    PRIMARY KEY(NN)
    );

CREATE GENERATOR Sootv_NN_GEN;
SET GENERATOR Sootv_NN_GEN TO 0;


/***************************************************
        Расписание
****************************************************/
CREATE TABLE Raspisanie(
    NN INTEGER NOT NULL,        /* первичный ключ */
    NN_Sootv INTEGER,      /* внешний ключ связи с таблицей соответствия */
    Dat DATE,                   /* дата занятий */
    CONSTRAINT Raspisanie_FK FOREIGN KEY (NN_Sootv) REFERENCES Sootv(NN) ON DELETE CASCADE,
    PRIMARY KEY(NN)
    );

CREATE GENERATOR Raspisanie_NN_GEN;
SET GENERATOR Raspisanie_NN_GEN TO 0;


SET TERM !;

/**********************************************
    Генераторы первичных ключей
***********************************************/
------------------------------------------------------- */
    CREATE TRIGGER Raspisanie_trig FOR Raspisanie
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.NN=GEN_ID(Raspisanie_NN_GEN,1);
END!

    CREATE TRIGGER Sootv_trig FOR Sootv
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.NN=GEN_ID(Sootv_NN_GEN,1);
END!


/***********************************************
        Начальная инициализация
************************************************/
SET TERM ;!

COMMIT;
Ответить с цитированием
Этот пользователь сказал Спасибо chainik за это полезное сообщение:
Sofia Guseva (26.12.2011)
  #3  
Старый 26.12.2011, 10:09
Аватар для Sofia Guseva
Sofia Guseva Sofia Guseva вне форума
Прохожий
 
Регистрация: 24.12.2011
Адрес: Липецк
Сообщения: 11
Версия Delphi: 6.0
Репутация: 157
По умолчанию

Большое спасибо

А с помощью FieldsEditor как это осуществить?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter