[dba-SQLServer]Replacement for DLookup with 2 parameters

Arthur Fuller artful at rogers.com
Tue Mar 4 17:25:58 CST 2003


Since we're into variety (i.e. the plural of spouse is... spice), you could
also create a scalar UDF that returns said value.

-----Original Message-----
From: dba-sqlserver-admin at databaseadvisors.com
[mailto:dba-sqlserver-admin at databaseadvisors.com] On Behalf Of Francisco H
Tapia
Sent: March 4, 2003 2:47 PM
To: dba-sqlserver at databaseadvisors.com
Subject: Re: [dba-SQLServer]Replacement for DLookup with 2 parameters

This is true, though I've never time-ed it to find out my performance
gains... The great thing is that there is more than one way to skin a
'sproc' ;o)

-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 11:30 AM
Subject: RE: [dba-SQLServer]Replacement for DLookup with 2 parameters


: 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
:
:
: _______________________________________________
: dba-SQLServer mailing list
: dba-SQLServer at databaseadvisors.com
: http://databaseadvisors.com/mailman/listinfo/dba-sqlserver
: http://www.databaseadvisors.com
:


_______________________________________________
dba-SQLServer mailing list
dba-SQLServer at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/dba-sqlserver
http://www.databaseadvisors.com




More information about the dba-SQLServer mailing list