We help IT Professionals succeed at work.

next field in database

amoran
amoran asked
on
i loop through entries in a database with a while loop
but can i assign a variable to be the next or previous date value?

currentdate = Recordset1.Fields.Item("udate").Value


ie database is

date    number
24/04/01  9
23/04/01  5
22/04/01  2
21/04/01  7

and i am at
22/04/01  2

i want to be able to access the
23/04/01  5
and maybe the
21/04/01  7
if possible

thanks

Comment
Watch Question

Nitin SontakkeDeveloper
CERTIFIED EXPERT

Commented:
Sorry, i didn't get the question.

If you order your resultset, you can always go back and forth as you wish anyway.

If you are saying that record may or may not exist, don't loop thru record set at all. Instead loop thru the dates and in your loop write as follows:

dateIndex = formatDateTime("March 31, 2001"
'Assume you are on first record of rs here...
For intIndex = 1 to 30
   newDate = dateAdd("d", intIndex, dateIndex)
   If Not Recordset1.EoF Then
      If Recordset1.Fields.Item("udate").Value = newDate Then
         'Date found in recordset...
         Recordset1.MoveNext
      Else
         '...
      End If
   Else
      '---
   End If
Next

Michel SakrRounded IT Consultant / Projects manager / Cloud Consultant / IT Planning
CERTIFIED EXPERT

Commented:
rs.movenext
NextVar = Recordset1("udate")
rs.moveprevious
rs.moveprevious
PreviousVar = Recordset1("udate")
rs.movenext
'proceed as usual
Michel SakrRounded IT Consultant / Projects manager / Cloud Consultant / IT Planning
CERTIFIED EXPERT

Commented:
Recordset1.movenext
NextVar = Recordset1("udate")
Recordset1.moveprevious
Recordset1.moveprevious
PreviousVar = Recordset1("udate")
Recordset1.movenext
'proceed as usual
Michel SakrRounded IT Consultant / Projects manager / Cloud Consultant / IT Planning
CERTIFIED EXPERT

Commented:
you can set a check if the recordset reached BOF or EOF in the code

Commented:
with the standard cursor, that only goes down the table, you can use objRS.MoveNext.

In order to move back through the recordset, you must make sure that the recordset is set to a scrollable cursor. Then you can use:

objRS.MoveFirst
objRS.MoveLast
objRS.MoveNext
objRS.MovePrevious
objRS.Move

Commented:
The scrollable cursor can be adOpenKeyset

Commented:
(You can use getrows)

set Rs=dataconn.open("select...from...where...")
ArrayResult=Rs.GetRows
Rs.Close
SET Rs=Nothing

ArrayResult will contain all value of your select in a arrow example

Select var1, var2 from table

if table containt

var1   var2
----   ----
a      5
b      7
c      2

ArrayResult(0,0)=a
ArrayResult(0,1)=5
ArrayResult(1,0)=b
...
ArrayResult(2,2)=2

The second number is the field and first is line number of your result

You can use getrows with many field, many rows and any type of field (number, string...)

it's faster and you never get lost connection to database because you close it after the .getrows

Author

Commented:
Silvers5 your solution looks good but i get this error

ADODB.Recordset error '800a0c93'
Operation is not allowed in this context.

/logs-break-old.asp, line 247


when i put in the code

Recordset1.movenext
nextdate = Recordset1("udate")
'nextdate = Recordset1.Fields.Item("udate").Value
Recordset1.moveprevious

i tried the commented line too

thanks
Nitin SontakkeDeveloper
CERTIFIED EXPERT

Commented:
Please post the code with which you are opening the recordset. It is at that time that you have to specify that you want to traverse the recordset back and forth.

The default is forward only.

Author

Commented:
<%@LANGUAGE="VBSCRIPT"%> <%
set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = "dsn=authentik-new;"
Recordset1.Source = "SELECT * FROM userlog ORDER BY id DESC"
Recordset1.CursorType = 0
Recordset1.CursorLocation = 2
Recordset1.LockType = 3
Recordset1.Open
Recordset1_numRows = 0
%><%
Dim Repeat1__numRows
Repeat1__numRows = 2000
Dim Repeat1__index
Repeat1__index = 0
Recordset1_numRows = Recordset1_numRows + Repeat1__numRows
%> <%
'  *** Recordset Stats, Move To Record, and Go To Record: declare stats variables

' set the record count
Recordset1_total = Recordset1.RecordCount

' set the number of rows displayed on this page
If (Recordset1_numRows < 0) Then
  Recordset1_numRows = Recordset1_total
Elseif (Recordset1_numRows = 0) Then
  Recordset1_numRows = 1
End If

' set the first and last displayed record
Recordset1_first = 1
Recordset1_last  = Recordset1_first + Recordset1_numRows - 1

' if we have the correct record count, check the other stats
If (Recordset1_total <> -1) Then
  If (Recordset1_first > Recordset1_total) Then Recordset1_first = Recordset1_total
  If (Recordset1_last > Recordset1_total) Then Recordset1_last = Recordset1_total
  If (Recordset1_numRows > Recordset1_total) Then Recordset1_numRows = Recordset1_total
End If
%> <%
' *** Move To Record and Go To Record: declare variables

Set MM_rs    = Recordset1
MM_rsCount   = Recordset1_total
MM_size      = Recordset1_numRows
MM_uniqueCol = ""
MM_paramName = ""
MM_offset = 0
MM_atTotal = false
MM_paramIsDefined = false
If (MM_paramName <> "") Then
  MM_paramIsDefined = (Request.QueryString(MM_paramName) <> "")
End If
%> <%
' *** Move To Record: handle 'index' or 'offset' parameter

if (Not MM_paramIsDefined And MM_rsCount <> 0) then

  ' use index parameter if defined, otherwise use offset parameter
  r = Request.QueryString("index")
  If r = "" Then r = Request.QueryString("offset")
  If r <> "" Then MM_offset = Int(r)

  ' if we have a record count, check if we are past the end of the recordset
  If (MM_rsCount <> -1) Then
    If (MM_offset >= MM_rsCount Or MM_offset = -1) Then  ' past end or move last
      If ((MM_rsCount Mod MM_size) > 0) Then         ' last page not a full repeat region
        MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)
      Else
        MM_offset = MM_rsCount - MM_size
      End If
    End If
  End If

  ' move the cursor to the selected record
  i = 0
  While ((Not MM_rs.EOF) And (i < MM_offset Or MM_offset = -1))
    MM_rs.MoveNext
    i = i + 1
  Wend
  If (MM_rs.EOF) Then MM_offset = i  ' set MM_offset to the last possible record

End If
%> <%
' *** Move To Record: if we dont know the record count, check the display range

If (MM_rsCount = -1) Then

  ' walk to the end of the display range for this page
  i = MM_offset
  While (Not MM_rs.EOF And (MM_size < 0 Or i < MM_offset + MM_size))
    MM_rs.MoveNext
    i = i + 1
  Wend

  ' if we walked off the end of the recordset, set MM_rsCount and MM_size
  If (MM_rs.EOF) Then
    MM_rsCount = i
    If (MM_size < 0 Or MM_size > MM_rsCount) Then MM_size = MM_rsCount
  End If

  ' if we walked off the end, set the offset based on page size
  If (MM_rs.EOF And Not MM_paramIsDefined) Then
    If (MM_offset > MM_rsCount - MM_size Or MM_offset = -1) Then
      If ((MM_rsCount Mod MM_size) > 0) Then
        MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)
      Else
        MM_offset = MM_rsCount - MM_size
      End If
    End If
  End If

  ' reset the cursor to the beginning
  If (MM_rs.CursorType > 0) Then
    MM_rs.MoveFirst
  Else
    MM_rs.Requery
  End If

  ' move the cursor to the selected record
  i = 0
  While (Not MM_rs.EOF And i < MM_offset)
    MM_rs.MoveNext
    i = i + 1
  Wend
End If
%> <%
' *** Move To Record: update recordset stats

