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


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Ошибка ICASE
08. Июня 2012 :: 05:59
Печать  
Добрый день. Делается запрос в DBF-ной базе с уложением списка объектов в ВТ:

SELECT
      ICASE($ПродажиОбороты.Номенклатура IN (SELECT val FROM 71bce150-59f7-4aaf-8271-f4738af59ee5), :ГруппаТовара1, $ПустойИД) As [ГруппаТовара $Справочник.Номенклатура]
FROM
     $Регистр.Продажи As ПродажиОбороты

При выполнении ругается:

FAILED! ICommandText::Execute(): Missing comma (,)

В чем проблема? Заранее благодарю.
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Ошибка ICASE
Ответ #1 - 08. Июня 2012 :: 06:05
Печать  
А что это за оператор "ICASE" ?  Я такого не знаю. Может просто "CASE" ?
И вообще, не понимаю описаный запрос. Приведи весь текст, и что ты укладываешь тоже напиши.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: Ошибка ICASE
Ответ #2 - 08. Июня 2012 :: 06:06
Печать  
ICASE, оно же IIF. Так понятнее? CASE на файловых БД не пашет.
http://msdn.microsoft.com/ru-ru/library/ms145994(v=sql.90).aspx
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Ошибка ICASE
Ответ #3 - 08. Июня 2012 :: 06:09
Печать  
А что ты используешь, SQLite?
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: Ошибка ICASE
Ответ #4 - 08. Июня 2012 :: 06:09
Печать  
1CPP
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка ICASE
Ответ #5 - 08. Июня 2012 :: 06:14
Печать  
без подзапроса в икейсе работает хоть ?
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: Ошибка ICASE
Ответ #6 - 08. Июня 2012 :: 06:16
Печать  
zk96 писал(а) 08. Июня 2012 :: 06:05:
А что это за оператор "ICASE" ?  Я такого не знаю. Может просто "CASE" ?
И вообще, не понимаю описаный запрос. Приведи весь текст, и что ты укладываешь тоже напиши.


Запрос в приведенном виде предназначен исключительно пока что для проверки того, как добиться того, чтобы описанная в нем команда работала. Т.е. нужно проверить  значение "Номенклатура" таблицы регистра "продажи" на предмет вхождения в ВТ, которая укладывается из группы номенклатуры. Соотв., далее, если входит, - возвращаем значение параметра "ГруппаТовара1" (параметр тоже устанавливается), иначе - пустое значение. Объекты укладываются перед отдачей запроса на выполнение так:

Запрос.УложитьСписокОбъектов(ГруппаНом, Фильтр, "Номенклатура");

// ГруппаНом - переменная, содержащая значение группы номенклатуры, Фильтр - пустая переменная, "Номенклатура" - вид типизирующего справочника.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: Ошибка ICASE
Ответ #7 - 08. Июня 2012 :: 06:16
Печать  
Eprst писал(а) 08. Июня 2012 :: 06:14:
без подзапроса в икейсе работает хоть ?


Да. Скажем, если задать просто '=', то запрос выполняется без ошибок.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка ICASE
Ответ #8 - 08. Июня 2012 :: 06:21
Печать  
А ёпт, посмотрел внимательнее, ну всё верно фокс делает - in же не возвращает true или false , вот твой icase и не работает.

Там нужно логическое выражение которое явно вернет true или false (равенство/больше меньше...или exists, например)

Втыкай туда проверку на exists - заработает
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка ICASE
Ответ #9 - 08. Июня 2012 :: 06:54
Печать  
так вот проверь:

Код
Выбрать все
iif(empty((select top 1  val from :ВыбСписок where val = $ПродажиОбороты.Номенклатур order by val)),:ГруппаТовара1, $ПустойИД) As [ГруппаТовара $Справочник.Номенклатура] 

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


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: Ошибка ICASE
Ответ #10 - 08. Июня 2012 :: 07:02
Печать  
Чё-та не алё  Печаль

Пробовал вот так:
"ICASE(EXISTS(SELECT val FROM 7d9642f7-25ea-4e01-8ea7-1d02e7cfd9f6 WHERE val = $ПродажиОбороты.Номенклатура), :ГруппаТовара1, $ПустойИД) As [ГруппаТовара $Справочник.Номенклатура]"

Ругается, говорит - CommandText::Execute(): Expression evaluator failed.

ЧЯДНТ? Как надо правильно формулу описать?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка ICASE
Ответ #11 - 08. Июня 2012 :: 07:07
Печать  
Надеюсь, запрос через oledb, а не через odbc делаешь ?

Как я написал , проверил ? кинь текст запроса, я проверил - у меня работает с empty, с exists че-то не алё.
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: Ошибка ICASE
Ответ #12 - 08. Июня 2012 :: 07:13
Печать  
Eprst писал(а) 08. Июня 2012 :: 07:07:
Надеюсь, запрос через oledb, а не через odbc делаешь ?

Как я написал , проверил ? кинь текст запроса, я проверил - у меня работает с empty, с exists че-то не алё.


Да, через OLEDB. Но почему-то после того, как запрос принял вот такой вид:

SELECT
      IIF(EMPTY(SELECT TOP 1 val FROM :ВыбСписок1 WHERE val = $ПродажиОбороты.Номенклатура ORDER BY val), $ПустойИД, :ГруппаТовара1) As [ГруппаТовара $Справочник.Номенклатура],
     $ПродажиОбороты.Номенклатура As [Номенклатура $Справочник.Номенклатура]
FROM
     $Регистр.Продажи As ПродажиОбороты

говорит "Function name is missing"  Ужас
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка ICASE
Ответ #13 - 08. Июня 2012 :: 07:24
Печать  
Внимательнее, внимательнее
EMPTY(( select .......))

select должен быть в скобки обут унутри empty()
  
Наверх
 
IP записан
 
DCKiller
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 70
Зарегистрирован: 12. Декабря 2011
Re: Ошибка ICASE
Ответ #14 - 08. Июня 2012 :: 07:29
Печать  
Eprst писал(а) 08. Июня 2012 :: 07:24:
Внимательнее, внимательнее
EMPTY(( select .......))

select должен быть в скобки обут унутри empty()


Ясно. А как быть с параметром :ВыбСписок? Какое значение ему установить? А то если объявить SELECT из ВТ, то он говорит, что такие запросы не поддерживаются.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать