Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибка при выполнении прямого запроса (число прочтений - 5385 )
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Ошибка при выполнении прямого запроса
18. Января 2011 :: 12:35
Печать  
Хочу с помощью прямого запроса удалить все значения цены кроме последнего пишу следующий запрос:
|delete
from
               1sconst as Const
where
     Const.Objid = :СпрЦены and Const.id = :Реквизит
     and Const.Date <
     (Select
           MAX(tabConst.Date)
     from
           1sconst as tabConst
     where tabConst.Objid = :СпрЦены and tabConst.id = :Реквизит and tabConst.Date < :КонДата)

при выполнении запроса выдает ошибку:
Команда.Выполнить(ТекстЗапроса);
{C:\DOCUMENTS AND SETTINGS\АДМИНИСТРАТОР\РАБОЧИЙ СТОЛ\123.ERT(50)}: FAILED! ICommandText::Execute(): Syntax error.

подскажите пожайлуста в чем может быть проблема.
P.S. База формата DBF/
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка при выполнении прямого запроса
Ответ #1 - 18. Января 2011 :: 13:12
Печать  
функции есть только при group by
« Последняя редакция: 19. Января 2011 :: 08:04 - Eprst »  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Ошибка при выполнении прямого запроса
Ответ #2 - 18. Января 2011 :: 13:17
Печать  
Это по поводу функции MAX() ???
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка при выполнении прямого запроса
Ответ #3 - 18. Января 2011 :: 13:23
Печать  
да.
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Ошибка при выполнении прямого запроса
Ответ #4 - 18. Января 2011 :: 13:35
Печать  
Туплю...
Если я не ошибаюсь во вложенном запросе и не сгруппировать...
Как же тогда обойтись без функции ...  Нерешительный
возможна ли группировка по LINENO ???
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка при выполнении прямого запроса
Ответ #5 - 18. Января 2011 :: 13:38
Печать  
а ты бери top 1 + order by desc
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Ошибка при выполнении прямого запроса
Ответ #6 - 18. Января 2011 :: 13:48
Печать  
"
                 |delete
                 |from
                 |      1sconst as Const
                 |where
                 |      Const.Objid = :СпрЦена and Const.id = :Реквизит and Const.Date <
                 |      (Select top 1
                 |            tabConst.Date
                 |      from
                 |            1sconst as tabConst
                 |      where tabConst.Objid = :СпрЦена and tabConst.id = :Реквизит and tabConst.Date < ctod(:КонДата)
                 |      group by tabConst.Date desc)"

тоже не работает!
вот засада.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка при выполнении прямого запроса
Ответ #7 - 18. Января 2011 :: 13:58
Печать  
Че-то заморочил я тебе голову своей ср@ной энергией..
Вот так делай :

Код
Выбрать все
delete
from
	 1sconst
where
     Objid = :СпрЦены and id = :Реквизит
     and Date <
     (Select
	     MAX(Date)
     from
	     1sconst
     where Objid = :СпрЦены and id = :Реквизит and Date < :КонДата) 


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


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Ошибка при выполнении прямого запроса
Ответ #8 - 18. Января 2011 :: 14:16
Печать  
ошибок в запросе нет спасибо...
но вот еще одна беда...

Команда.Выполнить(ТекстЗапроса);
{C:\DOCUMENTS AND SETTINGS\АДМИНИСТРАТОР\РАБОЧИЙ СТОЛ\123.ERT(50)}: FAILED! ICommandText::Execute(): Operator/operand type mismatch.
может это.
к("Цены").реквизит("Цена")));
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка при выполнении прямого запроса
Ответ #9 - 18. Января 2011 :: 14:24
Печать  
у тебя там явно запятой нету..
Ты текст в отладке покажи.
Команда.УстановитьТекстовыйПараметр("Реквизит",МД.И
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Ошибка при выполнении прямого запроса
Ответ #10 - 18. Января 2011 :: 15:32
Печать  
да там действительно запятая.
Только проблема как я понимаю в передаваемых параметрах.
так как он ругается на неверный тип
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Ошибка при выполнении прямого запроса
Ответ #11 - 18. Января 2011 :: 18:13
Печать  
Спасибо всем! проблему решил.
Вот правильный текст запроса.
"
                 |delete
                 |from
                 |       1sconst
                 |where
                 |     Objid = :СпрЦены and id = $ИсторияРеквизита.Цены.Цена
                 |    and Date <
                 |   (Select
                 |     MAX(Date)
                 |from
                 |   1sconst
                 |where Objid = :СпрЦены and id = $ИсторияРеквизита.Цены.Цена and Date < ctod(:КонДата))"

ид реквизита нужно получать через $ИсторияРеквизита.Цены.Цена
такая конструкция не работает
МД.ИДРеквизитаСправочника("Цены","Цена"); (МД - объект типа MetaDataWork)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка при выполнении прямого запроса
Ответ #12 - 19. Января 2011 :: 06:21
Печать  
Код
Выбрать все
	id = Прав(_idtostr(МД.ИДРеквизитаСправочника("Цены","Цена")),4);
	ТекстЗапроса = "
	   |delete
	   |--select *
	   |from
	   |     1sconst
	   |where
	   |  Objid = :СпрЦены and id = '"+id+"'
	   |    and Date <
	   |       (select
	   |	  	 max(Date)
	   |         from 1sconst
	   |         where Objid = :СпрЦены and
	   |         id = '"+id+"' and Date < :КонДата~~
	   |	     )";
    Запрос.УстановитьТекстовыйПараметр("КонДата",КонДата);
    Запрос.УстановитьТекстовыйПараметр("СпрЦены ",Спр.ТекущийЭлемент());
    Запрос.Отладка(1);
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса); 


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


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Ошибка при выполнении прямого запроса
Ответ #13 - 19. Января 2011 :: 07:44
Печать  
ммм...
Так тоже работает.
Столькнулся с проблемой следующего характера.
Вообще через прямой запрос решил делать потому, что объект периодический работает медленно 4 часа удаляет .
Написав запрос и запустив обработку обнаружил что через запрос медленне 12 часов уже молотит и конца нет. Может как то по другому можно сделать Номенклатуры 25000 цен по 5 на каждую номенклатуру. Печаль
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка при выполнении прямого запроса
Ответ #14 - 19. Января 2011 :: 07:53
Печать  
Можно попробовать написать условие по индексу IDD
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать