Results 1 to 4 of 4

Thread: @@IDENTITY

  1. #1

    Thread Starter
    New Member
    Join Date
    Jun 2000
    Posts
    4
    How can I pass the @@IDENTITY in my SQL statement into a VB 6.0 variable in my ActiveX.DLL component?

  2. #2
    Hyperactive Member
    Join Date
    Nov 1999
    Location
    Leavenworth KS USA
    Posts
    482

  3. #3
    Guru Clunietp's Avatar
    Join Date
    Oct 1999
    Location
    USA
    Posts
    1,844
    from SQL 7 Books online. The key is creating an ADO command object and creating a return parameter.

    Using Return Code and Output Parameters for Stored Procedures
    Stored procedures can contain input parameters, output parameters, and return values.

    Specify input parameters, output parameters, and return values for a stored procedure through the Parameter object. In the case of output parameters and return values, the values are not returned until the data of the Recordset object has been completely fetched or the Recordset has been closed.

    The following stored procedure contains one input parameter, one output parameter, and a return parameter. The procedure selects those rows in the titles table of the pubs database where the royalty percent paid to the author is greater than the amount entered by the user (the input parameter). The program returns the number of rows as the output variable. If any rows are returned by the program, a return code of 0 is issued; if no rows are returned, a return code of 99 is returned.

    USE pubs

    GO

    CREATE PROCEDURE myProc

    @outparm int OUTPUT

    @inparm int

    AS

    SELECT * FROM titles WHERE royalty > @inparm

    SELECT @outparm = COUNT (*) FROM TITLES WHERE royalty > @inparm

    IF (@outparm > 0)

    RETURN 0

    ELSE

    RETURN 99

    GO



    An ADO code program that executes the stored procedure myProc is shown here.

    Dim cn As New ADODB.Connection

    Dim cmd As New ADODB.Command

    Dim rs As New ADODB.Recordset

    Dim fldloop As ADODB.Field

    Dim param1 As Parameter, param2 As Parameter, param3 As Parameter

    Dim provStr As String

    Dim royalty As Variant



    Private Sub spStart()



    ' Connect using the SQLOLEDB provider.

    cn.Provider = "sqloledb"



    ' Specify connection string on Open method.

    provStr = "Server=MyServer;Database=pubs;Trusted_Connection=yes"

    cn.Open provStr



    ' Set up a command object for the stored procedure.

    Set cmd.ActiveConnection = cn

    cmd.CommandText = "myProc"

    cmd.CommandType = adCmdStoredProc



    ' Set up a return parameter.

    Set param1 = cmd.CreateParameter("Return", adInteger, adParamReturnValue)

    cmd.Parameters.Append param1



    ' Set up an output parameter.

    Set param2 = cmd.CreateParameter("Output", adInteger, adParamOutput)

    cmd.Parameters.Append param2



    ' Set up an input parameter.

    Set param3 = cmd.CreateParameter("Input", adInteger, adParamInput)

    cmd.Parameters.Append param3

    royalty = Trim(InputBox("Enter royalty:"))

    param3.Value = royalty



    ' Execute command, and loop through recordset, printing out rows.

    Set rs = cmd.Execute



    Dim i As Integer

    While Not rs.EOF

    For Each fldloop In rs.Fields

    Debug.Print rs.Fields(i)

    i = i + 1

    Next fldloop

    Debug.Print ""

    i = 0

    rs.MoveNext

    Wend



    ' Need to close recordset before getting return

    ' and output parameters.

    rs.Close



    Debug.Print "Program ended with return code: " & Cmd(0)

    Debug.Print "Total rows satisfying condition: " & Cmd(1)

    cn.Close



    End Sub



    Three parameters are needed for the myProc stored procedure:

    A return parameter to hold the return value (0 or 99).
    The return parameter is created as a return type of parameter adParamReturnValue, and the data type is adInteger for integer. Because the return parameter is the first parameter added to the collection, its index value is zero, and it can be dereferenced through that index (for example, as Cmd(0)).

    An output parameter to hold the value of the count of the number of returned rows.
    The output parameter is created as adParamOuput for the output parameter type, and the data type is adInteger for integer. Because the output parameter is the second parameter added to the collection, its index value is one, and it can be dereferenced through that index (for example, as Cmd(1)).

    An input parameter, which holds the value of the user-supplied percent royalty number.
    The input parameter is created as adParamInput for the input parameter type, and the data type is adInteger for integer.

    Because the data type of the three stored procedure parameters is integer, there is no need to specify the data length as a parameter when defining them with the CreateParameter method.

    After each parameter is added to the Parameters collection, executing the query string creates a recordset. After the recordset is closed, the values for the return code and output parameters are available.


  4. #4

    Thread Starter
    New Member
    Join Date
    Jun 2000
    Posts
    4

    Another way to do it.

    Thanks for all the help. I figured out another way to get the equivalent of the @@IDENTITY value back. In this example I'm trying to get the ProductID back from a new product record which has been inserted:

    Dim vResponse as New Collection

    Set oRs = oObjectContext.CreateInstance("ADODB.Recordset")

    oRs.Open "products", vDbConn(my database connection), adOpenKeyset, adLockPessimistic, adCmdTable
    oRs.AddNew
    oRs.Fields("Name") = Trim(vProductData("name"))
    oRs.Fields("Tagline") = Trim(vProductData("tagline"))
    oRs.Fields(etc...)
    oRs.Update

    'Now I call the ProductID of the newly created record and add it to the response collection
    vResponse.Add Trim(oRs.Fields("ProductID")), "productid"

    oRs.Close

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width