[AccessD] Stored procedures as Queries

Jim Dettman jimdettman at verizon.net
Sat Aug 6 07:11:27 CDT 2011


John,

  You can use a temp querydef:

Dim qdf As QueryDef
Dim sParam As string

            
sParam = ""

For i = 0 To rs.Fields.count - 2
   sParam = "?," & sParam
Next i

sParam = sParam & "?"
            
sql = "{call qrySoTransHeaderInsert(" & sParam & ")}"
Set qdf = gConSqlComp.CreateQueryDef("", sql)
            
For i = 0 To rs.Fields.count - 1
   qdf.Parameters(i) = rs.Fields(i).Value
Next
qdf.Execute

qdf.Close

  This snippet of code is used to move a record between a local JET table
and a SQL one in the backend.  The sproc is doing the actual insert into the
BE table.

  Here is part of the corresponding fetch:

sql = "{call qrySoTransGet('" & Me!cboTransId & "')}"
Set qdf = gConSqlComp.CreateQueryDef("", sql)
qdf.ODBCTimeout = 0 ' was 10
Set rs = qdf.OpenRecordset(dbOpenForwardOnly)
If rs.EOF Then GoTo No_Data
If (TID = Exchange_All) Then
   sql = "Delete From tblSoTransHeader"
   gDbSo.Execute sql
   Set rsD = gDbSo.OpenRecordset("tblSoTransHeader", dbOpenDynaset,
dbAppendOnly)
   rsD.AddNew
   ts = rs!ts
            
   For Each fld In rsD.Fields
      fld.Value = rs(fld.Name)
   Next
   rsD.Update
   rsD.Close
End If
rs.NextRecordset
If (TID = Exchange_All Or TID = Exchange_Dtl) And Not rs.EOF Then
   sql = "Delete From tblSoTransDetail"


  qrySOTransGet is a sproc that returns multiple recordsets, one for each
table involved in with the order system.

Last, here's a handy routine when your debugging calling sproc's:

Sub GetSPParameters(strSPName As String)

          ' Return the attributes of the parameters of a stored procedure.
          ' From the debug window:
          ' Call GetSPParameters("qrySMGetPeriod")
          '
          Dim strConnect As String
          Dim cnn As ADODB.Connection
          Dim cmd As ADODB.Command
          Dim prm As ADODB.Parameter

10        Set cnn = New ADODB.Connection
20        cnn.Open "DSN=SYS"

30        Set cmd = New ADODB.Command
40        cmd.ActiveConnection = cnn
50        cmd.CommandText = strSPName
60        cmd.CommandType = adCmdStoredProc

70        cmd.Parameters.Refresh
80        For i = 0 To cmd.Parameters.Count - 1
90            Debug.Print "Parameter: " & i
100           Debug.Print "     Name: " & cmd.Parameters(i).Name
110           Debug.Print "     Type: " & cmd.Parameters(i).Type
120           Debug.Print "Direction: " & cmd.Parameters(i).Direction
130           Debug.Print "     Size: " & cmd.Parameters(i).size
140           Debug.Print "   Attrib: " & cmd.Parameters(i).Attributes
150           Debug.Print "    Value: " & cmd.Parameters(i).Value
160           Debug.Print ""
170       Next i

180       cnn.Close
190       Set cnn = Nothing

End Sub

   It's in ADO, but it's a great way to determine all the params and their
attributes.

Jim.
 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of jwcolby
Sent: Friday, August 05, 2011 11:58 PM
To: Access Developers discussion and problem solving
Subject: [AccessD] Stored procedures as Queries

I am using pass through queries where I reference a stored procedure and
pass a param through.  At 
the moment I am having to open the querydef and replace the parameter with
some value, save the sql 
of the querydef and then save the querydef.  Is there any other way to do
this?  It seems crude to 
the max.

-- 
John W. Colby
www.ColbyConsulting.com
-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com




More information about the AccessD mailing list