' set the first and last displayed record
Recordset1_first = MM_offset + 1
Recordset1_last  = MM_offset + MM_size
If (MM_rsCount <> -1) Then
  If (Recordset1_first > MM_rsCount) Then Recordset1_first = MM_rsCount
  If (Recordset1_last > MM_rsCount) Then Recordset1_last = MM_rsCount
End If

' set the boolean used by hide region to check if we are on the last record
MM_atTotal = (MM_rsCount <> -1 And MM_offset + MM_size >= MM_rsCount)
%> <%
' *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters

' create the list of parameters which should not be maintained
MM_removeList = "&index="
If (MM_paramName <> "") Then MM_removeList = MM_removeList & "&" & MM_paramName & "="
MM_keepURL="":MM_keepForm="":MM_keepBoth="":MM_keepNone=""

' add the URL parameters to the MM_keepURL string
For Each Item In Request.QueryString
  NextItem = "&" & Item & "="
  If (InStr(1,MM_removeList,NextItem,1) = 0) Then
    MM_keepURL = MM_keepURL & NextItem & Server.URLencode(Request.QueryString(Item))
  End If
Next

' add the Form variables to the MM_keepForm string
For Each Item In Request.Form
  NextItem = "&" & Item & "="
  If (InStr(1,MM_removeList,NextItem,1) = 0) Then
    MM_keepForm = MM_keepForm & NextItem & Server.URLencode(Request.Form(Item))
  End If
Next

' create the Form + URL string and remove the intial '&' from each of the strings
MM_keepBoth = MM_keepURL & MM_keepForm
if (MM_keepBoth <> "") Then MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) - 1)
if (MM_keepURL <> "")  Then MM_keepURL  = Right(MM_keepURL, Len(MM_keepURL) - 1)
if (MM_keepForm <> "") Then MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) - 1)

' a utility function used for adding additional parameters to these strings
Function MM_joinChar(firstItem)
  If (firstItem <> "") Then
    MM_joinChar = "&"
  Else
    MM_joinChar = ""
  End If
End Function
%> <%
' *** Move To Record: set the strings for the first, last, next, and previous links

MM_keepMove = MM_keepBoth
MM_moveParam = "index"

' if the page has a repeated region, remove 'offset' from the maintained parameters
If (MM_size > 0) Then
  MM_moveParam = "offset"
  If (MM_keepMove <> "") Then
    params = Split(MM_keepMove, "&")
    MM_keepMove = ""
    For i = 0 To UBound(params)
      nextItem = Left(params(i), InStr(params(i),"=") - 1)
      If (StrComp(nextItem,MM_moveParam,1) <> 0) Then
        MM_keepMove = MM_keepMove & "&" & params(i)
      End If
    Next
    If (MM_keepMove <> "") Then
      MM_keepMove = Right(MM_keepMove, Len(MM_keepMove) - 1)
    End If
  End If
End If

' set the strings for the move to links
If (MM_keepMove <> "") Then MM_keepMove = MM_keepMove & "&"
urlStr = Request.ServerVariables("URL") & "?" & MM_keepMove & MM_moveParam & "="
MM_moveFirst = urlStr & "0"
MM_moveLast  = urlStr & "-1"
MM_moveNext  = urlStr & Cstr(MM_offset + MM_size)
prev = MM_offset - MM_size
If (prev < 0) Then prev = 0
MM_movePrev  = urlStr & Cstr(prev)
%>
<html>
<head>
<title>Untitled Document</title>

etc................
Rounded IT Consultant / Projects manager / Cloud Consultant / IT Planning
CERTIFIED EXPERT
Commented:
it seems you are using the default cursor in your connection, try to use a dynamic cursor when you open the recordset something like:

   set conn = server.createobject("adodb.connection")
    conn.open "dsn" 'or connection string here
    set Recordset1= server.createobject("adodb.recordset")
    sql = "select whatever from table where [...]"
    Recordset1.open sql,conn,1,1


rgrds

Author

Commented:
im not too familiar with the code for connecting to the DB
can you tell me in more detail what to do?
thanks!
Nitin SontakkeDeveloper
CERTIFIED EXPERT

Commented:
Try changing following line from,

Recordset1.CursorType = 0

To,

Recordset1.CursorType = 1

Author

Commented:
now when i do

Recordset1.movenext
nextdate = Recordset1("udate")
Recordset1.moveprevious

it just assigns nextdate to the same value as curudate (the current date before the movenext)

Nitin SontakkeDeveloper
CERTIFIED EXPERT

Commented:
As i can make out from your posted code is that it is been generated by a software. Software generated codes are often very difficult to intercept with as you need to understand WHAT they are doing and more importantly WHY.

It is particularly difficult to introduce the custom code in generated one.

We need few lines around your posted code. Also, while dealing with recordsets, you have to ALWAYS keep of track of EoF and BoF, etc.

Also, tell us all variable declared by u and their intended contents.
ADMINISTRATION WILL BE CONTACTING YOU SHORTLY.

Question(s) below appears to have been abandoned. Your options are:
 
1. Accept a Comment As Answer (use the button next to the Expert's name).
2. Close the question if the information was not useful to you. You must tell the participants why you wish to do this, and allow for Expert response.
3. Ask Community Support to help split points between participating experts, or just comment here with details and we'll respond with the process.
4. Delete the question. Again, please comment to advise the other participants why you wish to do this.

For special handling needs, please post a zero point question in the link below and include the question QID/link(s) that it regards.
http://www.experts-exchange.com/jsp/qList.jsp?ta=commspt
 
Please click the Help Desk link on the left for Member Guidelines, Member Agreement and the Question/Answer process.  http://www.experts-exchange.com/jsp/cmtyHelpDesk.jsp

Please click you Member Profile to view your question history and keep them all current with updates as the collaboration effort continues, to track all your open and locked questions at this site.  If you are an EE Pro user, use the Power Search option to find them.

To view your open questions, please click the following link(s) and keep them all current with updates.
http://www.experts-exchange.com/questions/Q.20145717.html
http://www.experts-exchange.com/questions/Q.20149901.html
http://www.experts-exchange.com/questions/Q.20165715.html
http://www.experts-exchange.com/questions/Q.20185843.html
http://www.experts-exchange.com/questions/Q.20186977.html
http://www.experts-exchange.com/questions/Q.20223716.html
http://www.experts-exchange.com/questions/Q.20223726.html
http://www.experts-exchange.com/questions/Q.20233409.html
http://www.experts-exchange.com/questions/Q.20241892.html
http://www.experts-exchange.com/questions/Q.20244216.html
http://www.experts-exchange.com/questions/Q.20245227.html
http://www.experts-exchange.com/questions/Q.20245232.html
http://www.experts-exchange.com/questions/Q.20245250.html
http://www.experts-exchange.com/questions/Q.20246001.html
http://www.experts-exchange.com/questions/Q.20246792.html
http://www.experts-exchange.com/questions/Q.20247520.html
http://www.experts-exchange.com/questions/Q.20271480.html
http://www.experts-exchange.com/questions/Q.20272996.html
http://www.experts-exchange.com/questions/Q.20273400.html
http://www.experts-exchange.com/questions/Q.20273382.html
http://www.experts-exchange.com/questions/Q.20274408.html


To view your locked questions, please click the following link(s) and evaluate the proposed answer.
http://www.experts-exchange.com/questions/Q.20193714.html

PLEASE DO NOT AWARD THE POINTS TO ME.  
 
------------>  EXPERTS:  Please leave any comments regarding your closing recommendations if this item remains inactive another seven (7) days.  Also, if you are interested in the cleanup effort, please click this link http://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=commspt&qid=20274643
 
Thank you everyone.
 
Moondancer
Moderator @ Experts Exchange

P.S.  For any year 2000 questions, special attention is needed to ensure the first correct response is awarded, since they are not in the comment date order, but rather in Member ID order.
Admin notified of User neglect. Force-accepted by
Netminder
CS Moderator

Explore More ContentExplore courses, solutions, and other research materials related to this topic.