![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]
Возможно.