powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL и ASP
25 сообщений из 39, страница 1 из 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
25 сообщений из 39, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL и ASP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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