Главная страница
    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.46 MB
Время: 0.005 c
3-42657
DeNNiss
2002-01-17 08:08
2002.02.14
Помогите пожалуйста!


1-42724
Serg001
2002-01-30 16:16
2002.02.14
Народ, помогитееееееееееееееееее!


3-42683
ShaH
2002-01-17 10:08
2002.02.14
нити (threads) и базы данных (MSAccess)


1-42777
Yuraz
2002-01-31 14:46
2002.02.14
Подскажите, как загрузить картинку в Image не с самого начала координат (0,0; лево-вверх)


14-42865
GARIK_PR
2001-12-25 13:36
2002.02.14
Потушить Windows





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский