Форум: "Базы";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизКак изменять данные в 2-х таблицах малой кровью Найти похожие ветки
← →
Александр из Перми (2009-04-28 19:50) [0]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 запроса (один после другого), тоже не получилось.
Подскажите элегантный и правильный выход (хранить в одной таблице не предлогать :))
← →
turbouser © (2009-04-29 00:07) [1]
> Александр из Перми (28.04.09 19:50)
ХП, которая будет
> изменять данные в 2-х таблицах малой кровью
← →
Александр из Перми (2009-04-29 05:00) [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 в датасете. Какое типовое решение существует
← →
turbouser © (2009-04-29 08:05) [3]
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)
← →
turbouser © (2009-04-29 08:17) [4]
> Александр из Перми (29.04.09 05:00) [2]
можно еще EXECUTE BLOCK использовать и обойтись без ХП
← →
Sergey13 © (2009-04-29 08:52) [5]> [0] Александр из Перми (28.04.09 19:50)
ИМХО, "малой кровью" - это сделать нормальную простую мастер-детальную связку и спокойно редактировать 2 (два) датасета.
← →
Anatoly Podgoretsky © (2009-04-29 08:59) [6]> Александр из Перми (29.04.2009 5:00:02) [2]
Нефиг редактировать в гриде, а потом стойко преодолевать трудности. Перейди на нормальную работу с запросами и транзакциями.
← →
Виталий Панасенко (2009-04-29 12:58) [7]Если б еще знать, что на самом деле хочет автор...Было бы не плохо
← →
Anatoly Podgoretsky © (2009-04-29 13:26) [8]> Виталий Панасенко (29.04.2009 12:58:07) [7]
Чего тут непонятного - хочет изменить данные в двух таблицах, через свойство UpdateSQL
← →
Виталий Панасенко (2009-04-29 14:04) [9]
> Anatoly Podgoretsky © (29.04.09 13:26) [8]
Да, не дочитал.. Свинной грипп наверное(тьфу, тьфу, тьфу)..:-). Тогда CachedUpdates + UpdateObject
← →
Виталий Панасенко (2009-04-29 14:09) [10]И можно без CachedUpdates использовать UpdateObject.. Этих самых UpdateObjectов можно нацеплять на один датасэт немеряно
← →
Александр из Перми (2009-04-29 19:33) [11]
> Нефиг редактировать в гриде, а потом стойко преодолевать
> трудности. Перейди на нормальную работу с запросами и транзакциями.
>
я не в гриде редактирую, в гриде меня ужасно раздражет. В ДБ-контролах. В гриде все запрещено, только отображение. Просто хотелось научиться пользоваться компонентами Delphi в стиле быстрой разработки для работы с БД. Писал раньше под MySQL на PHP, под MySQL на Delphi через API, на Delphi под SQLite тоже через API. Сейчас изучаю Firebird, до хранимых процедур пока не добрался, но не отрицаю такого, если метод эффективный изучу вскоре. В SQL более менее ориентируюсь, а вот механизмы работы знаю пока слабовато.
С UpdateObject получилось, но приходится родительский датасет переоткрывать, чтоб видеть изменения. Скорей всего с тразакциями что то не то. Использую 1 на чтение и 1 на запись. Может UpdateObject пустить в еще одной? Про Кэшапдетс ничего незнаю,почитаю маны по FIBPlus, возникнут вопросы, задам. Всем спасибо
← →
AndreyV © (2009-04-29 20:21) [12]> [11] Александр из Перми (29.04.09 19:33)
Ты почитай материал на
http://ibase.ru
Коль с FB занимаешься.
← →
turbouser © (2009-04-29 20:29) [13]
> Александр из Перми (29.04.09 19:33) [11]
OMG...
> AndreyV © (29.04.09 20:21) [12]
+1
← →
Виталий Панасенко(дом) (2009-04-30 08:19) [14]
> С UpdateObject получилось, но приходится родительский датасет
> переоткрывать, чтоб видеть изменения. Скорей всего с тразакциями
> что то не то. Использую 1 на чтение и 1 на запись. Может
> UpdateObject пустить в еще одной? Про Кэшапдетс ничего незнаю,
> почитаю маны по FIBPlus, возникнут вопросы, задам. Всем
> спасибо
Сделай FullRefresh
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.103 c