powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL и ASP
39 сообщений из 39, показаны все 2 страниц
SQL и ASP
    #32070523
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак не могу справиться.. Посмотрите пожалуйста еще раз....
В общем так. Злосчастная хранимая процедура работает. Проверено в QueryAn.
На ASP корректно вызывается.
После того, как в конце на ASp пишется cmdProc.Execute - выпоняется. Но, поскольку у меня процедура выдает таблицу значений, т.е. в конце пишется Select * from Result, то на asp нужно выполнение процедуры поставить в RecordSet.
Я пишу.
rstProc.Open cmdProc.Execute
И на эту строку выдает
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. В этом случае, я уж совсем не знаю куда смотреть, т.к. процедура работает, и если её выполнить просто cmdProc.Execute, то ошибки нет, но мне же надо как-то результат получить...
Ох,... помогите пожалуйста.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070538
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед этой строчкой значения всех входных параметров должны быть указаны в команде cmdProc, свойство ActiveConnection установлено

Код: plaintext
rstProc.Open cmdProc
...
Рейтинг: 0 / 0
SQL и ASP
    #32070543
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделала. Теперь эту строчку пропускает, но теперь на строку rstProc.MoveFirst орет: Operation is not allowed when the object is closed.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070545
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выберите что-нибудь одно: или открытие Recordset'а и метод Оpen
rstProc = Server.CreateObject("ADODB.Recordset")
...
rstProc.Open("YOurProc",.....)
Или выполнение команды и метод Execute
cmdProc= Server.CreateObject("ADODB.Command")
.....
rstProc=cmdProc.Execute
...
Рейтинг: 0 / 0
SQL и ASP
    #32070553
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем MoveFirst? Полный текст скрипта, пожалуйста. Кроме того, server-side cursor является по-умолчанию ForwardOnly. И MoveFirst там точно не должен работать.

И, пожалуйста, прочитайте внимательно следующий текст.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070558
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите пожалуйста за некорректное описание.
Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Set  cmdProc= Server.CreateObject( "ADODB.Command" )
    cmdProc.CommandText =  "gruTable" 
    cmdProc.CommandType =  4 
 Set prmIn1 = cmdProc.CreateParameter( "@ID" , 3 , 1 )
    cmdProc.Parameters.Append prmIn1
    prmIn1.Value = Request( "IDk" )
    Set prmIn2 = cmdProc.CreateParameter ( "@ST" , 200 , 1 , 1000 )
    cmdProc.Parameters.Append prmIn2
    prmIn2.Value =Request( "st" )
   Set cmdProc.ActiveConnection = OBJdbConnection
   Set RstProc = Server.CreateObject( "ADODB.Recordset" )
   rstProc.Open cmdProc %>

А далее, я обрабатываю рекордсет,для записи данных из него в таблицу. Что-то вроде этого....
Код: plaintext
1.
2.
3.
<%RstProc.MoveFirst
For i= 1  to a %>
<tr><td><%=RstProc( "Mark" )%></td></tr>
...
Рейтинг: 0 / 0
SQL и ASP
    #32070574
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET NOCOUNT ON - в процедуре есть?
...
Рейтинг: 0 / 0
SQL и ASP
    #32070577
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если сразу EOF? :-)))

Из BOL
If the Recordset object does not support backward cursor movement, a call to the MoveFirst or MovePrevious methods generates an error. For example, the default setting of the CursorType property is adOpenForwardOnly, which supports only the MoveLast and MoveNext methods


Вы бы почитали что-нибудь......Про ADO
...
Рейтинг: 0 / 0
SQL и ASP
    #32070580
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первую очередь..... :)
...
Рейтинг: 0 / 0
SQL и ASP
    #32070581
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если сразу EOF? :-)))

Из BOL
If the Recordset object does not support backward cursor movement, a call to the MoveFirst or MovePrevious methods generates an error. For example, the default setting of the CursorType property is adOpenForwardOnly, which supports only the MoveLast and MoveNext methods


Вы бы почитали что-нибудь......Про ADO
...
Рейтинг: 0 / 0
SQL и ASP
    #32070591
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoveFirst убрать. После открытия рекордсета первая запись и так текущая (если она есть, если записей нет, то rstproc.eof=true and )

Цикл for i=1 to a убрать к чертовой матери. Лучше использовать do while not rstproc.eof ... rstproc.movenext loop

