Форум: "Базы";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];
ВнизПроблема с master-detail на сервере приложений Найти похожие ветки
← →
--Reporter-- (2002-01-17 13:16) [0]Есть у меня в БД такие 2 таблицы - Direction и Speciality, и между ними существует связь одна Direction -> много Speciality. Их структура такова (в общих чертах):
CREATE TABLE DIRECTION (
ID INTEGER NOT NULL,
DIRECTION VARCHAR(255) NOT NULL COLLATE PXW_CYRL
);
ALTER TABLE DIRECTION ADD PRIMARY KEY (ID);
CREATE TABLE SPECIALITY (
ID INTEGER NOT NULL,
DIRECTION INTEGER NOT NULL,
SPECIALITY VARCHAR(255) NOT NULL
);
ALTER TABLE SPECIALITY ADD PRIMARY KEY (ID);
ALTER TABLE SPECIALITY ADD CONSTRAINT SPECIALITY2DIRECTION FOREIGN KEY (DIRECTION) REFERENCES DIRECTION (ID) ON DELETE CASCADE ON UPDATE CASCADE;
Делаю я на сервере приложений два TIBQuery: Direction и Speciality:
Direction:
SQL = select * from direction
UpdateObject = UpDirection
где:
UpDirection - TIBUpdateSQL
UpDirection:
InsertSQL = insert into direction (ID, DIRECTION) values (:ID, :DIRECTION)
К Direction подключаю DataSource - DSDirection
DSDirection:
DataSet = Direction
Speciality - это TIBQuery
Speciality:
DataSource = DSDirection
SQL = select * from speciality where direction=:id
UpdateObject = UpSpeciality
где
UpSpeciality - TIBUpdateSQL
InsertSQL = insert into speciality
(ID, DIRECTION, SPECIALITY)
values
(:ID, :DIRECTION, :SPECIALITY)
К запросу Direction подключаю TDataSetProvider, с помощью которого и передаю клиенту эти две таблицы.
На клиенте ловлю их TClientDataSet-ом CDSDirection
И через DataSetField подключаю к нему CDSSpeciality
При перемещении по этим таблицам все нормально: становится активной какая-оибо запись в CDSDirection - появляются только те записи, в CDSSpeciality, у которых поле Direction равно полю ID выделенной записи в CDSDirection...
Проблема происходит только при применении метода INSERT в компоненте CDSSpeciality. В новой записи, которая появляется сразу послек применения данного метода заполнено не поле DIRECTION, что следовало бы ожидать, значением ID текущей записи в CDSDirection. Нет... Этим значением заполняется поле ID из CDSSpeciality, и в результате, поскольку оно является у меня первичным ключом, я не могу добавить введенное значение в базу данных...
В чем я ошибся, что я сделал не так, и как заставить Delphi подставлять значение ключевого поля родительской таблицы не в ключевое поле дочерней, а в поле, которое с ним связано.
Буду благодарен любым советам.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.004 c