ASP+ADO::ADODB.Recordset, ошибка Find
От: NightWind Россия  
Дата: 03.06.03 08:25
Оценка:
Доброе время суток.
Возникла проблема с ADO при запуске метода Find возникает ошибка:
Microsoft OLE DB Provider for SQL Server (0x80040E29)
Набор строк не поддерживает прокрутку данных в обратном направлении.
Почему это происходит, ведь Find, вроде, проходит по записям только в одном направлении???
Re: ASP+ADO::ADODB.Recordset, ошибка Find
От: Andrey Makarov aka Zig  
Дата: 04.06.03 07:18
Оценка:
Здравствуйте, NightWind, Вы писали:

NW>Возникла проблема с ADO при запуске метода Find возникает ошибка:

NW>Набор строк не поддерживает прокрутку данных в обратном направлении.
NW>Почему это происходит, ведь Find, вроде, проходит по записям только в одном направлении???

MSDN: An error will occur if a current row position is not set before calling Find. Any method that sets row position, such as MoveFirst, should be called before calling Find.

по русски — перед вызовом Find вызови MoveFirst

а направление поиска задается SearchDirection:

Find (Criteria, SkipRows, SearchDirection, Start)

adSearchForward — вперед
adSearchBackward — назад
про случай, когда SearchDirection не задан в МСДНе ничего не сказано — полагаю, в таком случае он ищет в обоих направлениях
Re[2]: ASP+ADO::ADODB.Recordset, ошибка Find
От: NightWind Россия  
Дата: 04.06.03 12:26
Оценка:
Я не правильно поставил вопрос…
Почему следующий код вызывает ошибку:

Microsoft OLE DB Provider for SQL Server (0x80040E29)
Набор строк не поддерживает прокрутку данных в обратном направлении.
/tst/test.asp, line 31


<%@language="VBScript"%>
<%response.buffer=true%>
<%Response.Expires=-1%>
<%session.codepage=1251%>
<!--METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<%
   Dim Con, Rs
   
   Set Con=Server.CreateObject("ADODB.Connection")
   Set Rs=Server.CreateObject("ADODB.Recordset")
   
   Con.ConnectionString="provider=sqloledb;server=(local);uid=sa;password=ring;database=Learn"
   Con.Open
                                                         'Вот если это разкомментировать, то работает 
                                                         'что и понятно
   Rs.Open "SELECT * FROM checkes order by VarName", Con ', adOpenStatic, adLockReadOnly
   
   'Проходим по всем ячейкам вперёд пару раз, без пролем
   for i = 0 to 1
      Rs.MoveFirst
      do while not Rs.eof
         response.Write( Rs("VarName") & " ")
         Rs.MoveNext
      loop
   response.Write "<br>"
   next
      
   for i = 0 to 10 
      Rs.MoveFirst  'Если заккоментировать эту строчку тоже всё работает
      Str = "g" & i
      Rs.Find "Varname = '" &  Str  &"'" , 0, adSearchForward
      if not Rs.eof then
         Str = Str + " - Find<br>"
      else
         Str = Str + " - NotFind<br>"
      end if
      response.Write(Str)
   next
   Rs.Close
   Set Rs = Nothing
%>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.