![]() |
![]() |
![]() |
|
Ошибка ADODB.Recordset при выполнении SQL запроса | ☑ | ||
---|---|---|---|---|
0
bvb
01.10.14
✎
18:01
|
Выполняю запрос по сторонней SQL базе
eXsocet = Новый COMОбъект ("ADODB.Connection"); eXrowset = Новый COMОбъект("ADODB.Recordset"); eXsocet.Open(ConnectionString(Server,NameDatabase,UserID,Password)); eXrowset.ActiveConnection = eXsocet; eXrowset.Open(СокрЛП(SqlQuery)); КолСтрок=eXrowset.Recordcount(); --------------------------------------- Ошибка : {ОбщийМодуль.SQL.Модуль(34)}: Ошибка при вызове метода контекста (RecordCount) КолСтрок=eXrowset.Recordcount(); по причине: Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт. ----------------------------------------- Другие запросы выполняются нормально. А этот нет. В Managment Studio он исполняется нормально Я грешу на то что он использует UNION. |
|||
1
Ёпрст
гуру
01.10.14
✎
18:02
|
Содержимое SqlQuery предлагается угадывать ?
|
|||
2
Jaap Vduul
01.10.14
✎
18:16
|
(0)Результат запроса пустой.
Кстати, поскольку тип курсора не указан, то по-умолчанию будет использован forward-only курсор. У которого Recordcount всегда равняется -1. |
|||
3
shuhard
01.10.14
✎
18:18
|
(2) +1
ни типа блокировки, ни курсора |
|||
4
Banned
01.10.14
✎
18:20
|
(2) зависит от драйвера.
(0) давай строку подключения и запрос |
|||
5
bvb
01.10.14
✎
18:28
|
Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=MY_BASE;Data Source=10.10.0.2;User ID=sa;Password=sql;
|
|||
6
bvb
01.10.14
✎
18:29
|
SET DATEFORMAT 'DMY'
DECLARE @DocType varchar(5) DECLARE @DocStatus varchar(5) DECLARE @TAB_09 TABLE(ALC_CODE VARCHAR(30),SUMMA INT) -- Приходы DECLARE @TAB_10 TABLE(ALC_CODE VARCHAR(30),SUMMA INT) -- Расходы DECLARE @TAB_11 TABLE(ALC_CODE VARCHAR(30),SUMMA INT) -- Возвраты от покупателя DECLARE @TAB_12 TABLE(ALC_CODE VARCHAR(30),SUMMA INT) -- Возвраты поставщику DECLARE @TAB_46 TABLE(ALC_CODE VARCHAR(30),SUMMA INT) -- Первичные остатки DECLARE @TAB_59 TABLE(ALC_CODE VARCHAR(30),SUMMA INT) -- Сведения о ввозе (ГТД) --36126 -- SET @DocStatus = '38041' -- Только зафиксированные --Ищем приходные накладные Set @DocType = '36009' INSERT @TAB_09 (ALC_CODE,SUMMA) SELECT T2.REF_ALC_CODE_ID,SUM(T2.[COUNT]) FROM WRH_WAYBILL AS T1 INNER JOIN WRH_WAYBILL_POS AS T2 ON T1.ID = T2.REF_WAYBILL_ID INNER JOIN DOCFLOW_OBJECT AS T3 ON T1.ID = T3.ID WHERE T1.INACTIVE_FLAG = '0' AND T2.INACTIVE_FLAG = '0' AND T3.REF_DATA_ID36 = @DocType AND T3.REF_DATA_ID38 = @DocStatus GROUP BY T2.REF_ALC_CODE_ID --Ищем расходные накладные Set @DocType = '36010' INSERT @TAB_10 (ALC_CODE,SUMMA) SELECT T2.REF_ALC_CODE_ID,SUM(T2.[COUNT]) FROM WRH_WAYBILL AS T1 INNER JOIN WRH_WAYBILL_POS AS T2 ON T1.ID = T2.REF_WAYBILL_ID INNER JOIN DOCFLOW_OBJECT AS T3 ON T1.ID = T3.ID WHERE T1.INACTIVE_FLAG = '0' AND T2.INACTIVE_FLAG = '0' AND T3.REF_DATA_ID36 = @DocType AND T3.REF_DATA_ID38 = @DocStatus GROUP BY T2.REF_ALC_CODE_ID --Ищем возвратные приходные накладные Set @DocType = '36011' INSERT @TAB_11 (ALC_CODE,SUMMA) SELECT T2.REF_ALC_CODE_ID,SUM(T2.[COUNT]) FROM WRH_WAYBILL AS T1 INNER JOIN WRH_WAYBILL_POS AS T2 ON T1.ID = T2.REF_WAYBILL_ID INNER JOIN DOCFLOW_OBJECT AS T3 ON T1.ID = T3.ID WHERE T1.INACTIVE_FLAG = '0' AND T2.INACTIVE_FLAG = '0' AND T3.REF_DATA_ID36 = @DocType AND T3.REF_DATA_ID38 = @DocStatus GROUP BY T2.REF_ALC_CODE_ID --Ищем возвратные расходные накладные Set @DocType = '36012' INSERT @TAB_12 (ALC_CODE,SUMMA) SELECT T2.REF_ALC_CODE_ID,SUM(T2.[COUNT]) FROM WRH_WAYBILL AS T1 INNER JOIN WRH_WAYBILL_POS AS T2 ON T1.ID = T2.REF_WAYBILL_ID INNER JOIN DOCFLOW_OBJECT AS T3 ON T1.ID = T3.ID WHERE T1.INACTIVE_FLAG = '0' AND T2.INACTIVE_FLAG = '0' AND T3.REF_DATA_ID36 = @DocType AND T3.REF_DATA_ID38 = @DocStatus GROUP BY T2.REF_ALC_CODE_ID --Ищем первичные остатки Set @DocType = '36046' INSERT @TAB_46 (ALC_CODE,SUMMA) SELECT T2.REF_ALC_CODE_ID,SUM(T2.[COUNT]) FROM WRH_WAYBILL AS T1 INNER JOIN WRH_WAYBILL_POS AS T2 ON T1.ID = T2.REF_WAYBILL_ID INNER JOIN DOCFLOW_OBJECT AS T3 ON T1.ID = T3.ID WHERE T1.INACTIVE_FLAG = '0' AND T2.INACTIVE_FLAG = '0' AND T3.REF_DATA_ID36 = @DocType AND T3.REF_DATA_ID38 = @DocStatus GROUP BY T2.REF_ALC_CODE_ID --Ищем сведения о ввозе Set @DocType = '36059' INSERT @TAB_59 (ALC_CODE,SUMMA) SELECT T2.REF_ALC_CODE_ID,SUM(T2.QUANTITY) FROM TAB_IMPORT_INFO AS T2 INNER JOIN DOCFLOW_OBJECT AS T3 ON T2.ID = T3.ID WHERE T2.INACTIVE_FLAG = '0' AND T3.REF_DATA_ID38 = @DocStatus GROUP BY T2.REF_ALC_CODE_ID --36126 Сведения о постановке продукции на баланс --36128 Акт списания продукции на прочие расходы select T1.ALC_CODE,T5.CLIENT_CODE,T3.FULL_NAME,T3.PERCENT_ALC,T4.VOLUME,T5.FULL_NAME AS PRODUCER ,T1.CNT from (select alc_code,SUM(summa) AS 'CNT' from ((Select ALC_CODE,SUMMA from @TAB_09) union (Select ALC_CODE,-SUMMA from @TAB_10) union (Select ALC_CODE,SUMMA from @TAB_11) union (Select ALC_CODE,-SUMMA from @TAB_12) union (Select ALC_CODE,SUMMA from @TAB_46) union (Select ALC_CODE,SUMMA from @TAB_59)) as tab1 group by ALC_CODE) AS T1 INNER JOIN TAB_ALC_CODE AS T2 ON T1.ALC_CODE = T2.ID INNER JOIN TAB_ALC_NAME AS T3 ON T2.REF_ALC_NAME_ID = T3.ID INNER JOIN TAB_VOLUME AS T4 ON T2.REF_VOLUME_ID = T4.ID INNER JOIN TAB_CLIENT AS T5 ON T2.REF_CLIENT_ID = T5.ID |
|||
7
Banned
01.10.14
✎
18:31
|
Мда...
SET NOCOUNT ON в начало влепи... |
|||
8
МихаилМ
01.10.14
✎
18:41
|
(7)
это oledb . он и так последний результат возвращает |
|||
9
Banned
01.10.14
✎
18:46
|
(8) А я всё равно бы поставил....
|
|||
10
bvb
01.10.14
✎
18:47
|
(7) ура заборбатало !!!
А что сия конструкция означает и почему без нее не работало ? |
|||
11
bvb
01.10.14
✎
18:49
|
Если значение инструкции SET NOCOUNT равно ON, то количество строк не возвращается. Если значение инструкции SET NOCOUNT равно OFF, то количество строк возвращается.
А почему другие запросы без нее работают ? |
|||
12
Banned
01.10.14
✎
18:51
|
(11) у тебя в начале стоит
INSERT @TAB_09 (ALC_CODE,SUMMA) И возвращает количество строк вставленных. В других, видать, такого нет |
|||
13
Jaap Vduul
01.10.14
✎
18:51
|
(8)Наоборот, это MSDASQL возвращает только результат, а SQLOLEDB выдаёт на клиента rowcount по каждой инструкции.
|
|||
14
bvb
01.10.14
✎
18:57
|
(12) А-а-а :
То то я смотрю в закладке сообщения пишет (строк обработано: 71) (строк обработано: 1391) (строк обработано: 151) (строк обработано: 0) (строк обработано: 73) (строк обработано: 0) (строк обработано: 1405) в этом то и фича INSERT @TAB_09 (ALC_CODE,SUMMA) - это не повод не отрабатывать .Recordcount() |
|||
15
bvb
01.10.14
✎
19:00
|
я так понимаю :
в запросе куча промежуточных таблиц и ADO Recordcount() не понимает количество записей которой возвращать |
|||
16
Banned
01.10.14
✎
19:02
|
(15) Он может ин а set'ы реагировать... И возвращать в элементе коллекции закрытый рекордсет.
|
|||
17
bvb
01.10.14
✎
19:32
|
(16) В любом случае большое спасибо - выручили
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |