Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не пойму почему рекордсет закрыт ?? / 14 сообщений из 14, страница 1 из 1
17.06.2005, 12:04
    #33121410
mse
mse
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Есть такая процедура :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE PROCEDURE proc1
	@p_date datetime
as

SELECT w03_parent_id,w03_code INTO #TmpStatus from w03_status WHERE w01_id= 1  and w03_type = 5 

select *
	from p05 p5
    LEFT JOIN p04 on p5.p05_p = p04.p04_id
    LEFT JOIN p02 on p04.p02_id = p02.p02_id	
    LEFT JOIN #TmpStatus ON p5.p05_id = #TmpStatus.w03_parent_id

    AND convert(char( 21 ),p02_date, 101 )=convert(char( 21 ),@p_date, 101 )
    drop table #TmpStatus

и отработка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
cmd.CommandText = "proc"
    cmd.CommandType = adCmdStoredProc
    cmd.Parameters.Append cmd.CreateParameter("p_date", adDBTimeStamp, adParamInput, , p_date)
    Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = cmd.Execute

do while not rs.eof
...
rs.movenext
loop

в результате
ADODB.Recordset ошибка '800a0e78'
Operation is not allowed when the object is closed


в чем затык , help все перепробовал в менеджере отрабатывается процедура
нормально рекордсет присутствует ....
??
...
Рейтинг: 0 / 0
17.06.2005, 12:11
    #33121444
ANTIVIR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Может
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    dim rs as adodb.recordset

set rs=new adodb.recordset
set rs=cmd.Execute

rs.close
set rs=nothing
...
Рейтинг: 0 / 0
17.06.2005, 12:39
    #33121561
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Типа так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Public Sub ExecCmdGetRecordsets(cmd As ADODB.Command, ParamArray Recordsets())
Dim i As Integer
    With cmd
        .ActiveConnection = aco
        .CommandType = adCmdStoredProc
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
        rs.Open cmd, , adOpenStatic, adLockBatchOptimistic
    End With
    Set Recordsets( 0 ) = rs
    For i =  1  To UBound(Recordsets)
        Set Recordsets(i) = rs.NextRecordset
    Next
    For i =  0  To UBound(Recordsets)
        Set Recordsets(i).ActiveConnection = Nothing
    Next
    Set rs.ActiveConnection = Nothing
End Sub
...
Рейтинг: 0 / 0
17.06.2005, 12:44
    #33121578
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Точнее, для одного рекордсета:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Function ExecCmdGetOneRecordset(cmd As ADODB.Command) As ADODB.Recordset
    With cmd
        .ActiveConnection = aco
        .CommandType = adCmdStoredProc
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
        rs.Open cmd, , adOpenStatic, adLockBatchOptimistic
        'Set rs = .Execute
        'При открытии рекордсета через cmd.Execute
        'метаданные о том, откуда он взялся, теряются.
        'Надо пользоваться rs.Open cmd!!!
        Set ExecCmdGetOneRecordset = rs
        Set rs.ActiveConnection = Nothing
        Set rs = Nothing
    End With
End Function
...
Рейтинг: 0 / 0
17.06.2005, 12:44
    #33121581
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
А Command-у ActiveConnection указывать кто будет?
...
Рейтинг: 0 / 0
17.06.2005, 13:39
    #33121802
Andrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
...
Рейтинг: 0 / 0
17.06.2005, 15:01
    #33122075
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
дорогой mse , так ты же сам временную таблицу убил в конце своей процедуры :

Код: plaintext
drop table #TmpStatus

и что ты думаешь она тебе должна вернуть в этом случае?
...
Рейтинг: 0 / 0
17.06.2005, 15:10
    #33122094
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Konst_Oneдорогой mse , так ты же сам временную таблицу убил в конце своей процедуры :

Дорогой Konst_One, если не владеете вопросом - нечего советовать. Выборка остается в потоке ввода-вывода, пока рекордсет ее оттуда не заберет. А временная таблица на то и временная, чтобы быть убитой.
...
Рейтинг: 0 / 0
17.06.2005, 16:52
    #33122391
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
дорогой Melkiades , посмотри пожалуйста на эту строчку:

Код: plaintext
LEFT JOIN #TmpStatus 

а дропать временную таблицу #TmpStatus , созданную в самой процедуре, вообще не обязательно, за вас это сделает сервер по завершении работы данной процедуры.
...
Рейтинг: 0 / 0
17.06.2005, 17:04
    #33122419
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
может все-таки надо создать временную таблицу до вызова процедуры и убить ее после ее работы.
...
Рейтинг: 0 / 0
20.06.2005, 09:36
    #33123997
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Konst_One, купи книгу по SQL и читай перед сном. Процедура написана правильно. А создавать/убивать временные таблицы отдельными процедурами - лишняя нагрузка на сервер, если только в этом нет глубинного смысла.
...
Рейтинг: 0 / 0
21.06.2005, 15:17
    #33126934
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Если речь идет об MSSQL, то в процедуре первой строкой должно быть
SET NOCOUNT ON

Это как раз для такого случая.


-------
SET NOCOUNT, без балды, сбережет вас от беды!
...
Рейтинг: 0 / 0
15.09.2005, 12:30
    #33270938
Spectrator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Dibrov
Именно !!!!

у меня такаже трабла была - мучился несколько часов
решилась именно
SET NOCOUNT ON

Спасибо
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.11.2006, 15:16
    #34104485
Алгис
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пойму почему рекордсет закрыт ??
Не поверите! Вот это глюк!
У меня похожая проблема. Причем один и тот же рекордсет с одними входящими выполняется, а с другими - нет (ADODB.Recordset ошибка '800a0e78').
Знаете, что помогло? Переименовать рекордсет! То бишь, был RS (ну стандарт), а я его переименовал на RS1.
Так и не понял, почему не работало, и вдруг заработало!!!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не пойму почему рекордсет закрыт ?? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]