Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) База DBF и команда DELETE (число прочтений - 7798 )
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
База DBF и команда DELETE
11. Марта 2012 :: 05:22
Печать  
Снова здравствуйте. Появилась еще одна проблема: в файловой БД нужно удалить некоторые записи из 1SConst, отобрав их по условию. Для этого выполняется запрос следующего вида:

DELETE
|      1SConst
|FROM
|      1SConst As История
|INNER JOIN
|      $Справочник.Цены As СпрЦены
|ON
|      СпрЦены.ID = История.OBJID
|INNER JOIN
|      $Справочник.Номенклатура As СпрНом
|ON
|      СпрНом.ID = СпрЦены.Parentext
|INNER JOIN
|      (SELECT
|            История1.OBJID As Объект,
|            MAX(История1.Date) As МаксДата
|       FROM
|            1SConst As История1
|       WHERE
|            История1.Date <= DATE(2012,12,31)
|            AND История1.ID = :РеквЦена
|       GROUP BY
|            История1.OBJID) As SubQuery
|ON
|      SubQuery.Объект = История.OBJID
|WHERE
|      История.Date <= DATE(2012,12,31)
|      AND История.ID = :РеквЦена
|      AND История.Date <> SubQuery.МаксДата

Когда этот запрос скармливаешь методу Выполнить(), то он возвращает 0. В чем м.б. проблема? Касательно параметров, передаваемых в запрос замечу, что при простой выборке записей из 1SConst с теми же условиями отбора данные удаётся получить.

Или может быть, я не в теме, и в файловой БД DELETE не работает вообще? Ужас
  
Наверх
 
IP записан
 
vinogradoff
Full Member
***
Отсутствует



Сообщений: 107
Зарегистрирован: 06. Февраля 2010
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #1 - 11. Марта 2012 :: 05:32
Печать  
Замени для начала delete на select и посмотри, что выбирает.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #2 - 11. Марта 2012 :: 05:33
Печать  
Я же говорю: выборка происходит в этом случае НОРМАЛЬНО.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #3 - 11. Марта 2012 :: 05:45
Печать  
Гонишь ты. Откуда джойн в синтаксисе удаления?
Если надо удалить по условию, которое можно получить только исвратными джойнами, то делай два звпроса:
  • Сначала получаешь идентификаторы удаляемых элементов, ложишь в список, затем во временную таблицу (УложитьСписокОбъектов).
  • Удаляешь простым условием вхождения в список.

P.S.: Вообще-то удалением ты можешь слишком многое испортить, т.к. данные могут быть задействованы где-то еще, например, в таблице ссылок.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #4 - 11. Марта 2012 :: 05:51
Печать  
Dmitry The Wing писал(а) 11. Марта 2012 :: 05:45:
Гонишь ты. Откуда джойн в синтаксисе удаления?


Втыкай: http://www.script-coding.com/Direct_queries.html#10.

Кстати, в SQL-базе удаление производится без проблем, работает и не жужжит.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #5 - 11. Марта 2012 :: 06:03
Печать  
DCKiller писал(а) 11. Марта 2012 :: 05:51:
Dmitry The Wing писал(а) 11. Марта 2012 :: 05:45:
Гонишь ты. Откуда джойн в синтаксисе удаления?
Втыкай: http://www.script-coding.com/Direct_queries.html#10.

Кстати, в SQL-базе удаление производится без проблем, работает и не жужжит.
И какое отношение к DBF имеет синтаксис языка MSSQL?
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #6 - 11. Марта 2012 :: 06:17
Печать  
Значит, не работает? ых...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #7 - 12. Марта 2012 :: 04:54
Печать  
Dmitry The Wing писал(а) 11. Марта 2012 :: 05:45:
Если надо удалить по условию, которое можно получить только исвратными джойнами, то делай два звпроса:
  • Сначала получаешь идентификаторы удаляемых элементов, ложишь в список, затем во временную таблицу (УложитьСписокОбъектов).
  • Удаляешь простым условием вхождения в список.


Чёт не пашет. При 'Запрос.ВыполнитьИнструкцию(ТекстЗапроса)' ругается 'Operator/operand type mismatch'  Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #8 - 12. Марта 2012 :: 06:18
Печать  
Можно и без временной таблицы обойтись, просто в ветку where при delete написать все условия удаления, в том числе и вложенные запросы.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #9 - 12. Марта 2012 :: 06:41
Печать  
DCKiller писал(а) 12. Марта 2012 :: 04:54:
ругается 'Operator/operand type mismatch'  Печаль
Значит в запросе ошибка.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #10 - 12. Марта 2012 :: 06:44
Печать  
Dmitry The Wing писал(а) 12. Марта 2012 :: 06:41:
DCKiller писал(а) 12. Марта 2012 :: 04:54:
ругается 'Operator/operand type mismatch'  Печаль
Значит в запросе ошибка.


Хы-хы... А то я как-то, знаете, не догадывался  Смех
Вот еще бы отловить ее...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #11 - 12. Марта 2012 :: 06:45
Печать  
Eprst писал(а) 12. Марта 2012 :: 06:18:
Можно и без временной таблицы обойтись, просто в ветку where при delete написать все условия удаления, в том числе и вложенные запросы.


Ага? Было бы неплохо... Но тогда почему сабжевый пример не выполняется?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #12 - 12. Марта 2012 :: 06:48
Печать  
DCKiller писал(а) 12. Марта 2012 :: 06:44:
Хы-хы... А то я как-то, знаете, не догадывался  Смех
Вот еще бы отловить ее...
Лично я не против - отлавливай.

DCKiller писал(а) 12. Марта 2012 :: 06:45:
Eprst писал(а) 12. Марта 2012 :: 06:18:
Можно и без временной таблицы обойтись, просто в ветку where при delete написать все условия удаления, в том числе и вложенные запросы.
Ага? Было бы неплохо... Но тогда почему сабжевый пример не выполняется?
Потому что фокспро этому не обучено...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #13 - 12. Марта 2012 :: 06:54
Печать  
Цитата:
Потому что фокспро этому не обучено...


А удалять записи, которые отобраны в запросе при помощи 'просто в ветку where при delete написать все условия удаления', - обучено?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #14 - 12. Марта 2012 :: 07:00
Печать  
DCKiller писал(а) 12. Марта 2012 :: 06:54:
Цитата:
Потому что фокспро этому не обучено...
А удалять записи, которые отобраны в запросе при помощи 'просто в ветку where при delete написать все условия удаления', - обучено?
Для особо одаренных повторяю:
фокспро не знакомо с синтаксисом "DELETE FROM ... JOIN ...",
однако оно вполне умеет следющее: "DELETE FROM ... WHERE ...", а в условии можешь совать что угодно.
Именно об этом писал Eprst.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать