Форум: "Базы";
Текущий архив: 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.01 c