Re: ADO Addnew and identity columns

From: Hans <forbrich_at_gmail.com>
Date: 6 Oct 2004 13:02:57 -0700
Message-ID: <bd0e88c6.0410061202.250cb86b_at_posting.google.com>


"Jan van Veldhuizen" <jan_at_van-veldhuizen.nl> wrote in message news:<4163d817$0$78279$e4fe514c_at_news.xs4all.nl>...
> I have an application which is running fine with MS SqlServer, but it should
> be working with Oracle as weel.
> At a lot of places we rely upon the ADO Recordset to return incremented
> identity columns.
> Oralce however returns null or zero.
> How can this be fixed easily?
>
>
> Dim mConn As New ADODB.Connection
> Dim rs As New ADODB.Recordset
>
> mConn.ConnectionString = "Provider=OraOLEDB.Oracle;User
> ID=user;Password=pwd;Data Source=dbname;"
> mConn.Open
>
> rs.Open "select * from testidentity where id < -1", mConn,
> adOpenForwardOnly, adLockPessimistic
> rs.AddNew "name", "peter"
> rs.Update
> MsgBox rs("id")
>
> mConn.Close

It can not easily be fixed - identity is not a SQL standard. It is a MS SQLServer peculiarity and you will need to 'port' to get this to work right.

The closest you come to a quick solution is to use Oracle's 'sequences' which serve a similar purpose (handing out unique numbers serially) but are implemented quite differently. A sequence is accessed as part of a SQL statement, generally as part of the select list, using either CURR_VAL or NEXT_VAL 'methods'.

Decent discussion around this is available in Thomas Kyte's "Expert One on One Oracle" book.

HTH
/Hans

BTW: newsgroup comp.databases.oracle is officially defunct and fewer ISPs are carrying it. The replacement is the heirarchy 'comp.databases.oracle.*' as discussed at http://orafaq.com Received on Wed Oct 06 2004 - 22:02:57 CEST

Original text of this message