|
ADODB.Command пытаюсь выполнить запрос UNION +? + 2*FROM, но получаю ошибку | ☑ | ||
---|---|---|---|---|
0
TormozIT
гуру
23.10.14
✎
12:17
|
select 1 f
FROM (select 1 f) t union SELECT 1 f FROM (select 1 f) t WHERE ? <= 2 Сразу после установки этого текста в объект Command обращаюсь к его свойству Parameters.Count и получаю исключение (-2147467259 неверный синтаксис около конструкции ".2") Если же я делаю тоже самое с запросом SELECT 1 f FROM (select 1 f) t WHERE ? <= 2 или select 1 f union SELECT 1 f FROM (select 1 f) t WHERE ? <= 2 или select 1 f union SELECT 1 f FROM (select 1 f) t WHERE 1 <= 2 то исключения не возникает. Акцентирую еще раз, что речь идет даже не о выполнении запроса, а о конкретно вычислении свойства Parameters.Count сразу после установки текста запроса. Т.е. код примерно такой ОбъектЗапрос = Новый COMОбъект("ADODB.Command"); ОбъектЗапрос.ActiveConnection = СоединениеADO; ОбъектЗапрос.CommandText = Текст; Пустышка = ОбъектЗапрос.Parameters.Count; Варианты явно встраивать в текст константу и выполнять запрос по частям понятны, но интересует именно озвученная проблема. Возможно тут какой то баг в драйвере? Или я просто чего то не знаю? Научите пожалуйста =) Пробовал 2 провайдера 1. Provider=SQLOLEDB; 2. Provider=SQLNCLI10; Поведение одинаковое и описание ошибки тоже. |
|||
1
Dmitry1c
23.10.14
✎
12:22
|
>select 1 f
что за f? |
|||
2
TormozIT
гуру
23.10.14
✎
12:25
|
Забыл сразу указать, что речь про выполнение запроса в MSSQL из 1С.
(1) f и t - псевдонимы поля и таблицы. |
|||
3
dk
23.10.14
✎
12:36
|
тоже недавно не смог победить UNION и параметрированный запрос
хотя мне условие нужно было добавить в обе ветки uniona |
|||
4
Mordor_1C
23.10.14
✎
12:47
|
(0) Чтобы получить количество параметров их сначала надо добавить. )
|
|||
5
Ёпрст
23.10.14
✎
12:48
|
мот алиясы разные попробовать в юнионе ?
|
|||
6
TormozIT
гуру
23.10.14
✎
12:52
|
(4) Это не объясняет РАЗНИЦУ в поведении описанных вариантов запроса.
|
|||
7
TormozIT
гуру
23.10.14
✎
12:53
|
(5) пробовал без алиасов. Поведение не меняется.
|
|||
8
Ёпрст
23.10.14
✎
12:54
|
всякие сетнокоунт он/офф не могут влиять ?
|
|||
9
Mordor_1C
23.10.14
✎
12:56
|
(7) Объясняет причину, по которой появляется " (-2147467259 неверный синтаксис около конструкции ".2") "
|
|||
10
Mordor_1C
23.10.14
✎
12:58
|
(7) И что показывает Parameters.Count для запроса?
select 1 f union SELECT 1 f FROM (select 1 f) t WHERE 1 <= 2 |
|||
11
TormozIT
гуру
23.10.14
✎
13:00
|
(10) 0 показывает для всех успешных вариантов
|
|||
12
Mordor_1C
23.10.14
✎
13:05
|
(11) И запрос.
select 1 f FROM (select 1 f) t union SELECT 1 f FROM (select 1 f) t WHERE ? <= 2 выполняется если убрать Parameters.Count? |
|||
13
Дык ё
23.10.14
✎
13:08
|
(0) с провайдером MSDASQL работает
автоопределение критично? попробуй руками добавить: ОбъектЗапрос = Новый COMОбъект("ADODB.Command"); ОбъектЗапрос.ActiveConnection = СоединениеADO; ОбъектЗапрос.NamedParameters = true; ОбъектЗапрос.Prepared = true; Параметр = ОбъектЗапрос.CreateParameter("@ID", ТипыADO.adInteger, НаправленияПараметров.adParamInput,, ); ОбъектЗапрос.Parameters.Append(Параметр); ОбъектЗапрос.CommandText = Текст; |
|||
14
TormozIT
гуру
23.10.14
✎
13:32
|
(12) Нет. Парсинг текста внутри объекта Command похоже выполняется при первом обращении к одному из свойств, в список которых входит Parameters. Поэтому его я указал для отсечения дополнительных возможных причин проблемы.
|
|||
15
TormozIT
гуру
23.10.14
✎
13:36
|
(13) Автоопределение не нужно. Параметр добавляю как раз через CreateParameter.
С MSDASQL не пробовал. Спасибо, поразбираюсь с ним. |
|||
16
Mordor_1C
23.10.14
✎
14:47
|
(15) А если хранимую процедуру создать в MSSQL и вместо запроса на объединение ее вызывать?
|
|||
17
TormozIT
гуру
23.10.14
✎
15:32
|
(16) У меня может не быть прав на создание хранимых процедур. Нужно именно запросом.
|
|||
18
Torquader
23.10.14
✎
19:10
|
При присваивании Command система должна выполнить Prepare и установить число параметров.
Parameters.Count в этом случае должно быть доступно только на чтение. Самый главный вопрос - он умеет вообще объединять вложенные запросы ? |
|||
19
TormozIT
гуру
23.10.14
✎
22:47
|
(18) Если заменить вложенные запросы именами таблиц, то ситуация не меняется.
|
|||
20
Fragster
гуру
23.10.14
✎
22:50
|
кто-нибудь победил глюки с асинхронным выполнением, когда параметры одного выражения влияли на другое? я чуть не поседел, отлаживая... пришлось отказаться от асинхронности, что привело к увеличению времени обработки в 3 раза :(
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |