-
FIBPlus 6.8.5 Ehlib 4
2 таблицы : PEOPLES(MAN_ID(PK),SURNAME,NAME) DOCUMENTS(DOC_ID(PK),MAN_ID(FK),DOC_TYPE,DOC_DATA)
Используя левое внешнее соединение получаю нужный результат, соединяю две таблицы Датасет TpFIBDataset SelectSQL: SELECT PEOPLES.MAN_ID, PEOPLES.SURNAME, PEOPLES.NAME, DOCUMENTS.DOC_TYPE, DOCUMENTS.DOC_DATA FROM PEOPLES LEFT OUTER JOIN DOCUMENTS ON PEOPLES.MAN_ID=DOCUMENTS.MAN_ID
Но по глупости, попытавшись в UpdateSQL модифицировать 2 таблицы сразу и почитав кое чего понял что здесь это невозможно. Пытался прописать в UpdateSQL 2 запроса (один после другого), тоже не получилось. Подскажите элегантный и правильный выход (хранить в одной таблице не предлогать :))
-
> Александр из Перми (28.04.09 19:50)
ХП, которая будет > изменять данные в 2-х таблицах малой кровью
-
как мне модифицировать запись с текущим значением MAN_ID в обоих таблицах именно силами датасета?
естественно запрос прописываемый мной в UpdateSQL
UPDATE PEOPLES SET SURNAME = :SURNAME, NAME = :NAME WHERE MAN_ID = :OLD_MAN_ID
даже не собирается модифицировать данные в DOCUMENTS.
Так же как и запрос UPDATE DOCUMENTS SET DOC_TYPE = :DOC_TYPE, DOC_DATA = :DOC_DATA, WHERE MAN_ID = :OLD_MAN_ID не собирается модифицировать PEOPLES.
Наверное можно в 2 захода как то, но что мне прописать в запросе UpdateSQL в датасете. Какое типовое решение существует
-
CREATE PROCEDURE PEOPLES_DOCUMENTS(
SURNAME varchar(999),
NAME varchar(999),
OLD_MAN_ID varchar(999),
DOC_TYPE varchar(999),
DOC_DATA varchar(999),
)
AS
BEGIN
UPDATE PEOPLES
SET
SURNAME = :SURNAME,
NAME = :NAME
WHERE
MAN_ID = :OLD_MAN_ID
UPDATE DOCUMENTS
SET
DOC_TYPE = :DOC_TYPE,
DOC_DATA = :DOC_DATA,
WHERE
MAN_ID = :OLD_MAN_ID
END и в UpdateSQL в датасете: EXECUTE PROCEDURE PEOPLES_DOCUMENTS(:SURNAME,:NAME,:OLD_MAN_ID,:DOC_TYPE,:DOC_DATA)
-
> Александр из Перми (29.04.09 05:00) [2]
можно еще EXECUTE BLOCK использовать и обойтись без ХП
-
> [0] Александр из Перми (28.04.09 19:50)
ИМХО, "малой кровью" - это сделать нормальную простую мастер-детальную связку и спокойно редактировать 2 (два) датасета.
-
> Александр из Перми (29.04.2009 5:00:02) [2]
Нефиг редактировать в гриде, а потом стойко преодолевать трудности. Перейди на нормальную работу с запросами и транзакциями.
-
Если б еще знать, что на самом деле хочет автор...Было бы не плохо
-
> Виталий Панасенко (29.04.2009 12:58:07) [7]
Чего тут непонятного - хочет изменить данные в двух таблицах, через свойство UpdateSQL
-
> Anatoly Podgoretsky © (29.04.09 13:26) [8]
Да, не дочитал.. Свинной грипп наверное(тьфу, тьфу, тьфу)..:-). Тогда CachedUpdates + UpdateObject
-
И можно без CachedUpdates использовать UpdateObject.. Этих самых UpdateObjectов можно нацеплять на один датасэт немеряно
-
> Нефиг редактировать в гриде, а потом стойко преодолевать > трудности. Перейди на нормальную работу с запросами и транзакциями. >
я не в гриде редактирую, в гриде меня ужасно раздражет. В ДБ-контролах. В гриде все запрещено, только отображение. Просто хотелось научиться пользоваться компонентами Delphi в стиле быстрой разработки для работы с БД. Писал раньше под MySQL на PHP, под MySQL на Delphi через API, на Delphi под SQLite тоже через API. Сейчас изучаю Firebird, до хранимых процедур пока не добрался, но не отрицаю такого, если метод эффективный изучу вскоре. В SQL более менее ориентируюсь, а вот механизмы работы знаю пока слабовато.
С UpdateObject получилось, но приходится родительский датасет переоткрывать, чтоб видеть изменения. Скорей всего с тразакциями что то не то. Использую 1 на чтение и 1 на запись. Может UpdateObject пустить в еще одной? Про Кэшапдетс ничего незнаю,почитаю маны по FIBPlus, возникнут вопросы, задам. Всем спасибо
-
> [11] Александр из Перми (29.04.09 19:33)
Ты почитай материал на http://ibase.ruКоль с FB занимаешься.
-
> Александр из Перми (29.04.09 19:33) [11]
OMG...
> AndreyV © (29.04.09 20:21) [12]
+1
-
> С UpdateObject получилось, но приходится родительский датасет > переоткрывать, чтоб видеть изменения. Скорей всего с тразакциями > что то не то. Использую 1 на чтение и 1 на запись. Может > UpdateObject пустить в еще одной? Про Кэшапдетс ничего незнаю, > почитаю маны по FIBPlus, возникнут вопросы, задам. Всем > спасибо
Сделай FullRefresh
|