MS Access - If Not Rs.EOF Issue Loop issue

Once again I need help.  How is a better way to write this RS.EOF code?  WHat I need is sort of a loop, but its not looping really because it applies to the next record and different txt control on the form.  Basically it works now but if there is not five records then I get an error and it stops after the second instance if there are only two records in the recordset.  

    Set rs = db.OpenRecordset(strSql, dbOpenSnapshot)
    
        rs.MoveFirst
            Me!txtBdl1 = rs("inv_tagid") & " - " & rs("inv_rec_date")
            If Not rs.EOF Then
                    rs.MoveNext
                    Me!txtBdl2 = rs("inv_tagID") & " - " & rs("inv_rec_date")
                If Not rs.EOF Then
                    rs.MoveNext
                    Me!txtBdl3 = rs("inv_tagID") & " - " & rs("inv_rec_date")
                If Not rs.EOF Then
                    rs.MoveNext
                    Me!txtBdl4 = rs("inv_tagID") & " - " & rs("inv_rec_date")
                If Not rs.EOF Then
                    rs.MoveNext
                    Me!txtBdl5 = rs("inv_tagID") & " - " & rs("inv_rec_date")
                End If
            End If
        End If
    End If
        
        rs.Close
        Set rs = Nothing

Open in new window

LVL 2
pskeensAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Dave BaldwinFixer of ProblemsCommented:
Use an array to store the results instead of individual variables and a loop to get the data.  Something like this:

dim txtBdl(6), lcount
lcount = 0
do until rs.EOF
  txtBdl(lcount ) = rs("inv_tagid") & " - " & rs("inv_rec_date")
  lcount = lcount + 1
  rs.MoveNext
loop

Open in new window

0
pskeensAuthor Commented:
That did not work.  I did not get any errors, however nothing happened.
0
OrcbighterCommented:
You need to move to the first record. I believe that is the statement that was missing.
Thus:

dim txtBdl(6), lcount
lcount = 0

rs.MoveFirst

while Not rs.EOF
  txtBdl(lcount ) = rs("inv_tagid") & " - " & rs("inv_rec_date")
  lcount = lcount + 1
  rs.MoveNext
End While
0
The Ultimate Tool Kit for Technolgy Solution Provi

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy for valuable how-to assets including sample agreements, checklists, flowcharts, and more!

pskeensAuthor Commented:
That did not work either.  However I changed the "End While" to "Wend", but still did nothing

Dim txtBdl(6), lcount
lcount = 0

rs.MoveFirst

While Not rs.EOF
  txtBdl(lcount) = rs("inv_tagid") & " - " & rs("inv_rec_date")
  lcount = lcount + 1
  rs.MoveNext
Wend
0
Gustav BrockCIOCommented:
You could count the records before entering the loop:
  Set rs = db.OpenRecordset(strSql, dbOpenSnapshot)
  If Not rs.EOF Then    
    rs.MoveLast
    If rs.RecordCount >= 5 Then    
        rs.MoveFirst
            Me!txtBdl1 = rs("inv_tagid") & " - " & rs("inv_rec_date")
        rs.MoveNext
            Me!txtBdl2 = rs("inv_tagID") & " - " & rs("inv_rec_date")
        rs.MoveNext
            Me!txtBdl3 = rs("inv_tagID") & " - " & rs("inv_rec_date")
        rs.MoveNext
            Me!txtBdl4 = rs("inv_tagID") & " - " & rs("inv_rec_date")
        rs.MoveNext
            Me!txtBdl5 = rs("inv_tagID") & " - " & rs("inv_rec_date")
    End If
  End If
  rs.Close
  Set rs = Nothing

Open in new window

/gustav
0
Dave BaldwinFixer of ProblemsCommented:
I modified one of my ASP pages to test this and this is what works.  It also matches the code in my Access book as far as the Do While loop goes.  I did the second loop at the end to show that the data was in the array.

<%@ LANGUAGE = VBScript %>
<%  Option Explicit		%>

<html>
    <head>
        <title>Dave's Simple ADO Query on Musician's 2 MDB</title>
		<style type="text/css">
<!-- 
td { background-color: white; } 
-->
</style>
    </head>

    <body bgcolor="White" topmargin="10" leftmargin="10">

		<!-- Display Header -->

		<font size="4" face="Arial, Helvetica">
		<b>Simple ADO Query with ASP</b></font><br>
    
		<hr size="1" color="#000000">

		Contacts within the Musicians Database:<br><br>

		<%
			Dim oConn		
			Dim oRs		
			Dim filePath		
			Dim Index
			Dim txtBdl(6), lcount		
			
			' Map authors database to physical path
			filePath = Server.MapPath("Musicians2.mdb")

			' Create ADO Connection Component to connect
			' with sample database	

			Set oConn = Server.CreateObject("ADODB.Connection")
			oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath
			
			' Execute a SQL query and store the results
			' within recordset
			
			Set oRs = oConn.Execute("SELECT ID, FirstName, LastName, HomePhone From Addresses")
		%>

		<table border="0" cellpadding="1" cellspacing="1" summary="" bgcolor="#808080">
		<%  
			lcount = 0
			oRs.MoveFirst
			
			Do while ((Not oRs.eof) AND (lcount < 6)) %>

				<tr>
					<% txtBdl(lcount) = oRs.Fields("FirstName").Value & " - " & oRs.Fields("LastName").Value %>
						<td valign=top>&nbsp;<% = txtBdl(lcount)%></TD>
					<% 
  					lcount = lcount + 1 %>
				</tr>
            
				<% oRs.MoveNext 
			Loop 
		%>

		</table>

		<%   
			oRs.close
			oConn.close
			lcount = 0
			%>
			<br>
		<%
			Do While (txtBdl(lcount) <> "") AND (lcount < 6)
				Response.write txtBdl(lcount) & " :: "
				lcount = lcount + 1
			Loop				  			 
		%>
		

</body>
</html>

Open in new window

0
pskeensAuthor Commented:
Thanks.  Counting the records before does not help.  Sometimes all 5 text boxes will be filled but then there will be times that only one, two, or even none of them will be.  This is why I was trying to use the loop through.  

Dave I will give this a shot and see what happens.
0
Gustav BrockCIOCommented:
> Counting the records before does not help.  
> Sometimes all 5 text boxes will be filled but then there will be times
> that only one, two, or even none of them will be.  

??
What does it matter if the textboxes are filled? Your original code doesn't care.
And why does counting not help? A count of 4 or less was exactly the cause of your trouble.

Please elaborate.

/gustav
0
Sham HaqueSenior SAP CRM ConsultantCommented:
How about this?
rather than re-iterating over the different text boxes by name, use an incrementing variable

rs.MoveFirst

Dim i

i = 1
Do While Not rs.EOF
Me!txtBdl & i = rs.Fields(0).Value & " - " & rs.Fields(1).Value
i = i + 1
rs.MoveNext
Loop

Open in new window

0
pskeensAuthor Commented:
gbshahaq that did not work.  

Gustav:  The code above on counting records means that it will only go through the movenext steps IF there are more than 5 records, right?   I need it to complete the steps until it runs out of rows of data up to 5.
0
Gustav BrockCIOCommented:
OK. Then use code like gb's

Dim intI As Integer
intI = 1
While Not rs.EOF
  Me("txtBdl" & intI & "").Value = rs.Fields(0).Value & " - " & rs.Fields(1).Value
  intI = intI + 1
  rs.MoveNext
Wend
rs.Close

Open in new window

/gustav
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
pskeensAuthor Commented:
BINGO!  We have a working code.  

I cant thank ALL OF YOU enough!  Thanks for hanging with me on this.
0
Gustav BrockCIOCommented:
You are welcome!

/gustav
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Access

From novice to tech pro — start learning today.