Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.25;
Скачать: CL | DM;

Вниз

Запросы   Найти похожие ветки 

 
Клара   (2007-02-06 10:58) [0]

Доброго дня Вам, господа знатоки!
У нас возникла проблема в удалении записей из двух таблиц.
Имеется:
DELETE Reklama.*, zakasi.*, IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1
FROM Reklama INNER JOIN zakasi ON Reklama.kod_objavl = zakasi.kod_objavl
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));
в таком варианте он не работает, что не так подскажите?


 
stone ©   (2007-02-06 11:01) [1]


> что не так подскажите?

синтаксис запроса на выборку данных <> синтаксис запроса на удаление данных


 
ЮЮ ©   (2007-02-06 11:01) [2]


> DELETE Reklama.*, zakasi.*, IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1

Если подчеркнутое означает удаление их таблиц Reklama и zakasi, то откуда предполагает удаление выделенного?


 
Клара   (2007-02-06 11:05) [3]


> stone

Выборка как раз происходит, а вот следующий шаг не работает или работает удаление из одной таблицы zakasi.*.


 
Клара   (2007-02-06 11:08) [4]


> ЮЮ


> IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1

Вот это выборка с условием, если договор не продляется 7 дней, то мы удаляем эти записи из двух таблиц.


 
stone ©   (2007-02-06 11:11) [5]


> Клара   (06.02.07 11:05) [3]
> Выборка как раз происходит, а вот следующий шаг не работает
> или работает удаление из одной таблицы zakasi.*.

Я вижу только один шаг - удаление.

ЗЫ. Неплохо бы уточнить СУБД, а то меня терзают смутные сомнения...


 
Клара   (2007-02-06 11:13) [6]


> stone

Access, а проги в D7


 
ЮЮ ©   (2007-02-06 11:14) [7]

все условия должны быть в WHERE. Тем более оно уже там есть


 
Клара   (2007-02-06 11:16) [8]


> ЮЮ

Это условие с вычисляемым полем.


 
Desdechado ©   (2007-02-06 11:17) [9]

> Вот это выборка с условием
Все условия заключаются в WHERE.
Учите матчасть, мадам.


 
sniknik ©   (2007-02-06 11:19) [10]

+ удаление из двух и более таблиц в одной команде в access(jet) невозможно.


 
Клара   (2007-02-06 11:20) [11]

DELETE zakasi.*, IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1
FROM Reklama INNER JOIN zakasi ON Reklama.kod_objavl = zakasi.kod_objavl
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));
Если вот так, то удаление происходит, но только из одной таблицы, а как удалить из связаных. Причем Reklama является родительской.


 
Клара   (2007-02-06 11:22) [12]


> Учите матчасть, мадам.


> Desdechado

А там как бы его нет!!!


 
Клара   (2007-02-06 11:23) [13]


> sniknik

А что можно сделать?


 
ЮЮ ©   (2007-02-06 11:24) [14]

DELETE Reklama.*, zakasi.*
FROM ...


 
Sergey13 ©   (2007-02-06 11:25) [15]

> [11] Клара   (06.02.07 11:20)
> а как удалить из связаных. Причем Reklama является родительской.

А каскадного удаления в аксесе нет?


 
Клара   (2007-02-06 11:26) [16]


> ЮЮ

Можно мысль продлить.


 
Клара   (2007-02-06 11:29) [17]


> Sergey13

Есть, но каскад удаляет сначала в родительских, а затем в дочерних.
А у нас нет проблем в удалении из дочерней zakasi.*.


 
ЮЮ ©   (2007-02-06 11:31) [18]

Дальше - все ваше.
Если запрос
SELECT Reklama.*, zakasi.*, IIf([data_konca_pokaza]+7>=Date(),1,0) AS Выражение1
FROM Reklama INNER JOIN zakasi ON Reklama.kod_objavl = zakasi.kod_objavl
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));

возвращает именно те записи, что нужно удалить, то

DELETE Reklama.*, zakasi.*
FROM Reklama INNER JOIN zakasi ON Reklama.kod_objavl = zakasi.kod_objavl
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));


 
Sergey13 ©   (2007-02-06 11:33) [19]

> [17] Клара   (06.02.07 11:29)
> Есть, но каскад удаляет сначала в родительских, а затем
> в дочерних.
Да ты что?!!! А мужики то не знают.


 
Клара   (2007-02-06 11:36) [20]


> ЮЮ

Невозможно удаление записей из указанных таблиц.


 
Клара   (2007-02-06 11:37) [21]


> Sergey13

Ваш вариант какой?


 
Sergey13 ©   (2007-02-06 11:44) [22]

> [21] Клара   (06.02.07 11:37)

Обратный разумеется. Но это не так важно. Главное удаляются связанные записи в обеих таблицах. Ты же этого хотела?


 
Клара   (2007-02-06 11:45) [23]


> Да ты что?!!! А мужики то не знают.

Я знаю, что вы умные! Вот поэтому я к Вам и обращаюсь.


 
Desdechado ©   (2007-02-06 11:47) [24]

> А там как бы его нет!!!
Чего нет и где, выражайтесь яснее.
И еще раз - учите матчасть. Такую пургу нести, это же сколько подсолнухов выкурить надо было.


 
Клара   (2007-02-06 11:48) [25]


> Обратный разумеется.

Но тогда не учитывается целостность. Я думала над этим.


 
Sergey13 ©   (2007-02-06 11:52) [26]

> [25] Клара   (06.02.07 11:48)
> Но тогда не учитывается целостность. Я думала над этим.
Ты прикалываешься?


 
Клара   (2007-02-06 11:55) [27]


> Desdechado

Я не курю!!!


 
Клара   (2007-02-06 11:58) [28]


> Sergey13

Я может, что-то не знаю? Речь идет о способах объединения (левое, правое, полное). Если нет то как это сделать.


 
ЮЮ ©   (2007-02-06 11:59) [29]

Если data_konca_pokaza в Reklama, то

1)  [11]

2)
DELETE *
FROM Reklama
WHERE
WHERE (((IIf([data_konca_pokaza]+7>=Date(),1,0))=0));


 
Sergey13 ©   (2007-02-06 11:59) [30]

> [28] Клара   (06.02.07 11:58)

Я говорю про каскадное удаление по внешнему ключу.


 
Клара   (2007-02-06 12:04) [31]


> Sergey13

Это в запросе как то отражается или только в схеме данных?
Я пробовала все варианты.


 
Sergey13 ©   (2007-02-06 12:07) [32]

> [31] Клара   (06.02.07 12:04)

Только в схеме.


 
Клара   (2007-02-06 12:08) [33]


> ЮЮ



> data_konca_pokaza

Берется из таблицы  zakasi.


 
Клара   (2007-02-06 12:10) [34]


> Sergey13

Все флажки выставлены, при выполнении записи удаляются только из zakasi.


 
ЮЮ ©   (2007-02-06 12:18) [35]


> Все флажки выставлены, при выполнении записи удаляются только
> из zakasi.


Запросом из [11]?
А если
DELETE Reclama.*
FROM ...

а из zakasi должно удалиться каскадом.

А записи в Reklama без единой записи в  zakasi  возможны и нужны?


 
Клара   (2007-02-06 12:39) [36]


> ЮЮ


DELETE Reclama.*
FROM ...
Ну и дальше, что.
Все, что было предложено я проделываю и работает только вариант [11].
Но в этом случае удаляются записи только из одной zakasi.
А как обратную связь включить в каскаде?


 
Sergey13 ©   (2007-02-06 13:00) [37]

> А как обратную связь включить в каскаде?

Зачем? Удаляя из родителя удалятся и в дочерней. Вот и удаляй запросом из родительской таблицы.


 
ЮЮ ©   (2007-02-06 13:00) [38]

Похоже запись из мастер-таблицы должна присутствовать в запросе 1 раз, даже при включенном каскадном удалении.

Тогда запрос следует переписать так:

DELETE *
FROM
 Reclama where Reklama.kod_objavl in
  (SELECTkod_objavl FROM zakasi WHERE (IIf([data_konca_pokaza]+7>=Date(),1,0))=0)


 
sniknik ©   (2007-02-06 13:34) [39]

> Похоже запись из мастер-таблицы должна присутствовать в запросе 1 раз, даже при включенном каскадном удалении.
с чего взял? все можно указывать, и сколько угодно раз, указание же из какой таблицы удалять (если в этом дело) указывается алиасом после DELETE xxx.* ... перед * (а если запрос однозначен, то ее вообще можно не писать. т.е. у тебя в примере [38] пройдет DELETE FROM ....)
это есть в справке access(Jet).


 
ЮЮ ©   (2007-02-06 13:38) [40]


> с чего взял?

Попробовал.
"Невозможно удаление записей из указанных таблиц"
при

DELETE main.*
FROM main INNER JOIN detail ON main.id=detail.mainId
WHERE detail.name="21";

и нормальное удаление при

DELETE *
FROM main
WHERE Id in( SELECT MainId FROM  detail WHERE name="21");


 
sniknik ©   (2007-02-06 14:22) [41]

хмм... а как таблицы сделаны? я пробовал на примере из справки на "CONSTRAINT - предложение" нормально. хотя... раздела WHERE у меня не было, может его перенести? (ну типа если условие по нему проверяется несколько позже чем проверка на возможность удаления?...)

проверь на тех же таблицах
DELETE m.*
FROM main m INNER JOIN detail d ON (m.id=d.mainId AND d.name="21")

???


 
Клара   (2007-02-07 09:39) [42]


> ЮЮ

Извините, что не общалась с Вами. Непредвиденные обстоятельства.
Я всё сделала. Спасибо!


 
Клара   (2007-02-07 09:46) [43]


> ЮЮ

Перечитала всё, что было под рукой об удалении, половина примеров из учебников не работает. Если не трудно ответьте: Вы каким руководством пользуетесь?


 
sniknik ©   (2007-02-07 11:10) [44]

> Вы каким руководством пользуетесь?
всегда тем, что идет с используемым сервером/движком т.е. для MSSQL это BOL, для Access его справка (чтобы не открывать сам аксесс, не лезть там в построение запросов только чтобы нажать там F1, просто вывел ссылку на JETSQL40.CHM на рабочий стол)


 
Клара   (2007-02-07 12:33) [45]


> sniknik

Спасибо я попробую.


 
Клара   (2007-02-07 15:18) [46]

Я нашла этот справочник, но то что лежит на поверхности я знаю наизусть, а вот подробности почемуто выдают, "Ошибка сценариев". Что нужно сделать в этом случае?  
Может переустановить или обновить систему.


 
sniknik ©   (2007-02-07 15:29) [47]

> Что нужно сделать в этом случае?  
http://support.microsoft.com/kb/308260/ru



Страницы: 1 2 вся ветка

Текущий архив: 2007.02.25;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.033 c
2-1171017452
User_OKA
2007-02-09 13:37
2007.02.25
база Interbase


4-1150218782
Igor Stepanov
2006-06-13 21:13
2007.02.25
Программирование работы с USB-портом


11-1149484092
Cawa
2006-06-05 09:08
2007.02.25
IBDataBase получение списка таблиц


15-1170395686
WondeRu
2007-02-02 08:54
2007.02.25
Оцените новую версию сайта "DirectShow по-русски"


1-1168109275
Kolan
2007-01-06 21:47
2007.02.25
Как добраться до пункта меню если у него есть TAction