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


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #15 - 12. Марта 2012 :: 07:39
Печать  
Кстати, в чем тогда будет отличие между этой конструкцией и использованием ВТ вместо подзапросов? Ошибка-то 'Operator/operand type mismatch' продолжает выпадать. Хотя я его уже практически носом ткнул, где что смотреть на предмет вхождения  Злой
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #16 - 12. Марта 2012 :: 08:42
Печать  
Текст запроса то покажи свой

А так, неплохо бы и про  синтаксис Delete прочитать:
http://msdn.microsoft.com/ru-ru/library/ms189835.aspx

ну нет там джоинов в тексте запроса - только ветка с условием удаления
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #17 - 12. Марта 2012 :: 09:26
Печать  
Ну вот, собственно...

DELETE
     1SConst
FROM
     1SConst As История
WHERE
     История.objid IN (SELECT val FROM e07e6994-4929-4a57-9f24-43586a7ace76) AND
     История.id IN (SELECT val FROM 73539260-a8bd-4bf8-82a2-334fb3909430) AND
     История.date IN (SELECT val FROM b4011ce9-80cb-48ff-a9d1-f2506cdfaf98) AND
     История.partno IN (SELECT val FROM 4fb99197-7817-43f7-8bac-b116309518ec) AND
     История.value IN (SELECT val FROM f00c83e9-fe3d-4c48-aff9-7ab9edcea620) AND
     История.docid IN (SELECT val FROM 1a2590e1-f790-4e75-8a6f-144f9f49a11b) AND
     История.time IN (SELECT val FROM 474a6c89-a563-4a57-ad88-ee9e0888ae11)

Сначала собираем данные в ТЗ посредством запроса в топикстарте. Затем по очереди выгружаем из его колонок в списки значений данные для фильтров. И потом, при помощи УложитьСПисокОбъектов() передаем их в запрос DELETE
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: База DBF и команда DELETE
Ответ #18 - 12. Марта 2012 :: 09:31
Печать  
DELETE FROM ...
  
Наверх
wwwICQ  
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #19 - 12. Марта 2012 :: 09:51
Печать  
Anatol писал(а) 12. Марта 2012 :: 09:31:
DELETE FROM ...


Теперь говорит 'Synthax error'
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #20 - 12. Марта 2012 :: 11:09
Печать  
Код
Выбрать все
DELETE
FROM
	1SConst
WHERE
	objid IN (SELECT val FROM e07e6994-4929-4a57-9f24-43586a7ace76) AND
     id IN (SELECT val FROM 73539260-a8bd-4bf8-82a2-334fb3909430) AND
     date IN (SELECT val FROM b4011ce9-80cb-48ff-a9d1-f2506cdfaf98) AND
     partno IN (SELECT val FROM 4fb99197-7817-43f7-8bac-b116309518ec) AND
     value IN (SELECT val FROM f00c83e9-fe3d-4c48-aff9-7ab9edcea620) AND
     docid IN (SELECT val FROM 1a2590e1-f790-4e75-8a6f-144f9f49a11b) AND
     time IN (SELECT val FROM 474a6c89-a563-4a57-ad88-ee9e0888ae11) 

  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #21 - 13. Марта 2012 :: 01:30
Печать  
М-да... 'SQL expression is too complex'

Интересно, какие еще ошибки бывают?  Улыбка
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #22 - 13. Марта 2012 :: 05:21
Печать  
Никто не скажет, как лечится?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #23 - 13. Марта 2012 :: 05:41
Печать  
DCKiller писал(а) 13. Марта 2012 :: 05:21:
Никто не скажет, как лечится?
Упрощением.
Хотя невооруженным взглядом видно, что в запросе полная чушь:
поля date, partno, value и time глупо совать в списки.
Дата и время либо должны быть точными, либо диапазонами.
Номер части вообще групо фильтровать: если значение удаляется, то полностью, а не частями.
По значениям фильтровать тоже нелогично...
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #24 - 13. Марта 2012 :: 05:45
Печать  
Хорошо, тогда по каким полям следует фильтровать? Получается, только objid и id, а по датам сделать фильтр?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #25 - 13. Марта 2012 :: 05:49
Печать  
Начни с описания задачи.
Как я понял, тебе надо удалить все цены до определенной даты, сохранив при этом последнюю. Верно?
Если так, то проще сделать в 2 действия:
  • Сформировать цену на точку обрезки (чтобы не вычислять дату).
  • Удалить все до этой точки.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: База DBF и команда DELETE
Ответ #26 - 13. Марта 2012 :: 05:51
Печать  
Dmitry The Wing писал(а) 13. Марта 2012 :: 05:49:
Как я понял, тебе надо удалить все цены до определенной даты, сохранив при этом последнюю. Верно?


Да, нужно удалить все цены из истории до заданной даты, и оставить все, что было начиная с нее и позднее.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #27 - 13. Марта 2012 :: 06:05
Печать  
Ну если тупо, то так:
Код
Выбрать все
delete
from 1sconst
where date<:Парам1~~
and
(
id = $ИсторияРеквизита.Цены.Цена
or id = $ИсторияРеквизита.Цены.Единица
) 



а по уму нужно разбивать по типам цен и оставлять последнюю цену из периода [  ,Парам1~~]
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: База DBF и команда DELETE
Ответ #28 - 13. Марта 2012 :: 06:06
Печать  
Правда, для удобства лучше добавить еще одно действие: Получание списка существующих элементов с историей:
Код
Выбрать все
SELECT objid [Элемент :Справочник.Цены]
FROM __1S_Const
WHERE id = :ИсторияРеквизита.Цены.Цена AND date < :ДатаСвертки
GROUP BY objid 

Примечание: В запросе использован 1sqlite, но переделать нетрудно.

Теперь получение последнего значения для каждой строки результата предыдущего запроса:
Код
Выбрать все
SELECT value [Значение :Число]
FROM __1S_Const
WHERE objid = @Элемент AND id = :ИсторияРеквизита.Цены.Цена AND date < @ДатаСвертки
ORDER BY date DESC LIMIT 1 

Здесь Элемент - это значение из первого запроса.
Далее выполняешь обычное Элемент.Цена.Установить(ДатаСвертки, Значение);

А само удаление получится проще н придумаешь:
DELETE FROM 1SConst WHERE id = $ИсторияРеквизита.Цены.Цена AND date < :ДатаСвертки
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: База DBF и команда DELETE
Ответ #29 - 13. Марта 2012 :: 06:06
Печать  
DCKiller писал(а) 13. Марта 2012 :: 05:21:
Никто не скажет, как лечится?


Запррос монопольно делаешь ?

Что в списках ?

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

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать