Problem with the read only clause for read only cursors - Mailing list pgsql-odbc

From Tom Goodman
Subject Problem with the read only clause for read only cursors
Date
Msg-id 4A8B4050.1000709@MHProEZ.com
Whole thread Raw
Responses Re: Problem with the read only clause for read only cursors  (Hiroshi Inoue <inoue@tpf.co.jp>)
List 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@FBE-inc.com
<mailto:TomGoodman@FBE-inc.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


pgsql-odbc by date:

Previous
From: Mohd Rizal Md Noor
Date:
Subject: Build new table using VB.NET in PostgreSQL
Next
From: Rainer Bauer
Date:
Subject: Re: Savepoints in ODBC driver