Problem getting sequences under 8.02.03.00 driver

Problem getting sequences under 8.02.03.00 driver

am 10.07.2007 01:30:29 von Eric E

Hi all,
I installed the 8.02.03.00 driver during my installation of Postgres
8.2 onto my machine. After installation of that driver, the following
code related to sequences would not work:

Dim cnGetAutoGenID As ADODB.Connection

' Get a local handle to the single ADO connection
Set cnGetAutoGenID = GetPgADOConnection
Dim sSequenceName As String, sGetIDSQL As String

sGetIDSQL = "SELECT nextval('""" & sSequenceName & """'::text) as
seqval;"

Dim rsSeqVal As New ADODB.Recordset

Set rsSeqVal = cnGetAutoGenID.Execute(sGetIDSQL) ' Execute the SQL
With rsSeqVal
' If there are now rows in this recordset, then there was an
' error getting the sequence value
If .BOF Then
GoTo Err_GetAutogenID
Else
GetAutogenID = .Fields("seqval")
End If
End With

Where sSequenceName is holding the name of a sequence in the search_path
visible to the connection. The problem is that the value returned from
the ADODB Recordset is always 0. I can get a sequence perfectly well
using pgAdmin, and logs of statements showed that the driver was in fact
executing the SELECT nextval statement. I can also execute other SELECT
statements just fine using the Connection and Recordset objects. For
some reason, however, sequence values are always returned as 0.

By rolling back to the 8.02.01.00 driver I was able to solve the
problem, but I'm concerned that this bug will keep me from being able to
move forward in versions of Postgres, and keep me from getting other
fixes. Does anyone recognize this problem or know anything about the
nature of it?

Thanks,

Eric

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Re: Problem getting sequences under 8.02.03.00 driver

am 10.07.2007 15:00:44 von Andreas

Eric E schrieb:
> Hi all,
> I installed the 8.02.03.00 driver during my installation of
> Postgres 8.2 onto my machine. After installation of that driver, the
> following code related to sequences would not work:
[...]
> Where sSequenceName is holding the name of a sequence in the
> search_path visible to the connection. The problem is that the value
> returned from the ADODB Recordset is always 0. I can get a sequence
> perfectly well using pgAdmin, and logs of statements showed that the
> driver was in fact executing the SELECT nextval statement. I can also
> execute other SELECT statements just fine using the Connection and
> Recordset objects. For some reason, however, sequence values are
> always returned as 0.

Maybe it's because you define the resulting type as text?

I've installed latest ODBC V8.0.2.04.01 and there a similar query works.

Dim objRstADO As ADODB.Recordset

Set objRstADO = objConnADO.Execute("SELECT nextval('" &
strSequenceName & "')", , adLockReadOnly)
debug.print Nz(objRstADO(0), 0)


Is the Login-role in the connectionstring the same as you use in pgAdmin?
Perhaps - ok, not very likely - is your ADO connection just not allowed
to see the sequence.
Depending on your function's error handler there could be a hidden error
condition and the function delivers the default value for numeric types = 0.

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Re: Problem getting sequences under 8.02.03.00 driver

am 10.07.2007 23:58:54 von Eric E

Andreas wrote:

Many thanks for the reply and the suggestions, Andreas.

> Maybe it's because you define the resulting type as text?

I double-checked and the cast to text is inside the function call, so
the result should be coming back as an integer. Also, the field in the
recordset is set up as an integer.

> I've installed latest ODBC V8.0.2.04.01 and there a similar query works.
>
> Dim objRstADO As ADODB.Recordset
>
> Set objRstADO = objConnADO.Execute("SELECT nextval('" &
> strSequenceName & "')", , adLockReadOnly)
> debug.print Nz(objRstADO(0), 0)
I guess I'll try 8.02.04.01
>
> Is the Login-role in the connectionstring the same as you use in pgAdmin?
> Perhaps - ok, not very likely - is your ADO connection just not allowed
> to see the sequence.
I thought it might be something like that.
> Depending on your function's error handler there could be a hidden error
> condition and the function delivers the default value for numeric types
> = 0.
>
Possible, though it seems like there's no error being returned by the
ADODB connection - I'll check that, too.

Thanks again,

EE

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings