Имя: Пароль:
1C
1С v8
запрос sql возвращает ошибку
,
0 Сотрудница
 
02.03.16
14:53
есть пара функций, откуда вызываются запросы, соответственно запросов тоже два.
один попроще, отрабатывает нормально
на втором выходит ошибка:
Ошибка при получении значения атрибута контекста (EOF)
        Если RecordSet.EOF И RecordSet.BOF Тогда
по причине:
Произошла исключительная ситуация (ADODB.Recordset): Operation is not allowed when the object is closed.

функции с запросами отличаются только собственно текстами запросов.
второй запрос на sql ms отработал тоже верно, но в 1с идет ошибка
в чем может быть дело?
вот тест второго запроса

SELECT distinct
    n_rtcustomer
into #points
FROM rtcustomers  
WHERE n_kc = 0
        and n_canal = '2'
        and n_region = '1063'
        AND n_rtcustomerDS = '120328'
        and n_zone = 0
        and n_categ in ('5','6')
        and n_mmode in ('1')
CREATE unique clustered  index MyIndex1 on #points(n_rtcustomer)

SELECT distinct
    Sale.n_rtcustomer
FROM
    Sale
    inner join #points as t2
    on Sale.n_rtcustomer = t2.n_rtcustomer
WHERE
    SaleMarker = '1'
    AND date < '20160201'
    AND date >= '20150801'
    AND n_region = '1063'AND n_rtcustomerDS = '120328'
                                
drop table #points
1 f_vadim
 
02.03.16
14:57
а drop table разве возвращает какой-то recordset?
или я чего-то не понимаю?
2 Сотрудница
 
02.03.16
15:03
он таблицу временную удаляет, без этого на sql ms идет ошибка, что такая таблица уже существует
3 f_vadim
 
02.03.16
15:07
видимо придётся сделать усилие и вынести drop table в третий запрос
4 rsv
 
02.03.16
15:07
(0) Да оберните все в хранимку  и дерните ее.
5 rsv
 
02.03.16
15:09
В хранимке drop table #points можно  не писать т.к. они  удаляются сами  .
6 f_vadim
 
02.03.16
15:12
а можно ещё сделать соответствие соответствий по общим полям и запихать в них структуру с дополнительными полями.
это просто мысль, как альтернатива - производительность и потребление ресурсов нужно проверять.
7 f_vadim
 
02.03.16
15:12
(6) не в ту ветку :(
8 rsv
 
02.03.16
15:14
и всего одна строка вызова Exec МояХранимка .  Просто и коротко.
9 Сотрудница
 
09.03.16
12:45
(3)
убрала "drop table #points" из запроса
выходит та же ошибка
10 HardBall
 
09.03.16
13:45
(9) Нет записей?
11 Сотрудница
 
09.03.16
13:46
(10) копирую текст запроса, выполняю его в sql - записи есть
12 Ёпрст
 
09.03.16
13:50
по адо хочешь пакетник выполнить ?
13 Ёпрст
 
09.03.16
13:51
выкини дроп и первый запрос помести просто в подзапрос во втором селекте(заместо создания временной таблички)
14 Ёпрст
 
09.03.16
13:51
усё
15 Сотрудница
 
09.03.16
13:55
(12,13,14)
угу, хотела
не работает такое, да?
сначала так и сделала, но в sql посмотрела, что с подзапросом намного дольше выполняется
хотела оптимизировать
16 Ёпрст
 
09.03.16
13:56
(15) неа
17 olegves
 
09.03.16
13:57
(15) между запросами знак ; проставь или операторы используй Begin...End
18 olegves
 
09.03.16
13:59
+(17) а дроп выполняй уже после обработки результата запроса
19 Сотрудница
 
09.03.16
14:09
(17, 18) ";" уже пробовала, не помогло
дроп убрала вообще, почему-то не ругается на существующую таблицу, может она между запросами уничтожается...
20 Записьдампа
 
09.03.16
14:14
(0) Верни запрос в исходное сосотяние и напиши в начале SET NOCOUNT ON
Специалистов развелось...
21 Сотрудница
 
09.03.16
14:16
(20) в исходное - это в какое? как в (0)?
22 Записьдампа
 
09.03.16
14:18
(21) да, вместе с дропом времянки и т.п.
23 Сотрудница
 
09.03.16
14:20
(22) оо, спасибо большое!! все получилось
24 Записьдампа
 
09.03.16
14:21
Вообще времянку здесь лучше дропать с проверкой, как-то типа
if not object_id('tempdb..points') is null drop table #points

Тогда при развале логики неожиданностей не будет