jwcolby
jwcolby at colbyconsulting.com
Sat Aug 6 09:08:56 CDT 2011
Thanks Jim. I am looking now at forms bound to ADO recordsets. I will figure out the other uses for the ADO recordset. Every time I go back to this the process gets easier. John W. Colby www.ColbyConsulting.com On 8/6/2011 8:11 AM, Jim Dettman wrote: > 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. >