Update по таблице из подцепки

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Frodo
Посетитель
Сообщения: 37
Зарегистрирован: 29 мар 2005, 17:49

Update по таблице из подцепки

Сообщение Frodo »

Кто знает как сделать UPDATE по таблице при наложении ограничений из другой табл.

Например: Модифицируем BaseFin при условии, что тип платежного документа (бух.справки) PlPor.TIdK=10019

При формировании в Update подцепки как в Selec, а именно:

where ((plpor.nrec/==basefin.cplpor and 10019==plpor.tidk))

изменяются записи с BaseFin.cPlPor = 0, а не те которые есть в базе.

В LOT на конвертор нашел запись вида:
UPDATE SPSTEP
WHERE (( SPSTEP.cStepDoc == StepDoc.nRec AND
StepDoc.cBaseDoc == BaseDoc.nRec AND
WORD(1000)+BaseDoc.VidDoc == SpDocNal.TipDoc AND
SPSTEP.nRec /== SpDocNal.cSpDoc ))
SET SPSTEP.cGrNal := SpDocNal.cGrNal;

которая одним своим видом приводит в замешательство и полностью перечеркивает Гал.доку по формированию подцепок...
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Не-е, так не выйдет

Сообщение Den »

Из Lot так не получится.Я с этим давным давно столкнулся.Нельзя так проапдейтить таблицу, нее являющейся корневой в подцепках.Обрати внимание, что в галактическом lot-е именно spstep - корневая.
По всей видимости это особенности галактического SQL.
Вот такие дела.Есть два выхода.
1.Бежать по basefin-у с таким же tidkgal.Что у plpor,что у basefin - tidkgal д.б. одинаковы.Иначе - проверку таблиц запускай.

2.Такой простенький update можно организовать c помощью VIp или fcom

В третьих если кто скажет как это из lot можно организовать буду сильно удивлен :o
sth
Постоянный обитатель
Сообщения: 148
Зарегистрирован: 29 мар 2005, 17:49

Re: Не-е, так не выйдет

Сообщение sth »

точно.
запросом можно проапдейтить только корневую таблицу.

только вот я не понял почему запрос в конверторном лоте приводит в замешательство?
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

Re: Не-е, так не выйдет

Сообщение Vitas »

а так не получится?:
where ((basefin.cplpor/==plpor.nrec and 10019==plpor.tidk))
Ищу возможности довести и так отличный продукт до еще большего блеска
Frodo
Посетитель
Сообщения: 37
Зарегистрирован: 29 мар 2005, 17:49

Re: Не-е, так не выйдет

Сообщение Frodo »

О замешательстве...
Не в плане дискуссии о док-ции, которая по моему мнению составленна таким образом, что не способствует нахождению ответов, а есть "отмазкой" для ее составителей.
Итак из нее самой:
п.2.5 Операторы модификации данных
...
Если CURRENT отсутствует, то модификация производится для всех записей, удовлетворяющих ограничениям из WHERE.
...
Однако ни слова про то, что WHERE не соответствует описанию приведенному выше в разделе 2.4.4.
Frodo
Посетитель
Сообщения: 37
Зарегистрирован: 29 мар 2005, 17:49

Re: Не-е, так не выйдет

Сообщение Frodo »

where ((basefin.cplpor/==plpor.nrec and 10019==plpor.tidk))
хочет индекс NREC+TIDK.

Может здесь как-то ROOT прикрутить или сделать в 2-а этапа через PICKи?

VIP и FCOM конечно помогут. Но если такие действия нужно вставить в скрипт?
peterGunn
Сообщения: 7
Зарегистрирован: 29 мар 2005, 17:49

Re: Не-е, так не выйдет

Сообщение peterGunn »

а чем вас такой вариант не устраивает:
where(( 10019 == basefin.tipDoc and basefin.cplpor /== plpor.nRec )) ?

basefin.tipDoc = plpor.tidk в данном случае, на сколько я помню...
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не-е, так не выйдет

Сообщение Den »

при использвании update Root во Where не прокатывает.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не-е, так не выйдет

Сообщение Den »

Так то оно пройдет, но все-таки, Peter Gunn, вопрос первоночальный не в этом состоял - как в lot умудриться проапдейтить некорневую таблицу ;)
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Не-е, так не выйдет

Сообщение Deinis »

Народ, а что может помешать выйти за рамки двойных скобок и попробовать:
update basefin where ((plpor.nrec/==basefin.cplpor))and plpor.tidk = 10019 set basefin.TidkGal:=___;
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Не-е, так не выйдет

Сообщение Den »

Да вообщем-то ничего...тока так тоже не будет работать
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Не-е, так не выйдет

Сообщение Deinis »

Нда.., действительно не выходит. Выходит только так:
update
basefin
where ((basefin.cplpor == plpor.nrec))and plpor.tidk = WORD('10')
set basefin.TidkGal:=10;
Frodo
Посетитель
Сообщения: 37
Зарегистрирован: 29 мар 2005, 17:49

Re: Не-е, так не выйдет

Сообщение Frodo »

С BaseFin получилось хотя и медленно за счет перебора всего PlPor.
А вот как быть с SoprHoz, где нет прямой ссылки на PlPor, а только в нагрузку справа с TIPDOC (индекс SOPRHOZ02).

И вообще предлагаю обсудить возможность выработки общего метода...
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

Re: Не-е, так не выйдет

Сообщение Vitas »

where ((basefin.cplpor/==plpor.nrec and 10019==plpor.tidk))
хочет индекс NREC+TIDK.

ну это совсем просто:
where ((basefin.cplpor/==plpor.nrec and 10019==plpor.tidk (NoIndex)))

просто по таблицам индексы не поню, а лазить ломает :)
Ищу возможности довести и так отличный продукт до еще большего блеска
Frodo
Посетитель
Сообщения: 37
Зарегистрирован: 29 мар 2005, 17:49

Re: Не-е, так не выйдет

Сообщение Frodo »

Проверил...

where ((basefin.cplpor/==plpor.nrec and 10019==plpor.tidk(NoIndex)))

Работает, но медленее чем

where ((basefin.cplpor/==plpor.nrec and (plpor.tidk=10019))

Предлагаю вернуться к вопросу о SoprHoz
;)
Ответить