Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Вниз

Ошибка:RecordSet is not open   Найти похожие ветки 

 
lovres   (2002-12-29 10:36) [0]

Вобщем: есть ADOQuery, в которой вызывается хранимая процедура, которая возвращает три RecordSet"a.Я делаю
ADOQuery.Active:=true;
FillPrih.Recordset:=ADOQuery.NextRecordset(i);
Compare.Recordset:=ADOQuery.NextRecordset(i);
ругается на последнюю строку. Выполняю хранимую процедуру в QueryAnalyser"e - все три RecordSet"a выводятся.
С чем это может быть связано и как с этим справиться?


 
sniknik   (2002-12-29 13:12) [1]

Первые выводят правильно? те что ожидаются?
Как ругается?
Может после 2 идти пустой датасет игнорируемый в QueryAnalyser?
Есть исходный текст процедуры?
попробуй так
ADOQuery.Recordset:= ADOCommand.Execute;
FillPrih.Recordset:= ADOCommand.NextRecordset(i);
Compare.Recordset:= ADOCommand.NextRecordset(i);
чего получается?


 
lovres   (2002-12-29 13:34) [2]

Первые выводят правильно? те что ожидаются?
да
Как ругается?
Compare: Recordset is not open
Может после 2 идти пустой датасет игнорируемый в QueryAnalyser?
Все датасеты не пустые(проверял)
пробовал как ты сказал - не помогло


 
lovres   (2002-12-29 13:35) [3]

текст процедуры:
declare
@kop varchar(500),
@strEXEC varchar(8000)
set @kop=@help
if exists (select * from sysobjects where [name]="ASD") drop table ASD
set @strEXEC="
select OP.KOOP, OPT.KODT, OP.NOME, OP.DATA, SUM(OPT.KOLV) as KKOL into MagBase.dbo.ASD from OPERA OP "+
" join OPTOV OPT on OP.KOOP=OPT.KOOP where OP.KOOP in " +@kop+" and OP.TIPO=""1"""+
" group by OP.KOOP,OPT.KODT,OP.NOME,OP.DATA"
exec (@strEXEC)

select * into #ASD from ASD

select * into #ZAKT_ZAKHELP from ZAKT_ZAKHELP
SELECT OPR.KOOP, OPR.NOME, OPR.DATA, OPR.TIPO, OPR.DTIP,
OPR.KODO, OPR.SUMM, OP.KODT, A.KKOL, OP.CPOK,
OP.CPRO, OP.KODT1, TV.NAZV
INTO #ZAKTOPERAOPTOV
FROM #ASD A
JOIN TOVAR TV ON TV.KODT = A.KODT
JOIN OPTOV OP ON TV.KODT = OP.KODT AND OP.KOOP=A.KOOP
JOIN OPERA OPR ON OPR.KOOP = OP.KOOP

SELECT ZR.* INTO #SSS FROM #ZAKT_ZAKHELP ZH
INNER JOIN zaktResults ZR ON ZR.[USER] LIKE "%" + ZH.USER1 + "%"
AND dbo.longdatetime2(ZH.REPTIME1) = dbo.longdatetime2(ZR.REPTIME)

SELECT * FROM #SSS ZR
WHERE NOT EXISTS ( SELECT * FROM #ZAKTOPERAOPTOV ZOO
WHERE ZOO.KODT=ZR.KODT)
AND
NOT EXISTS ( SELECT * FROM ZAKTSOGLAS ZS
JOIN #ZAKT_ZAKHELP ZH1 ON ZS.[USER] LIKE "%"+ZH1.USER1+"%"
AND dbo.longdatetime2(ZS.REPTIME)=dbo.longdatetime2(ZH1.REPTIME1)
WHERE ZS.KODTZAK=ZR.KODT )
AND isnull(ZR.zakaz_itog,0)>0

DROP TABLE #SSS

SELECT ZOO.*, PK.NAZV FROM #ZAKTOPERAOPTOV ZOO
JOIN POST_KOEF PK ON ZOO.KODO=PK.KODO
WHERE NOT EXISTS
(SELECT * FROM #ZAKT_ZAKHELP ZH
INNER JOIN zaktResults ZR ON ZR.[USER] LIKE "%" + ZH.USER1 + "%"
AND dbo.longdatetime2(ZH.REPTIME1) = dbo.longdatetime2(ZR.REPTIME)
WHERE ZR.KODT=ZOO.KODT AND isnull(ZR.zakaz_itog,0)>0)
AND
NOT EXISTS ( SELECT * FROM ZAKTSOGLAS ZS
JOIN #ZAKT_ZAKHELP ZH1 ON RTRIM(LTRIM(ZS.[USER])) =RTRIM(LTRIM(ZH1.USER1))
AND dbo.longdatetime2(ZS.REPTIME)=dbo.longdatetime2(ZH1.REPTIME1)
WHERE ZS.KODTPRIH=ZOO.KODT )


SELECT * INTO #EFFD FROM
#ZAKT_ZAKHELP ZH1
INNER JOIN zaktResults ZR ON ZR.[USER] LIKE "%" + ZH1.USER1 + "%"
AND dbo.longdatetime(ZH1.REPTIME1) = dbo.longdatetime(ZR.REPTIME)

SELECT
ZH.[USER],
ZH.REPTIME,
ZH.SHIF,
ZH.KODT,
OP.KOOP,
OP.KODT as KODT_1,
ZH.T_1,
ZH.T_2,
ZH.T_3,
ZH.T_4,
NAZV=ZH.T_1,
OPR.NOME,
OPR.DATA,
ZAMT = NULL,
ZH.zakaz_itog,
ZH.zakaz_pachek_itog,
ZH.cena,
ZH.zakaz_summa_itog,
OPR.KKOL
FROM #ASD OPR
JOIN OPTOV OP ON OPR.KOOP=OP.KOOP
JOIN
#EFFD ZH ON OP.KODT=ZH.KODT
WHERE ZH.zakaz_itog>0
UNION
SELECT ZS.* FROM ZAKTSOGLAS ZS
JOIN #ZAKT_ZAKHELP ZP ON ZS.[USER] LIKE "%"+ZP.USER1+"%"
AND dbo.longdatetime2(ZS.REPTIME)=dbo.longdatetime2(ZP.REPTIME1)

DROP TABLE #EFFD
GO


 
sniknik   (2002-12-29 14:35) [4]

lovres © (29.12.02 13:34)
> Все датасеты не пустые(проверял)

я не про то немного
вот пример

делаю
SELECT * FROM T1
SELECT * FROM TableTest
SELECT * FROM sysusers
результат
15 Выполнено применительно к 4 записям
применительно к 1 записям
применительно к 12 записям


теперь
SELECT * FROM T1
SELECT * FROM TableTest
SELECT * INTO #TmpTable FROM T1
DROP TABLE #TmpTable

SELECT * FROM sysusers
результат
16 Выполнено применительно к 4 записям
применительно к 1 записям
применительно к 4 записям. (no recordset) //!!!!
применительно к 12 записям

в этом 3 запись не является ДатаСетом с данными но присутствует информационно, делаю через ADO, а вот Анализер его пропустит. У тебя может то же самое. если так то попробуй сл.
ADOQuery.Recordset:= ADOCommand.Execute;
FillPrih.Recordset:= ADOCommand.NextRecordset(i);
ADOCommand.NextRecordset(i); //игнорирование -> в Null
Compare.Recordset:= ADOCommand.NextRecordset(i);

можно
ADOCommand.NextRecordset(i); //игнорирование -> в Null
в
try
except end
если всетаки будет ругатся. но вообще смотри как ругается. может у тебя 2 пыстышки. (процедуру не разбирал)

еще до кучи, в кладовке в готовых программах возьми прогу TestMdb проверь процедуру через нее (аналог анализера но через адо) как в нем? (чего я ее зря писал чтоли) там должно быть видно пустышки.


 
lovres   (2002-12-29 15:44) [5]

В твоей проге:
Выполнено применительно к 188 записям. (no recordset)
применительно к 188 записям. (no recordset)
применительно к 1 записям. (no recordset)
применительно к 292 записям. (no recordset)
применительно к 185 записям
применительно к 189 записям. (no recordset)
применительно к 292 записям. (no recordset)
применительно к 18 записям
применительно к 3 записям
и на закладке Greeds(кстати исправь на Grids) выдаёт как-раз 3 набора данных
Что из этого следует?


 
lovres   (2002-12-29 16:08) [6]

В твоей проге всё приводится к верхнему регистру, а у меня в базе регистрозависимое всё


 
lovres   (2002-12-29 16:19) [7]

Всё нашли ошибку!
Наверное при селектах и инсертах используются разные режимы работы, в общем поставил все инсерты в начало, а все селекты(возвращающие recordset) в конец и всё поехало


 
sniknik   (2002-12-29 17:41) [8]

lovres © (29.12.02 15:44)
значит надо пропускать то что на самом деле не рекордсет. что и пытался сказать видимо непонятно.
а резве Greeds не более правильно? :о)) спасибо.

lovres © (29.12.02 16:08)
В смысле "к верхнему регистру" и "регистрозависимое всё", где? не замечал. в каком случае?

lovres © (29.12.02 16:19)
тоже вариант. только дейстенен для своих процедур а если чужие? и лутше не менять. то придется по моему.


 
Polevi   (2002-12-29 17:47) [9]

SET NOCOUNT ON иногда помогает


 
sniknik   (2002-12-29 19:02) [10]

Б;№дь ведь точно!
> Polevi © (29.12.02 17:47)
100% поможет.
совсем забыл воткнулся в одну идею... :-((

2 lovres © (29.12.02 16:08)
понял о чем ты, "к верхнему регистру" действительно приводится специально (проверка на DIRECTTABLE и команды меняюшие кооичество таблиц, для реконекта), у себя уже исправил. Еще раз спасибо. Найдеш еще чтонибудь пиши.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
3-72097
Sword-Fish
2002-12-26 12:41
2003.01.23
Работа с БД


1-72333
Rammst
2003-01-10 17:46
2003.01.23
Мышь


1-72318
Gerda
2003-01-14 22:48
2003.01.23
По поводу коммон контрола SysListView32


1-72177
MyNameIsVova
2003-01-13 17:12
2003.01.23
Ресурсное меню. Изменение сочетаний горячих клавиш (API).


1-72406
Silver Eagle
2003-01-13 18:00
2003.01.23
Получение значения Caption из используемого компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский