Чем отлич-ся Query от SQL запроса.
Подскажите пожалуйста, в чем у меня проблема?
В SQL-е создаю такой запрос
"DELETE Li
FROM
list_inform1 Li, Medicines M
Where
(Li.Medicines=M.ID_medicines)and(M.Category=9)"
Т. е. в пример возьмем, когда удаляю запись под номером 9-ть из таблицы Medicines то он из подчиненной таблицы list_inform1 удаляет все записи связанный с 9-ой записью. Здесь все работает нормально, но теперь этот же запрос запускаю в Билдере в таком виде:
Query1->ParamByName("Category")->AsInteger=9;
Query1->ExecSQL();
Когда скрипт в Query1 выглядит так:
DELETE Li
FROM
list_inform1 Li, Medicines M
Where
(Li.Medicines=M.ID_medicines)and(M.Category=:Category)
он у меня выдает такую ошибку “[Microsoft][Др. ODBC Microsoft Access] Необходимо указать таблицу, содержащую удаляемые записи”
ВОПРОС ПЕРВЫЙ: Почему тот же запрос который в SQL-е работает в Query не работает, они чем то отличаются?
А если в Query скрипт изменю на
DELETE Li.*
FROM
list_inform1 Li, Medicines M
Where
(Li.Medicines=M.ID_medicines)and(M.Category=:Category)
Он мне не выдает никакую ошибку, но и ничего не удаляет.
ВОПРОС ВТОРОЙ: Почему он у меня не удаляет?
Последний вопрос: Кто-нибудь подскажет, может быть это дел-ся по другому?
Чтобы удалить все связанные записи, из подчиненной таблицы, когда удаляю запись из главной таблицы. Если считать, что эти поля не ключевые.
Неужели отлич-ся Query-запрос в Билдере от SQL-запроса в Query Analyzer?
Заранее спасибо.
Как вариант - воспользуйся триггером БД. К стати, какая у тебя СУБД?
Это же не имеет смысла, какая у меня база. Пока на Access-е, а так будет в SQL-е. Я все равно обра-юсь к базе через DSN-ку. Чтобы использовать триггеры, я же говорил что у меня эти поля не ключевые. И к тому же я хочу работать через SQL-запрос. Неужели Query в Билдере отлич-ся от SQL в Query Analyzer? Если не трудно можете выставить код программы, с запросами или отправить мне по почте [email]asirim@mail.ru[/email]?
DELETE Li
FROM
list_inform1 Li, Medicines M
Where
(Li.Medicines=M.ID_medicines)and(M.Category=:Category)
Стоп! Неверна сама конструкция (во всяком случае для Oracle). Попробуй написать так:
DELETE
FROM
list_inform1 Li
Where
Li.Medicines IN
(SELECT M.ID_medicines FROM Medicines M WHERE(M.Category=:Category))
Стоп! Неверна сама конструкция (во всяком случае для Oracle). Попробуй написать так:
DELETE
FROM
list_inform1 Li
Where
Li.Medicines IN
(SELECT M.ID_medicines FROM Medicines M WHERE(M.Category=:Category))
Привет Mark!
Точно, у меня кострукция была неправильна. Теперь все нормально удаляет. Спасибо тебе, а то вроде бы так просто, но застрял на ровном месте. Так, что.....? выходит в Билдере не все SQL-запросы проходят??? :???:
Ммм, да-а...
Привет Mark!
Точно, у меня кострукция была неправильна. Теперь все нормально удаляет. Спасибо тебе, а то вроде бы так просто, но застрял на ровном месте. Так, что.....? выходит в Билдере не все SQL-запросы проходят??? :???:
Ммм, да-а...
Ну Билдеру вообще параллельно sql-предложение ты передаешь на сервер БД или слова матерные... Дело видимо в конкретной реализации SQL на конкретной СУБД. А Query Analyzer - это чей продукт?
Ну Билдеру вообще параллельно sql-предложение ты передаешь на сервер БД или слова матерные... Дело видимо в конкретной реализации SQL на конкретной СУБД. А Query Analyzer - это чей продукт?
Query Analyzer - это обыкновенный запросник Microsoft SQL Server-а. (стандартный)