Форум: "Базы";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
ВнизFibDataSet Найти похожие ветки
← →
User_OKA (2004-02-09 10:30) [0]Имеем: D1 as TpFIBdataSet, D2 as TpFIBDataSet,
при этом D1 - master, D2 - detail
Возмоно ли для датасета D2 написать запрос InsertSQL, чтобы мастер - поле заполнялось автоматически?
← →
Johnmen (2004-02-09 10:42) [1]Возможно.
← →
User_OKA (2004-02-09 10:43) [2]а как?
← →
Johnmen (2004-02-09 10:51) [3]... (...,REF_FIELD_D2_TO_D1,...) VALUES(...,:ID_FIELD_D1,...)
где ID_FIELD_D1 - имя поля из D1
← →
User_OKA (2004-02-09 12:48) [4]Указанный вариант не работает. Может быть из-за того, что ограничание FOREIGN KEY для detail-таблицы не определено. Каскадные удаления/обновления реализованы на триггерах.
Как быть?
← →
Deniz (2004-02-09 14:00) [5]Предлог MAS_
← →
User_OKA (2004-02-09 14:20) [6]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)
← →
Johnmen (2004-02-09 14:30) [7]>User_OKA (09.02.04 12:48) [4]
Не понял. Что именно не работает ? Как не работает ? Как это видно ? И как должно быть ?
← →
User_OKA (2004-02-10 08:25) [8]На форме 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-10 09:29) [9]>Запись вставляется, но вот поле ID_MASTER заполняется значением
>default и код мастера не вставляется.
Враки...:)
>В итоге получаем запись, которую никто не видит.
Если никто не видит, то откуда сведения, что получаем ?
>Что делаю не так?
Все так...
← →
User_OKA (2004-02-10 09:46) [10]Запись вставляется, но вот поле ID_MASTER заполняется значением
default и код мастера не вставляется.
При вставки записи ID_MASTER = 0
В результате пользователь эту запись в программе не видит.
← →
Johnmen (2004-02-10 09:59) [11]Значит значение поля ID_ мастера есть 0 на момент вставки.
← →
User_OKA (2004-02-10 10:04) [12]В мастер датасете - код текущей записи, не 0.
← →
Johnmen (2004-02-10 10:47) [13]Возможно некорректно прописаны select, insert, refresh...
Всё должно работать !
← →
Deniz (2004-02-10 12:52) [14]INSERT INTO D2 (field1, field2, ID_MASTER) values (value1, value2, :MAS_ID_)
Связь D2.ID_MASTER = D1.ID_
← →
Johnmen (2004-02-10 14:36) [15]>Deniz © (10.02.04 12:52) [14]
Один хрен. Если в детальном нет поля с именем ID_
:)
← →
Deniz (2004-02-10 15:18) [16]> 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 17:23) [17]>Deniz © (10.02.04 15:18) [16]
Вполне может быть, что имена полей в мастере и детале могут совпадать. Чтобы их различать и нужен этот префикс.
В данном случае, "масло масляное". Естественно оно работает. Как и без префикса...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c