Исходный текст проверить еще раз. Потому что явных причин для такой ошибки я не вижу. Но возможно, вы открыли один рекордсет, а в цикле пытаетесь использовать другой, на который ссылается другая переменная, не rstProc

В начале хранимой процедуры поставить set nocount on

Если не поможет, то сообщить о результатах предпринятых действий. И сразу прислать полный исходный текст. От Open и до завершения цикла, в котором выводятся результаты.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070592
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемая Лёля.
До вас еще Chicago говорил, что все из-за ForwardOnly . И вообще известно, что с этим курсором передвигаться назад нельзя. Потому и задаю вопрос, что при любых курсорах, рекордсет не работает! Вы бы лучше подсказали почему возникает ошибка, а не что делает тот или иной курсор, этот вопрос я, кажется, не задавала.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070593
Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Профайлер в руки и смотреть чего там запускается и с какими параметрами.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070594
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Леля

В принципе согласен. Но если первая запись является текущей, то MoveFirst отрабатывает без ошибок и на ForwardOnly server-side
...
Рейтинг: 0 / 0
SQL и ASP
    #32070603
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Цикл While
2. <tr><td><%= RstProc.Fields("Mark").Value></td></tr>
...
Рейтинг: 0 / 0
SQL и ASP
    #32070608
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не получается. Вот код. Орет ту же ошибку на RstProc.eof
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
		<html>
		<head>
			<title>  </title>
		</head>
		
<%Set OBJdbConnection = Server.CreateObject( "ADODB.Connection" ) 
OBJdbConnection.Open(Session( "CS" ))  

SQLQ= "Select ID_Plant,NameP from Plant where ID_Plant in("  & Request( "strpl" ) &  ")Order by NameP " 
Set RSPlant = Server.CreateObject( "ADODB.Recordset" )
RSPlant.Open   SQLQ, OBJdbConnection, 3  

   Set  cmdProc= Server.CreateObject( "ADODB.Command" )
    cmdProc.CommandText =  "gruTable" 
    cmdProc.CommandType =  4 
   
    Set prmIn1 = cmdProc.CreateParameter( "@IDMARK" , 3 , 1 )
    cmdProc.Parameters.Append prmIn1
    prmIn1.Value = Request( "IDMark" )
    Set prmIn2 = cmdProc.CreateParameter ( "@STRPL" , 200 , 1 , 1000 )
    cmdProc.Parameters.Append prmIn2
    prmIn2.Value =Request( "strpl" )
    Set cmdProc.ActiveConnection = OBJdbConnection
   Set RstProc = Server.CreateObject( "ADODB.Recordset" )
   rstProc.Open cmdProc %>

<TABLE BORDER= 1  CELLSPACING= 1  CELLPADDING= 3 >
<%  RSPlant.MoveFirst 
do while not rstproc.eof%>
<tr>
	<td nowrap><A HREF= "Mark.asp" ><%=RstProc( "MARK" )%></td>
<%do while not rsPlant.EOF %>
	<%if RstProc( "DOS" ) =  "555 " then%>
				<td align=right>-</td>
				<td align=right>-</td>	
	<%else%>
				<%if FormatNumber(RstProc( "Price" ), 2 ) <>  0  then 'цена не нулевая%>
					<td align=right><%=FormatNumber(RstProc( "Price" ), 2 )%></td>	
					<%if Trim(RstProc( "DOS" )) =  "0 . 0 "   then%>
						<td align=right>*</td>
					<%else%>
						<td align=right><%=Replace(RstProc( "DOS" ), "." , "," )%></td>
					<%end if%>
				<%else%>	
					<td align=right>Нет данных</td>	
					<td align=right>Нет данных</td>	
				<%end if%>
	<%end if
	RSPlant.MoveNext 
	RstProc.MoveNext
	Loop%>
</tr>
<%Loop%>

</Table>	
</body>
</html>

...
Рейтинг: 0 / 0
SQL и ASP
    #32070609
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверху есть замечательное окошко - "Поиск" называется.

В данном случае читать снизу вверх .
...
Рейтинг: 0 / 0
SQL и ASP
    #32070618
