[freetds] SELECT @@IDENTITY AS InsertID

Shaun Craig s.craig at andronics.com
Thu Oct 6 11:36:34 EDT 2005


Right i'm trying to get my head round this, i'm doing things slightly 
different in my code, as follows

Query = 'Insert Into Table .......etc Select @@Identity as InsertId'

I break the query string up depending on how many statements are in it, 
so for above i have 2, 1 for insert and 1 for select

for ( x = 0; x < amount of statments + 1; x++ )
{ 
    //first time around it will be the insert which inserts ok
    dbcmd(dbconn, statements[x])
    dbsqlexec(dbconn)
    dbresults(dbconn)

    if we find that the statement is a 'Select @@Identity..etc' we go in 
here, we wont the first time but when we go around the second time we 
will go in.
    {   
        // try bind select to variable
        dbbind(dbconn, 1, INTBIND, (DBINT)0, (BYTE *)& InsertID); //its 
says its binding ok but what its binding i cant be sure!

       if (dbnextrow(dbconn) != NO_MORE_ROWS)
                journey_insert_id = InsertID;
    }
}

So in theory im calling dbresults for each statment, cant think of way 
around this yet!

Thompson, Bill D (London) wrote:

>Hi shaun,
>
>you may need to call dbresults more than once before binding and
>nextrow-ing
>
>you would get a dbresults return for the insert statemnt and then
>another for the select
>
>you can check it with DBROWS as per this bit from the sybase manual:
>
>while ((return_code = dbresults(dbproc)!=NO_MORE_RESULTS)
> { 
>     if ((return_code == SUCCEED) && (DBROWS(dbproc) == SUCCEED)) 
>     { 
>         /* Bind column data to program variables */ 
>         dbbind(dbproc, 1, INTBIND, (DBINT) 0, 
>                (BYTE *) &xvariable); 
>         dbbind(dbproc, 2, STRINGBIND, (DBINT) 0,
>                 yvariable); 
>
>
>       /* Now process each row */ 
>         while (dbnextrow(dbproc) != NO_MORE_ROWS) 
>        { 
>
>
>HTH,
>
>Bill
>
>
>-----Original Message-----
>From: freetds-bounces at lists.ibiblio.org
>[mailto:freetds-bounces at lists.ibiblio.org] On Behalf Of Shaun Craig
>Sent: 06 October 2005 15:50
>To: FreeTDS Development Group
>Subject: [freetds] SELECT @@IDENTITY AS InsertID
>
>
>Hi all,
>
>I've got an insert statement with SELECT @@IDENTITY AS InsertID at the 
>end as I want to know what row the record was inserted into.  I know the
>
>line I use works as i've tested it through tsql and its gives me back 
>the correct row number.  The problem is in my C code i cant get the 
>value passed back to me, this is my code so far.
>
>DBINT InsertID;
>journey_id //global variable of type int
>Query //which contains my insert statement and SELECT @@IDENTITY AS
>InsertID
>
>dbfcmd(dbconn, Query)
>dbsqlexec(dbconn)
>dbresults(dbconn)
>
>//Now i'm trying to bind the returned row number into InsertID
>dbbind(dbconn, 1, INTBIND, (DBINT)0, (BYTE *)& InsertID);
>
>if (dbnextrow(dbconn) != NO_MORE_ROWS)
>{
>    journey_id = InsertID;
>}
>
>Unfortunately my program crashes either at the bind or dbnextrow() as 
>i'm doing something wrong.
>
>Any help would be appreciated as this is holding me back from other 
>stuff, thanks.
>
>Shaun.
>_______________________________________________
>FreeTDS mailing list
>FreeTDS at lists.ibiblio.org
>http://lists.ibiblio.org/mailman/listinfo/freetds
>--------------------------------------------------------
>
>If you are not an intended recipient of this e-mail, please notify the sender, delete it and do not read, act upon, print, disclose, copy, retain or redistribute it. Click here for important additional terms relating to this e-mail.     http://www.ml.com/email_terms/
>--------------------------------------------------------
>_______________________________________________
>FreeTDS mailing list
>FreeTDS at lists.ibiblio.org
>http://lists.ibiblio.org/mailman/listinfo/freetds
>  
>


-- 
Shaun Craig
Andronics Ltd. 
Tel: 02871273118
Web: http://www.andronics.co.uk



More information about the FreeTDS mailing list