Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

FibDataSet [D5, IB6.x]


User_OKA ©   (2004-02-09 10:30:00) 

Имеем: D1 as TpFIBdataSet, D2 as TpFIBDataSet,
при этом D1 - master, D2 - detail
Возмоно ли для датасета D2 написать запрос InsertSQL, чтобы мастер - поле заполнялось автоматически?


Johnmen   (2004-02-10 17:23:00) [1]

>Deniz © (10.02.04 15:18) [16]

Вполне может быть, что имена полей в мастере и детале могут совпадать. Чтобы их различать и нужен этот префикс.
В данном случае, "масло масляное". Естественно оно работает. Как и без префикса...


Deniz   (2004-02-10 15:18:00) [2]

> Johnmen © (10.02.04 14:36) [15]
> Один хрен. Если в детальном нет поля с именем ID_
> :)


Ты не поверишь, но ведь и не должно быть :)
D1 - select id_ from d1
D2 - select id2, id_master from D2 where id_master = :id_
- insert into D2(id2, id_master) values (gen_id(...), :MAS_id_)
... и ведь работает :)


Johnmen   (2004-02-10 14:36:00) [3]

>Deniz © (10.02.04 12:52) [14]

Один хрен. Если в детальном нет поля с именем ID_
:)


Deniz   (2004-02-10 12:52:00) [4]

INSERT INTO D2 (field1, field2, ID_MASTER) values (value1, value2, :MAS_ID_)
Связь D2.ID_MASTER = D1.ID_


Johnmen   (2004-02-10 10:47:00) [5]

Возможно некорректно прописаны select, insert, refresh...
Всё должно работать !


User_OKA   (2004-02-10 10:04:00) [6]

В мастер датасете - код текущей записи, не 0.


Johnmen   (2004-02-10 09:59:00) [7]

Значит значение поля ID_ мастера есть 0 на момент вставки.


User_OKA   (2004-02-10 09:46:00) [8]

Запись вставляется, но вот поле ID_MASTER заполняется значением
default и код мастера не вставляется.

При вставки записи ID_MASTER = 0

В результате пользователь эту запись в программе не видит.


Johnmen   (2004-02-10 09:29:00) [9]

>Запись вставляется, но вот поле ID_MASTER заполняется значением
>default и код мастера не вставляется.

Враки...:)

>В итоге получаем запись, которую никто не видит.

Если никтоне видит, то откуда сведения, что получаем ?

>Что делаю не так?

Все так...


User_OKA   (2004-02-10 08:25:00) [10]

На форме D1 и D2 as TpFIBDataSet, DS1 и DS2 as TDataSource, Grid1 и Grid2 as TDBGridEh.
при этом D2.DataSource:=DS1 - делаем мастер-деталь, ну и соответственно D2.SelectSQL.Text:="SELECT * FROM D2 WHERE ID_MASTER = :ID_",
где ID_ - первичный ключ D1, ID_MASTER - поле связи D2.
Отображается все идеально.
Теперь хочу добавить запись в деталь. Редактирую непосредственно в гриде.
Для этого пишу D2.InsertSQL.Text:="INSERT INTO D2 (field1, field2, ID_MASTER) values (value1, value2, :ID_)".
Запись вставляется, но вот поле ID_MASTER заполняется значением default и код мастера не вставляется. В итоге получаем запись, которую никто не видит.
Что делаю не так? Может какие свойства TpFIBDataset надо "подрегулировать"?.


Johnmen   (2004-02-09 14:30:00) [11]

>User_OKA (09.02.04 12:48) [4]

Не понял. Что именно не работает ? Как не работает ? Как это видно ? И как должно быть ?


User_OKA   (2004-02-09 14:20:00) [12]

to Deniz> Предлог MAS_

Что это?

Вот мой запрос:
INSERT INTO DOGOVOR_OBJECT (ID_, DATA_ADD, DATA_EDIT, FLAG_READ, ID_MASTER501, NAME, ADRES, NUMARH, PRIM)
VALUES (GEN_ID(DOGOVOR_OBJECT_GEN, 1), "NOW", "NOW", 1, :ID_, ?NAME, ?ADRES, ?NUMARH, ?PRIM)


Deniz   (2004-02-09 14:00:00) [13]

Предлог MAS_


User_OKA   (2004-02-09 12:48:00) [14]

Указанный вариант не работает. Может быть из-за того, что ограничание FOREIGN KEY для detail-таблицы не определено. Каскадные удаления/обновления реализованы на триггерах.
Как быть?


Johnmen   (2004-02-09 10:51:00) [15]

... (...,REF_FIELD_D2_TO_D1,...) VALUES(...,:ID_FIELD_D1,...)
где ID_FIELD_D1 - имя поля из D1


User_OKA   (2004-02-09 10:43:00) [16]

а как?


Johnmen   (2004-02-09 10:42:00) [17]

Возможно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо