Solved

MS Access - If Not Rs.EOF Issue Loop issue

Posted on 2012-03-18
13
638 Views
Last Modified: 2012-03-19
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

0
Comment
Question by:pskeens
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
  • 2
  • +2
13 Comments
 
LVL 83

Expert Comment

by:Dave Baldwin
ID: 37736518
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
 
LVL 2

Author Comment

by:pskeens
ID: 37736533
That did not work.  I did not get any errors, however nothing happened.
0
 
LVL 9

Expert Comment

by:Orcbighter
ID: 37736552
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
Use Case: Protecting a Hybrid Cloud Infrastructure

Microsoft Azure is rapidly becoming the norm in dynamic IT environments. This document describes the challenges that organizations face when protecting data in a hybrid cloud IT environment and presents a use case to demonstrate how Acronis Backup protects all data.

 
LVL 2

Author Comment

by:pskeens
ID: 37736559
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
 
LVL 50

Expert Comment

by:Gustav Brock
ID: 37736651
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
 
LVL 83

Expert Comment

by:Dave Baldwin
ID: 37736653
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
 
LVL 2

Author Comment

by:pskeens
ID: 37737328
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
 
LVL 50

Expert Comment

by:Gustav Brock
ID: 37737367
> 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
 
LVL 18

Expert Comment

by:Sham Haque
ID: 37737497
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
 
LVL 2

Author Comment

by:pskeens
ID: 37737589
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
 
LVL 50

Accepted Solution

by:
Gustav Brock earned 500 total points
ID: 37737636
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
 
LVL 2

Author Closing Comment

by:pskeens
ID: 37739713
BINGO!  We have a working code.  

I cant thank ALL OF YOU enough!  Thanks for hanging with me on this.
0
 
LVL 50

Expert Comment

by:Gustav Brock
ID: 37739890
You are welcome!

/gustav
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

A simple tool to export all objects of two Access files as text and compare it with Meld, a free diff tool.
When you see single cell contains number and text, and you have to get any date out of it seems like cracking our heads.
With Microsoft Access, learn how to specify relationships between tables and set various options on the relationship. Add the tables: Create the relationship: Decide if you’re going to set referential integrity: Decide if you want cascade upda…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question