Фотография Лëля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. Вместо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set  cmdProc= Server.CreateObject( "ADODB.Command" )
    cmdProc.CommandText =  "gruTable" 
    cmdProc.CommandType =  4 
   
    Set prmIn1 = cmdProc.CreateParameter( "@IDMARK" , 3 , 1 )
    cmdProc.Parameters.Append prmIn1
    prmIn1.Value = Request( "IDMark" )
    Set prmIn2 = cmdProc.CreateParameter ( "@STRPL" , 200 , 1 , 1000 )
    cmdProc.Parameters.Append prmIn2
    prmIn2.Value =Request( "strpl" )
    Set cmdProc.ActiveConnection = OBJdbConnection
   Set RstProc = Server.CreateObject( "ADODB.Recordset" )
   rstProc.Open cmdProc 

напишите
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   Set  cmdProc= Server.CreateObject( "ADODB.Command" )
    cmdProc.CommandText =  "gruTable" 
    cmdProc.CommandType =  4 
    cmdProc.ActiveConnection = OBJdbConnection   

    Set prmIn1 = cmdProc.CreateParameter( "@IDMARK" , 3 , 1 )
    cmdProc.Parameters.Append prmIn1
    prmIn1.Value = Request( "IDMark" )
    Set prmIn2 = cmdProc.CreateParameter ( "@STRPL" , 200 , 1 , 1000 )
    cmdProc.Parameters.Append prmIn2
    prmIn2.Value =Request( "strpl" )
    
   Set RsProc=cmdProc.Execute


