Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1274405740
Дмитрий С
2010-05-21 05:35
2010.08.27
Мост в Волгограде


15-1271276434
Кеша
2010-04-15 00:20
2010.08.27
Kylix


2-1274170139
Крапивин Олег
2010-05-18 12:08
2010.08.27
Переключение датасетов


2-1272205654
romario
2010-04-25 18:27
2010.08.27
Работа с текстовым файлом


15-1265999141
OneYoungMan
2010-02-12 21:25
2010.08.27
Linux для старого компьютера...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский