How to reuse a recordset in vba

Posted on 2008-10-16
Last Modified: 2013-11-27

I'm using a sql statement to extract data on to a recordset in VBA.
However, I'm looping this process. I need to run the same process six times.
It looks like the sql statement executes and extracts the data correctly the first time, but when I loop through the second time, it's not allowing me to do so. It looks like data is not being put in to the recordset the second time around.
Could someone help me to figure out how I can do this?
I've attached the code below.

For Each numratio In Range("renewalratiocount")
      'if x = 6 then arm product
      x = x + 1
      If x = 6 Then
      producttype = "arm"
      term = 5
      producttype = "fixed"
      term = x
      End If
   If numratio.Value <> 0 Then
      ' Create the RenewRsMin table on the server
      Set MyCommand = New ADODB.Command
      Set MyCommand.ActiveConnection = MyDatabase
      MyCommand.CommandText = "spRenewRsMin" ' <- name of procedure
      MyCommand.CommandType = adCmdStoredProc
      ' pass the values to the stored procedure
      With MyCommand
         .Parameters.Append .CreateParameter("vol", adInteger, adParamInput, , vol)
         .Parameters.Append .CreateParameter("ppp", adInteger, adParamInput, , ppp)
         .Parameters.Append .CreateParameter("liquidation", adInteger, adParamInput, , liquidation)
         .Parameters.Append .CreateParameter("ratio", adInteger, adParamInput, , numratio.Value)
         .Parameters.Append .CreateParameter("producttype", adVarChar, adParamInput, 10, producttype)
         .Parameters.Append .CreateParameter("term", adInteger, adParamInput, , term)
      End With
   MyCommand.Execute , , adAsyncExecute
   ' Close and re-open the connection to refresh.
  ' print the min file on to the RemRs.min file
   sqlmin = "select code,term,princ,strike,amort,maturity,firexer,cpr,smm,pipcode,pipiss,mbscpn,servicing,volat,minsprd,perration,trancost,solvepre,issdt,mbsmat,cpr2,smm2,fundingdatemin from renewrsmin"
   Set rstempdata = MyDatabase.Execute(sqlmin)
   blnColumnHeaders = False
   sterm = Right(Str(term), 1)
   If producttype = "arm" Then
   minfile = Worksheets("sheet1").Range("renewminfilename").Value + "a" + sterm
   Else: minfile = Worksheets("sheet1").Range("renewminfilename").Value + "f" + sterm
   End If
   Open Worksheets("sheet1").Range("crvdirectory").Value + "\" + minfile + ".min" For Output As #1
   ' Set the Delimiter for the output file
   strDelimeter = "  "
   strtext = " "
   Do While Not rstempdata.EOF
      For Each fld In rstempdata.Fields
         strtext = strtext & fld.Value & strDelimeter
      'get rid of the extra delimeter
      strtext = Left(strtext, Len(strtext) - Len(strDelimeter))
      strtext = strtext & vbNewLine & " "
   'removes the extra line at the bottom of the file
   strtext = Left(strtext, Len(strtext) - Len(vbNewLine))
   Print #1, strtext
   Close #1
   Set rstempdata = Nothing
   'attach the mortgagenumber
   sqlmin = "select id from renewrsmin"
   Set tempdata = MyDatabase.Execute(sqlmin)
   If producttype = "arm" Then
   minfile = "renewOutputa5"
   Else: minfile = "renewoutputf" + Right(sterm, 1)
   End If
   y = 1
   Do While Not tempdata.EOF
      For Each fld In tempdata.Fields
         y = y + 1
         If y = 2 Then ActiveSheet.Range("A2:AX65536").Clear
         ActiveSheet.Range("A" & y).Select
         ActiveCell.Value = fld.Value
    Set tempdata = Nothing
   End If
    '.Delete AffectRecords

Open in new window

Question by:vba_confused
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
  • 3
  • 2
LVL 85
ID: 22739181
Your code is a bit of a mess .... where exactly are you filling the recordset?

Author Comment

ID: 22750030
Starting in line 39 to 41. where I execute the sql statement and set the recordset called rstempdata.
Your assistance is greatly appreciated.
LVL 85

Accepted Solution

Scott McDaniel (Microsoft Access MVP - EE MVE ) earned 500 total points
ID: 22751529
Try this:


You sometimes must move through the entire DAO recordset in order to "fill" it properly.

Author Comment

ID: 22762431
It was just a problem within the stored procedure.  a numeric variable was being assigned as a varchar.

Otherwise, looks like the code works
LVL 85
ID: 22770978
So why the C grade? If my answer wasn't the answer just don't accept it and instead delete the question. A "C" grade is a slap in the face.

Featured Post

Office 365 Training for IT Pros

Learn how to provision tenants, synchronize on-premise Active Directory, implement Single Sign-On, customize Office deployment, and protect your organization with eDiscovery and DLP policies.  Only from Platform Scholar.

Question has a verified solution.

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

Did you know that more than 4 billion data records have been recorded as lost or stolen since 2013? It was a staggering number brought to our attention during last week’s ManageEngine webinar, where attendees received a comprehensive look at the ma…
After seeing numerous questions for Dynamic Data Validation I notice that most have used Visual Basic to solve the problem. This suggestion is purely formula based and can be used in multiple rows.
The viewer will learn how to simulate a series of sales calls dependent on a single skill level and learn how to simulate a series of sales calls dependent on two skill levels. Simulating Independent Sales Calls: Enter .75 into cell C2 – “skill leve…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
Suggested Courses
Course of the Month6 days, 2 hours left to enroll

627 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