Выберите что-нибудь одно: или открытие Recordset'а и метод Оpen
Или выполнение команды и метод Execute
...
Рейтинг: 0 / 0
SQL и ASP
    #32070627
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все то же. Не работает. :(
Кстати, в процедуре возвращается один Select, а не несколько.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070654
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так set nocount on есть в процедуре или нет?
...
Рейтинг: 0 / 0
SQL и ASP
    #32070655
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если убрать описание параметров и все собрать в одну текстовую строку
cmdProc.commandText = "..."
А потом set rstProc = cmdProc.Execute. Это может повлиять на результат?
...
Рейтинг: 0 / 0
SQL и ASP
    #32070657
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Set nocount on есть. В самом начале.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070693
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну давайте и я вставлю свои 2 копейки...

Если после выполнения команды и присвоения результата рекордсету продолжает ругаться Operation is not allowed when the object is closed - это означает только одно - рекордсет не открыт при возвращении результата.
Причин может быть много, т.к. по-умолчанию (если команда возвращает допустимый набор данных) - рекордсет все-таки должен быть уже открытым.

Чтобы понять причину - сразу после выполнения команды - выведите состояние объекта Error (Error.Number или Error.Description), возможно - сразу поймете в чем дело...
Если ошибки нет, но рекордсет все же не открывается - поменяйте стиль присвоения (например на Set My_RS = My_Connection.Execute("exec My_Procedure @my_parameter1=1")...).
Иногда способ присвоения может сыграть злую шутку...

Я лично пользуюсь всегда одним и тем же стилем вызовов процедур и построчной обработки рекордсетов (и никогда до сих пор не жаловался):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
' ... blah-blah-blah '
With cnn
        .ConnectionString = strConn
        .Open strConn
End With

If cnn.State =  1  Then ' проверка - есть ли соединение '
    Set rst = cnn.Execute( "sp_helptext "  & strProcName)
        If rst.State =  1  Then ' проверка - открыт ли рекордсет '
	Dim strTextProc
	 	 While Not rst.EOF
	    		strTextProc = strTextProc & rst.Fields( "text" ).Value
	    		rst.MoveNext
	    	Wend
	    End If
End If
' ... blah-blah-blah '
...
Рейтинг: 0 / 0
SQL и ASP
    #32070701
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  Set rst = cmd.Execute
  lwList.ListItems.Clear

     If Not rst.EOF Then rst.MoveFirst
        While Not rst.EOF
         lwList.ListItems.Add i, , rst.Fields( 0 ).Value
         lwList.ListItems.Item(i).ListSubItems.Add , , CStr(rst.Fields( 1 ).Value)
         lwList.ListItems.Item(i).ListSubItems.Add , , CStr(rst.Fields( 3 ).Value)
         lwList.ListItems.Item(i).ListSubItems.Add , , CStr(rst.Fields( 2 ).Value)
         lwList.ListItems.Item(i).ListSubItems.Add , , CStr(rst.Fields( 4 ).Value)
         i = i +  1 
         rst.MoveNext
        Wend

Пример конечно не из asp,но может поможет,т.к. работает заполнение по тому-же принцыпу.
cmd - Адошный комманд ,хп в которую передаються параметры
rst - рекордсет
...
Рейтинг: 0 / 0
SQL и ASP
    #32070702
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я не то поняла. Но ошибка - то есть ADODB.Recordset ошибка '800a0e78'
...
Рейтинг: 0 / 0
SQL и ASP
    #32070704
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку...

У рекордсета, построенного на выполнении команды или метода Connection.Execute - может быть 4 состояния:

1. Открыт и непустой, т.е. имеет записи (rst.State = 1; rst.EOF = False);
2. Открыт и пустой, т.е. не имеет записей (rst.State = 1; rst.EOF = rst.BOF = True);
3. Закрыт (rst.State = 0; rst.EOF ,rst.BOF - не существуют, обращение к ним вызывает ошибку исполнения);
4. Nothing - (rst.State ,rst.EOF ,rst.BOF - не существуют, обращение к ним вызывает ошибку исполнения) это происходит, когда процедура возвращает несколько рекордсетов и вы перебираете их в цикле используя Set rst = rst.NextRecordset(), при этом проверка на rst is Nothing - является условием выхода из цикла.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070711
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, я не знаю как восппользоваться rstProc.NextREcordset. Скажите пожалуйста.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070721
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А имеется ли у вас такая штука, MSDN называется?

Вот я запустил поиск по этому номеру ошибки ('800a0e78') и сразу она мне написала примерно следующее:

"A Recordset is bound to a stored procedure, which returns a value, but no recordset. When the return value is accessed, this error occurs:

ADODB.Recordset error '800a0e78'
The operation requested by the application is not allowed if the object is closed."

Вы точно уверены, что ваша процедура возвращает именно набор записей (через select), а не return value (через return)?
...
Рейтинг: 0 / 0
SQL и ASP
    #32070722
anonimous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй набор получать на через Command, а через Recordset, но для нормального возврата данных в хранимой процедуре перед последним селектом или выше поставь SET NOCOUNT ON
...
Рейтинг: 0 / 0
SQL и ASP
    #32070730
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Текст хранимой процедуры (ПОЛНЫЙ!!!) в студию
...
Рейтинг: 0 / 0
SQL и ASP
    #32070732
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
on: Простите, я не знаю как восппользоваться rstProc.NextREcordset. Скажите пожалуйста \r
\r
ADO-Recorsets, MS SQL Server, OLEDB, ODBC, #-tables, and all this jazz...
...
Рейтинг: 0 / 0
SQL и ASP
    #32070752
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все. заработало. Ффуууххххх.
Внимательно прочитала еще раз все ваши советы. Все перепроверила. И все было так как вы говорили.
БОЛЬШОЕ СПАСИБО ВСЕМ, спасибо что помогли. Очень выручили. Надеюсь, больше не будет таких вопросов. Очень признательна.... СПАСИБО ! ! !
...
Рейтинг: 0 / 0
SQL и ASP
    #32070753
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полный текст ХП, страницы асп и зарплату - В СТУДИЮ!!!
...
Рейтинг: 0 / 0
SQL и ASP
    #32070755
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честное слово. Охотно бы выплатила все премию.
Вы не думайте, чтоу меня там супер-код. Я просто балда.
...
Рейтинг: 0 / 0
SQL и ASP
    #32070759
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СОГЛАСЕН!
ЗЫ
неудержался...
...
Рейтинг: 0 / 0
SQL и ASP
    #32070761
Inebs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего страшного.... можно и ногами....:)
...
Рейтинг: 0 / 0
SQL и ASP
    #32070768
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный трэд получился. Может анекдоты начать рассказывать...
...
Рейтинг: 0 / 0
SQL и ASP
    #32070864
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я тут проездом буду в Самаре, могу премию забрать :)
...
Рейтинг: 0 / 0
SQL и ASP
    #32071207
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что, опять SET NOCOUNT ON?

Может быть на заглавной странице форума заглавными красными буквами написать.

ПОСТАВЬ SET NOCOUNT ON В НАЧАЛЕ ПРОЦЕДУРЫ, НЕ РАБОТАЕТ? НУ ЛАДНО, ЗАДАВАЙ ВОПРОСЫ!
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL и ASP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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