[AccessD] return query result into variable

Brock, Christian T, PERSCOM Christian.Brock at hoffman.army.mil
Tue Jul 8 10:09:45 CDT 2003


Do you have to have some particular reference turned on to use the State
property for recordsets?  I am using Access XP and do not see that as a
property.

Christian Brock

-----Original Message-----
From: Bruce Bruen [mailto:bbruen at bigpond.com] 
Sent: Tuesday, 08 July 2003 05:51
To: 'Access Developers discussion and problem solving'
Subject: RE: [AccessD] return query result into variable


Hoowee, you're about 2 light years away.

Your query does not return one number, it returns a recordset with a single
row containing a single field that is a number.

Docmd.runquery?  Perhaps docmd.openquery, but I doubt that's what you want
either.

I think you need a module containing something along the lines of the
following.

<CODE>

#Const DEVEL = False        'turns development level error handling on
and off

Public Function GetCount(qryName As String) As Long
'-----------------------------------------------------------------------
----------------
'
'   Description / Purpose :-
'       GetCount executes a stored database query that returns a count
of a specific type
'       The query MUST return only one row, and only one field
"qryCount".
'
'   Parameters:-
'       PARAMETER   TYPE    COMMENTS
'       qryName     string  The name of the select query to be run
'
'   Return Value:-
'       (Long) the value of the count as returned by the query.  If the
action fails the
'       returned value is set to -1.
'
'   Notes:-
'
'-----------------------------------------------------------------------
----------------
'   Version     Dated       Author  Comment
'     1.0       28/06/2003  bruce   Original.
'=======================================================================
================

    Dim lngRtn As Long          'internal store for interim result
    Dim conn As Connection      'db connection
    Dim rst As Recordset        'recordset returned by the query

    On Error GoTo GetCount_ERR
    
    lngRtn = -1
    Set conn = CurrentProject.Connection
    Set rst = New Recordset
    rst.Open qryName, conn, adOpenStatic, adLockReadOnly
    
    If rst.RecordCount <> 1 Then
        Err.Raise 4011, "GetCount" ', "GetCount Query error"
    Else
        lngRtn = rst!qryCount
    End If
    
    GetCount = lngRtn

GetCount_CLEANUP:
    If Not rst Is Nothing Then
        If rst.State = adStateOpen Then
            rst.Close
        End If
        Set rst = Nothing
    End If

GetCount_EXIT:
   On Error GoTo 0
   Exit Function

GetCount_ERR:
    Select Case Err.Number
        Case 3265
            Call MsgBox("Program Error:The query passed to the GetCount
procedure " _
                        & vbCrLf & "does not contain the correct field for
returning the count." _
                        & vbCrLf & "This error is a serious program fault."
_
                        & vbCrLf & "" _
                        & vbCrLf & "Please inform the System Administrator
of this error." _
                        , vbCritical + vbSystemModal, Application.Name)
        Case 4011
            Call MsgBox("Program Error: The query supplied to this procedure
returned no rows or " _
                        & vbCrLf & "more than one row.   The procedure
can only use a query that returns" _
                        & vbCrLf & "exactly one row.  This is a serious
program error." _
                        & vbCrLf & "" _
                        & vbCrLf & "Please inform the System Administrator
of this error." _
                        , vbCritical + vbSystemModal, Application.Name)
        Case -2147217900
            Call MsgBox("Program Error:  An invalid query name was passed as
a " _
                        & vbCrLf & "parameter to the GetCount function. This
is a serious " _
                        & vbCrLf & "programming error." _
                        & vbCrLf & "" _
                        & vbCrLf & "Please inform the System Administrator
of this error" _
                        , vbCritical + vbSystemModal, Application.Name)
            Set rst.ActiveConnection = Nothing 'needed as the open call
failed
        Case Else
            MsgBox "Error " & Err.Number & " (" & Err.Description & ") in
procedure GetCount of Module Module1"
    End Select
#If Not DEVEL Then
    Resume GetCount_CLEANUP
#Else
    Stop
    Resume
#End If

End Function
  
</CODE>

Then you can call the beast as a function, like:

 intNewProjectID=GetCount("qryNewProjectID")


Hth
Bruce
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Sad Der
Sent: Tuesday, 8 July 2003 6:48 PM
To: Acces User Group
Subject: [AccessD] return query result into variable



More information about the AccessD mailing list