Solved

Failing to create a recordset from a stored procedure

Posted on 2014-10-09
5
87 Views
Last Modified: 2014-10-15
I have an Access system that is linked to an MS SQL server (2008).  I have created stored procedures on the server that I want to extract as read only recordset.
The code is not filling the recordset with any records.  The date is passed as '01-Sep-2014'.

Any suggestions?

Private Sub cmdDownLoad_Click()
' Extract the data with selection criteria then download
  Dim DateLow, DateHigh As Variant
  Dim wdate As Date
  Dim rst As DAO.Recordset
  Dim RecCount As Long
  Dim db As DAO.Database
  Dim qdf As DAO.QueryDef
'  Dim DateLow As String
'  Dim DateHigh As String
  
  On Error GoTo ErrHandle
  
  DoCmd.Hourglass True
  
     
'    Call the stored procedures
     Set db = CurrentDb()
     Set qdf = db.QueryDefs("qspt_NZ_MiscFile")

     qdf.SQL = "EXEC sp_NZ_MiscFile " & _
               DateLow & "," & DateHigh

               
     Set rst = qdf.OpenRecordset()
  
  Debug.Print rst.RecordCount
  RecCount = rst.RecordCount

Open in new window

0
Comment
Question by:Nigel Keith-Walker
  • 4
5 Comments
 
LVL 40
ID: 40372225
Are the dates defined as date or text fields in the database?

If they are defined as date fields, then you need to pass your parameters with date variables.

If they are defined as text fields, then you need to pass your parameters in the format in which they are recorded in the database.
0
 

Author Comment

by:Nigel Keith-Walker
ID: 40372355
Perhaps I should ensure that I have the basics set up before worrying about the parameters.

I have just setup a new stored proc, a simple select of two fields from a small table.  It returns about 100 recs.

I have set up a querydef in the MSAccess 2010 app.  Tis lists the 100 records.

I now want to run VBA to run the querydef and to put the resultant list in a recordset. but still cannot get this to work.

Private Sub cmdDownLoad_Click()
' Simple test of running a pass through querydef to fill a recordset
  Dim db As DAO.Database
  Dim rst As DAO.Recordset
  Dim qdf As DAO.QueryDef
  Dim RecCount As Long
  Dim strsql As String
  
  Set db = CurrentDb()
  Set qdf = db.QueryDefs("qspt_test4")
  qdf.SQL = "EXEC sp_test4"
  Set rst = qdf.OpenRecordset(dbOpenSnapshot)
  
  Debug.Print rst.RecordCount
  RecCount = rst.RecordCount
  rst.MoveFirst
  
Exit_Sub:
  Exit Sub
    
ErrHandle:
    DoCmd.Hourglass False
    msg = "NZ MYOB Download Problem" & vbCrLf & msg2 & vbCrLf & Err.Description
    MsgBox msg, vbExclamation, "Form NZ MYOB"


End Sub

Open in new window

0
 

Author Comment

by:Nigel Keith-Walker
ID: 40372826
I have created coding to read a simple stored procedure.  It uses the ADODB command call.  It may not be as efficient as using DAO, but it does work.

Tomorrow I will code the call to the stored procedure that will involve date ranges.  If anybody has a better solution in the next 12 hours, do let me know.  I will post the final coding result.

Private Sub cmdDownLoad_Click()
' Simple test of running a pass through querydef to fill a recordset
  Dim db As DAO.Database
  Dim rst As ADODB.Recordset
  Dim qdf As DAO.QueryDef
  Dim RecCount As Long
  Dim strSql As String
  Dim cmd As New ADODB.Command

  cmd.ActiveConnection = "Provider=SQLNCLI10;Password=xxxxxxx;Persist Security Info=True;User ID=yyyyyy;Initial Catalog=zzzzzzz;Data Source=abc.def.ghi.au"
  cmd.ActiveConnection.CursorLocation = adUseClient
  cmd.CommandType = adCmdStoredProc
  cmd.CommandText = "sp_test4"  '--name of stored proc -- not passing params for this sample
  Set rst = cmd.Execute
  RecCount = rst.RecordCount
  Debug.Print rst.RecordCount
  rst.MoveFirst
  Do Until rst.EOF
    Debug.Print rst.Fields.Item("agentid")
    Debug.Print rst.Fields.Item("agent")
    rst.MoveNext
  Loop
  rst.Close
  cmd.ActiveConnection.Close
  
Exit_Sub:
  Exit Sub
    
ErrHandle:

End Sub

Open in new window

0
 

Accepted Solution

by:
Nigel Keith-Walker earned 0 total points
ID: 40374298
I have successfully extracted and filled a recordset from a stored procedure using ADODB commands.

As promised, here is the code:

Private Sub cmdDownLoad_Click()
' Simple test of running a pass through querydef to fill a recordset
'  Dim db As DAO.Database
  Dim rst As New ADODB.Recordset
  Dim cmd As New ADODB.Command
  Dim Parm As New ADODB.Parameter
'  Dim qdf As DAO.QueryDef
  Dim RecCount As Long
  Dim strSql As String
  Dim DateLow, DateHigh As String
  
  DateLow = "1-Sep-2014"
  DateHigh = "1-Sep-2014"

  cmd.ActiveConnection = "Provider=SQLNCLI10;Password=xxxxxxx;Persist Security Info=True;User ID=yyyyyyy;Initial Catalog=abcdef;Data Source=abc.def.ghi.au"
  cmd.ActiveConnection.CursorLocation = adUseClient
  cmd.CommandType = adCmdStoredProc
  cmd.CommandText = "sp_NZ_MiscFile"  '--name of stored proc --
  cmd.Parameters.Refresh
  cmd(1) = DateLow
  cmd(2) = DateHigh
  
  Set rst = cmd.Execute
  RecCount = rst.RecordCount
  Debug.Print rst.RecordCount
  rst.MoveFirst
  Do Until rst.EOF
    Debug.Print rst.Fields.Item("IME_Ref")
    Debug.Print rst.Fields.Item("Send_ref")
    rst.MoveNext
  Loop
  rst.Close
  cmd.ActiveConnection.Close
  
Exit_Sub:
  Exit Sub
    
ErrHandle:

End Sub

Open in new window

0
 

Author Closing Comment

by:Nigel Keith-Walker
ID: 40381708
Having to explain the problem to others helps to clarify the issue.  Hope this helps someone else
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

As with any other System Center product, the installation for the Authoring Tool can be quite a pain sometimes. This article serves to help you avoid making these mistakes and hopefully save you a ton of time on troubleshooting :)  Step 1: Make sur…
Article by: Leon
Software Metering within our group of companies has always been an afterthought until auditing of software and licensing became a pain point. Orchestrator and SCCM metering gave us the answer and it was an exciting process.
The viewer will learn how to simulate a series of coin tosses with the rand() function and learn how to make these “tosses” depend on a predetermined probability. Flipping Coins in Excel: Enter =RAND() into cell A2: Recalculate the random variable…
The viewer will learn how to use the =DISCRINV command to create a discrete random variable, use this command to model a set of probabilities and outcomes in a Monte Carlo simulation, and learn how to find the standard deviation of a set of probabil…

747 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now