Mike and Doris Manning
mikedorism at ntelos.net
Tue Mar 4 13:30:09 CST 2003
Right. I've found it faster to use Output Parameters with a sproc instead of having to open a recordset. Doris Manning Database Administrator Hargrove Inc. www.hargroveinc.com -----Original Message----- From: dba-sqlserver-admin at databaseadvisors.com [mailto:dba-sqlserver-admin at databaseadvisors.com] On Behalf Of Francisco H Tapia Sent: Tuesday, March 04, 2003 12:52 PM To: dba-sqlserver at databaseadvisors.com Subject: Re: [dba-SQLServer]Replacement for DLookup with 2 parameters So maybe something like this? Dim oCmd As ADODB.Command Dim lRecordsAffected As Long ' Create and Open a new Connection Set oConn = New ADODB.Connection Set oConn = CurrentProject.Connection ' Create a new Command Set oCmd = New ADODB.Command With oCmd .CommandType = adCmdStoredProc .CommandText = "stp_AmountDue " Set .ActiveConnection = oConn ' Create the Command's Parameters and set their values .Parameters.Append .CreateParameter("RETURN_VALUE", _ adInteger, adParamReturnValue, 0) .Parameters.Append .CreateParameter("AmountDue", _ adCurrency, adParameterOutput, , NULL) .Parameters.Append .CreateParameter("CustIdNo", _ adInteger, adParamInput, , CustIdNo) .Parameters.Append .CreateParameter("InvNumber", _ adInteger, adParamInput, , InvNumber -1) ' Run the command .Execute lRecordsAffected, , adExecuteNoRecords ' Do not return recordset ' Print new identity value Debug.Print .Parameters("AmountDue").Value ' New Identity End With CREATE Procedure stp_AmountDue (@AmountDue as Currency, @CustIDno as int, @InvNumber as Int) AS SELECT @AmountDue = CurrentMth FROM tblCustStatement WHERE CustNoId = @CustNoId AND InvNumber = @InvNumber ---------END -Francisco http://rcm.netfirms.com ----- Original Message ----- From: "Mike and Doris Manning" <mikedorism at ntelos.net> To: <dba-sqlserver at databaseadvisors.com> Sent: Tuesday, March 04, 2003 5:16 AM Subject: RE: [dba-SQLServer]Replacement for DLookup with 2 parameters : Actually he doesn't need to use a recordset at all. He could create a sproc : that returns "CurrentMth" as an Output Parameter. If there is no matching : record, then the return value is NULL and he can use NZ function to convert : it to 0. : : Doris Manning : Database Administrator : Hargrove Inc. : www.hargroveinc.com : : : -----Original Message----- : From: dba-sqlserver-admin at databaseadvisors.com : [mailto:dba-sqlserver-admin at databaseadvisors.com] On Behalf Of Francisco : Tapia : Sent: Tuesday, March 04, 2003 02:41 AM : To: dba-sqlserver at databaseadvisors.com : Subject: Re: [dba-SQLServer]Replacement for DLookup with 2 parameters : : : Think sprocs, David.... : So your Function would be more along the lines of.. : : Public Function cbfAmtDue() as Currency : Dim rst ADODB.Recordset : Set rst = New ADODB.Recordset : : Currentproject.Connection.stp_AmountDue CustIDNo, InvNumber - 1, rst : : if rst.eof = true then : cbfAmtDue = Null 'Or 0 : else : cbfAmtDue = rst!CurrentMth : end if : '--------END : Now in a sproc on your SQL Server you'd add the following sproc... : : ---------- : Create Procedure stp_AmountDue (@CustIDno as int, @InvNumber as Int) AS : SELECT CurrentMth From tblCustStatement Where CustNoId = @CustNoId AND : InvNumber = @InvNumber ---------END : : this is all OTOMH, so please check your syntax... : -Francisco : http://rcm.netfirms.com/ : ----- Original Message ----- : From: "David Emerson" <davide at dalyn.co.nz> : To: <dba-SQLServer at databaseadvisors.com> : Sent: Monday, March 03, 2003 8:14 PM : Subject: [dba-SQLServer]Replacement for DLookup with 2 parameters : : : : What I am looking for here is some confirmation I am doing the right : thing. : : : : In A97 I had a simple statement to return a single value if the : : corresponding record existed (this was in the Control Source of a field - : : : : =IIf(Not : : IsNull([CustIDNo]),nz(DLookUp("Current","tblCustStatement","CustIDNo = " & : : [CustIDNo] & " and StatementNumber = " & [InvNumber]-1),0)) : : : : Now in my ADP I am using the following (and setting the field control : : source to '=cbfAmtDue()') - : : : : Public Function cbfAmtDue() As Currency : : : : Dim cnn As ADODB.Connection, rst As ADODB.Recordset : : : : Set cnn = CurrentProject.Connection : : Set rst = New ADODB.Recordset : : rst.Open "tblCustStatement", cnn, adOpenDynamic, adLockOptimistic : : : : cbfAmtDue = 0 : : If Not IsNull([CustIDNo]) Then : : rst.Filter = "CustIDNo = " & Me!CustIDNo & " and StatementNumber : = : : " & DLookup("InvNumber", "tblCustomers", "CustomerID = " & Me!txtCustID) - : 1 : : If rst.EOF <> True Then 'Statement record exists : : cbfAmtDue = rst!CurrentMth : : End If : : End If : : : : rst.Close : : Set rst = Nothing : : cnn.Close : : Set cnn = Nothing : : : : It seems a long way about it but is there any simpler way? : : : : : : Regards : : : : David Emerson _______________________________________________ dba-SQLServer mailing list dba-SQLServer at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-sqlserver http://www.databaseadvisors.com