Problem with the read only clause for read only cursors

From: Tom Goodman <TomGoodman(at)MHProEZ(dot)com>
To: pgsql-odbc(at)postgresql(dot)org
Subject: Problem with the read only clause for read only cursors
Date: 2009-08-18 23:59:12
Message-ID: 4A8B4050.1000709@MHProEZ.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Hi,

I just loaded the 08.04 psqlodbc drivers on a new machine, but ran into
a problem where this version is improperly marking ALL fields in
recordsets as read-only. I presume that this is related to the recent
change that restored the "read only clause for read only cursors".

The final line in the procedure below fails with an ADO error message:
(80040e21) "Multiple-step operation generated errors. Check each status
value."

When comparing psqlodbc 08.04 and 08.03 I see that in 08.03 all of the
fields of the recordset have the adFldUpdatable flag set in each field's
.Attributes. In 08.04 none of the fields have this flag set.

Since this code runs without error when connecting to non-postgresql
databases, I believe that psqlodbc is not properly setting the
adFldUpdatable for the values of CursorLocation, CursorType, and LockType.

Is this a bug? Can it be addressed?

Private Sub Command1_Click()
Dim CS As String
CS = "DRIVER={PostgreSQL ANSI};" _
& "SERVER=theserver;" _
& "PORT=5432;" _
& "DATABASE=mydatabase;" _
& "MaxVarcharSize=16777216;" _
& "MaxLongVarcharSize=16777216;" _
& "BoolsAsChar=0;"

Dim Connection As ADODB.Connection
Set Connection = New Connection
Connection.CursorLocation = adUseClient
Connection.Mode = adModeShareDenyNone
Connection.Open CS, C_UserName, C_Password

'Create a table to insert records into
Connection.Execute "CREATE TEMP TABLE Test (ID INTEGER, Data CHARACTER
VARYING(25))"

Dim RS As ADODB.Recordset
Set RS = New Recordset
RS.CursorLocation = adUseClient
RS.CursorType = adOpenDynamic 'but after the .Open the value will be
adOpenStatic
RS.LockType = adLockBatchOptimistic
RS.Open "SELECT * FROM Test LIMIT 1", Connection

'This next line gives a multi-step operation error in psqlodbc 08.04,
' but succeeds in 08.03.
'It succeeds when using Jet and Access mdb databases, so I believe that
' it is an error to fail here.
RS.AddNew Array("ID", "Data"), Array(1, "Hi mom!")
End Sub

Thanks

P.S. Sorry for the VB6 code here, but that is what the app is built in.
--

Tom Goodman, email TomGoodman(at)FBE-inc(dot)com
<mailto:TomGoodman(at)FBE-inc(dot)com>, web http://fbe-inc.com/
FBE Associates, Inc., 513 N Madison Ave, Suite 101, Bay City, MI
48708-6460, USA
Phone 989 894 2785, Fax 989 894 2805, Toll Free 866 894 2785
* God grant me the serenity to accept the code I cannot change
* the courage to change the code I can change
* and the wisdom to know the difference

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Rainer Bauer 2009-08-19 08:11:02 Re: Savepoints in ODBC driver
Previous Message Richard Broersma 2009-08-18 21:26:49 Re: Savepoints in ODBC driver