Arthur Fuller
artful at rogers.com
Mon Feb 3 11:11:00 CST 2003
Arthur's task list for porting such code to sprocs: 1. Identify each recordset and create a corresponding view or UDF that returns the identical result set. 2. Create one or more SELECT statements that join these views|UDFs the way you need them joined. now you have some reusable components. 3. Combine these reusable components in a SELECT statement that gives you all the rows you need and only those rows. Save this to a new view or UDF. 4. Consider passing parameters that are defaulted. The way you've written the code, you walk the entire outermost table (tblClaims) without investigating whether or not there exist child rows. In a stored procedure, you can specify a parameter and give it a default value -- then react to its value within your sproc code. For example, your sproc might accept a parameter @ClaimNo whose default is zero; in the event that @ClaimNo = 0, process all Claims; else process only the specified ClaimNo. This will result in dramatically faster execution in most situations. 5. To make all this work from an ADP, you will need to investigate command and parameter objects. This stuff is not difficult, but if you need some help I will supply some sample code. At the end of the day, you're updating a few rows in one table. When you move from recordset code to resultset code, the first thing you should kiss goodbye is the notion of a row. (I realize that is a very general statement, but its exceptions are few and typically reflect a bad database design rather than a need to sharpen set code to row code.) Just my $.02. A. ----- Original Message ----- From: Mark Boyd To: AccessD at databaseadvisors.com Sent: Monday, February 03, 2003 9:39 AM Subject: [AccessD] Creating a stored procedure Cross-posted to SQLServer list. Let me start out by stating that I am totally novice to creating stored procedures. I hope someone can help me to create my first stored proc. I have the VBA code complete, but am having trouble converting to the proc. The code is below: Set rst = db.OpenRecordset("SELECT * FROM tblClaim ORDER BY ClaimNo", dbOpenDynaset, dbSeeChanges) rst.MoveFirst Do Until rst.EOF = True Me.txtStatus = "Processing record " & rst!PatientNo Me.Repaint curPaidAmt = 0 curCharge = 0 intClaimNo = rst!ClaimNo intReferral = Nz(rst!Referral) strProvNo = rst!ProvNo Set rstPrint = db.OpenRecordset("SELECT * FROM tblPrintCharges WHERE ClaimNo = " & intClaimNo & "") If rstPrint.EOF = False Then rstPrint.MoveFirst Do Until rstPrint.EOF = True rst.Edit rst!PaidAmt = Nz(rst!PaidAmt) + Nz(rstPrint!PaidAmt) curPaidAmt = Nz(curPaidAmt) + Nz(rstPrint!PaidAmt) rst!TotalClaimAmt = Nz(rst!TotalClaimAmt) + Nz(rstPrint!Charge) curCharge = Nz(curCharge) + Nz(rstPrint!Charge) rst.Update rstPrint.MoveNext Loop End If Set rstPhy = db.OpenRecordset("SELECT * FROM tblCodPhy WHERE Referral = " & intReferral & " AND ProvNo = '" & strProvNo & "'") If rstPhy.EOF = False Then rstPhy.MoveFirst Do Until rstPhy.EOF = True rstPhy.Edit rstPhy!ClaimPaid = "CP" rstPhy!ClaimPaidDate = Int(Now()) rstPhy!ClaimPaidAmt = Nz(rstPhy!ClaimPaidAmt) + Nz(curPaidAmt) rstPhy!ClaimChargeAmt = Nz(rstPhy!ClaimChargeAmt) + Nz(curCharge) rstPhy.Update rstPhy.MoveNext Loop End If curPaidAmt = 0 curCharge = 0 curTotalCharges = 0 'Get total claim charge amounts per referral Set rstPhy = db.OpenRecordset("SELECT * FROM tblCodPhy WHERE Referral = " & intReferral & "") If rstPhy.EOF = False Then rstPhy.MoveFirst Do Until rstPhy.EOF = True curTotalCharges = Nz(curTotalCharges) + Nz(rstPhy!ClaimChargeAmt) rstPhy.MoveNext Loop End If DoCmd.RunSQL ("UPDATE tblCod SET CaseCost = UBTotal + " & curTotalCharges & " WHERE Referral = " & intReferral & "") rst.MoveNext Loop I'm not exactly sure which sections to include in the proc. Should I include the whole thing? How do I create a Do Loop in the proc? Any help/direction is greatly appreciated. Thanks, Mark Boyd Sr. Systems Analyst McBee Associates, Inc -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://databaseadvisors.com/pipermail/accessd/attachments/20030203/7895c0e5/attachment-0002.html>