sql - запрос на удаление спецификации
Модераторы: m0p3e, edward_K, Модераторы
sql - запрос на удаление спецификации
Не могу решить проблему по удалению спецификации
1. При выдачи sql - запроса
Select SpSopr.kol ,katsopr.name, katsopr.nsopr, katsopr.DSOPR, katsopr.VIDSOPR from SpSopr
where ((katsopr.nrec /== SpSopr.cSopr and word(9999) /== katsopr.VIDSOPR));
выдает нужное количество записей. Все верно.
При выдачи sql - запроса
delete SpSopr
where ((katsopr.nrec /== SpSopr.cSopr and word(9999) /== katsopr.VIDSOPR));
в первый раз удаляет специфмкации для первой накладной.
во-второй и по - следующие ничего не удаляет.
В чем причина не понятно
2. Более глобальная проблнма - как удалить спецификацию накладной зная Nrec документа основания
sql - запрос на удаление наклодной проходит
delete katsopr where
(( stepdoc.nrec==katsopr.cstepdoc and basedoc.nrec==stepdoc.CBASEDOC and _nrec == basedoc.nrec ));
где _nrec nrec ДО
а при попытке подцепить и удалить спецификации ко ВСЕМ накладным по этому ДО не получается
1. При выдачи sql - запроса
Select SpSopr.kol ,katsopr.name, katsopr.nsopr, katsopr.DSOPR, katsopr.VIDSOPR from SpSopr
where ((katsopr.nrec /== SpSopr.cSopr and word(9999) /== katsopr.VIDSOPR));
выдает нужное количество записей. Все верно.
При выдачи sql - запроса
delete SpSopr
where ((katsopr.nrec /== SpSopr.cSopr and word(9999) /== katsopr.VIDSOPR));
в первый раз удаляет специфмкации для первой накладной.
во-второй и по - следующие ничего не удаляет.
В чем причина не понятно
2. Более глобальная проблнма - как удалить спецификацию накладной зная Nrec документа основания
sql - запрос на удаление наклодной проходит
delete katsopr where
(( stepdoc.nrec==katsopr.cstepdoc and basedoc.nrec==stepdoc.CBASEDOC and _nrec == basedoc.nrec ));
где _nrec nrec ДО
а при попытке подцепить и удалить спецификации ко ВСЕМ накладным по этому ДО не получается
Попробуйте написать так
delete spsopr where ((spsopr.csopr /== katsopr.nrec)) and katsopr.vidsopr=word(9999);
и для удаления по basedoc:
delete spsopr where ((spsopr.csopr /== katsopr.nrec and
katsopr.cstepdoc /== stepdoc.nrec ))
and stepdoc.cbasedoc =_nrec;
Проверить не могу, нет тестовой базы с наполненными этими табличками, но по опыту должно получиться:)
delete spsopr where ((spsopr.csopr /== katsopr.nrec)) and katsopr.vidsopr=word(9999);
и для удаления по basedoc:
delete spsopr where ((spsopr.csopr /== katsopr.nrec and
katsopr.cstepdoc /== stepdoc.nrec ))
and stepdoc.cbasedoc =_nrec;
Проверить не могу, нет тестовой базы с наполненными этими табличками, но по опыту должно получиться:)
Sheinina
спасибо заработало, но
В начале выдало (и в первом и втором случае):
«Предупреждение:Нельзя полностью удалять таблицу SpSopr не поставив DELETE ALL или ограничения или условия! ….
delete spsopr where ((spsopr.csopr /== katsopr.nrec)) and katsopr.vidsopr=word(9999);»
потом через 5 минут запрос отрабатывает (записи удаляет)
1. Предупреждение к чему ?
2. Нельзя ли по- быстрее ?
спасибо заработало, но
В начале выдало (и в первом и втором случае):
«Предупреждение:Нельзя полностью удалять таблицу SpSopr не поставив DELETE ALL или ограничения или условия! ….
delete spsopr where ((spsopr.csopr /== katsopr.nrec)) and katsopr.vidsopr=word(9999);»
потом через 5 минут запрос отрабатывает (записи удаляет)
1. Предупреждение к чему ?
2. Нельзя ли по- быстрее ?
Ged и Sheinina
большое спасибо, работает быстро.
Но к сожалению у меня был план использовать SQL - запрос в ARD- форме. А именно:
.form "ard01"
.NameInList 'Удаление накладных и спецификаций по ДО'
.ard
.var
_nrec : comp;
.endvar
.begin
GetDBase,true,1,201,_nrec,0,0,0)end.
.Create View MyView;
.begin
delete spsopr where
((spsopr.csopr /== katsopr.nrec and katsopr.cstepdoc /== stepdoc.nrec )) and stepdoc.cbasedoc =_nrec;
delete katsopr where basedoc.nrec == stepdoc.CBASEDOC and _nrec == basedoc.nrec ));
end.
.endform
Как я понимаю использовать совет господина Ged мне нельзя в ARD- форме. А совет Sheinina приводит к большой задержке примерно 5 минут.
Так , что мне посоветуете делать
большое спасибо, работает быстро.
Но к сожалению у меня был план использовать SQL - запрос в ARD- форме. А именно:
.form "ard01"
.NameInList 'Удаление накладных и спецификаций по ДО'
.ard
.var
_nrec : comp;
.endvar
.begin
GetDBase,true,1,201,_nrec,0,0,0)end.
.Create View MyView;
.begin
delete spsopr where
((spsopr.csopr /== katsopr.nrec and katsopr.cstepdoc /== stepdoc.nrec )) and stepdoc.cbasedoc =_nrec;
delete katsopr where basedoc.nrec == stepdoc.CBASEDOC and _nrec == basedoc.nrec ));
end.
.endform
Как я понимаю использовать совет господина Ged мне нельзя в ARD- форме. А совет Sheinina приводит к большой задержке примерно 5 минут.
Так , что мне посоветуете делать
Вернее
Код: Выделить всё
.form "ard01"
.NameInList 'Удаление накладных и спецификаций по ДО'
.ard
.var
_nrec : comp;
.endvar
.begin
GetDBase,true,1,201,_nrec,0,0,0)end.
.Create View MyView
As Select *
From
Spsopr,
Katsopr
where
((katsopr.nrec /== SpSopr.cSopr and
word(9999) /== katsopr.VIDSOPR
))
;
.begin
_Loop katsopr
{ _loop Spsopr
{
Delete Current Spsopr;
}
}
end.
.endform
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
надо бы заменить наGed писал(а): _Loop katsopr
{ _loop Spsopr
{
Delete Current Spsopr;
}
}
[/code]
Код: Выделить всё
_Loop katsopr
{
Delete all Spsopr;
}
Re:
чего то начал смотреть свои реплики, да и комменты к ним.Max_Fin писал(а):надо бы заменить наGed писал(а): _Loop katsopr
{ _loop Spsopr
{
Delete Current Spsopr;
}
}
[/code]Код: Выделить всё
_Loop katsopr { Delete all Spsopr; }
Delete all Spsopr; - нельзя так делать.
по идее алл- удаляет все в не зависимости от подцепок во вью!
С Эдиком ловили такую фичу, думаю он подтвердит.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: sql - запрос на удаление спецификации
ну мож уже и починили, но врядли. All и вводили чтобы дать команду на удаление всей не временной таблицы.
А так да было all + условия = all без условий.
А так да было all + условия = all без условий.