Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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 подставлять значение ключевого поля родительской таблицы не в ключевое поле дочерней, а в поле, которое с ним связано.

Буду благодарен любым советам.


 
Romkin   (2002-01-17 14:11) [1]

1. Для MIDAS необходим IBX4.52 (www.borland.com), более старшие версии не подходят
2. Заполняй поля ручками на cdsDirection.OnNewRecord, если первичный ключ cdsSpeciality заполняется на сервере, то зачем тебе это поле на клиенте?

А так, все, что написано, практически корректно.


 
--Reporter--   (2002-01-17 14:38) [2]

1. У меня самый первый release Delphi 5. Я не знаю, какие там IBX...

2. Попробую... Спасибо

Но почему он все таки заполняет ID а не DIRECTION непонятно...


 
Romkin   (2002-01-17 14:40) [3]

Поставь Update pack & IBX 4.52 - все у Borland


 
--Reporter--   (2002-01-19 09:40) [4]

Поставил, не помогло...

Но проблему решил. Сделал в AddSpeciality:

Select ID as IDS, DIRECTION, SPECIALITY FROM SPECIALITY WHERE Direction=:ID


И соответственно везде поменял ID на IDS в UpSpeciality

Я так понял, он перепутывал параметры :ID...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
1-42717
Welder
2002-01-30 11:21
2002.02.14
TdrawGrid


1-42784
Eraser
2002-01-31 09:45
2002.02.14
Формирование массива


3-42693
ТеньЛуны
2002-01-22 10:57
2002.02.14
dbExpress - поможите люди добрые!


3-42670
Mikhail
2002-01-18 21:42
2002.02.14
Ответте хоть ради смеха...


14-42841
Skyter
2001-12-21 16:39
2002.02.14
Люди подскажите новостную группу по дельфям сенькаю.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский