Re: ODBC Open cursors on views - Mailing list pgsql-odbc

From Shachar Shemesh
Subject Re: ODBC Open cursors on views
Date
Msg-id 1061378746.3f435aba85fdb@latenight.fiasco.org.il
Whole thread Raw
In response to Re: ODBC Open cursors on views  (Shachar Shemesh <psql@shemesh.biz>)
Responses Re: ODBC Open cursors on views
List pgsql-odbc
Quoting Shachar Shemesh <psql@shemesh.biz>:

> Quoting Hiroshi Inoue <Inoue@tpf.co.jp>:
>
> >
> >
> > Shachar Shemesh wrote:
> >
> > [snip]
> >
> > > If more than one table participates in the view, who's CTID do I
> need
> > to get? Is
> > > it enough to take one of the tables at random?
> >
> Hi,
>
> You said that static readonly cursors worked for you. I'm trying the
> following
> code, without success:
>     UpdateData(TRUE);
>     CString sql="select * from \"ACCOUNTLEDGER\"";
>
>     try {
>         if( m_crs==NULL ) {
>             m_db.OpenEx(NULL);
>             m_crs=new CRecordset( &m_db );
>         }
>
>         m_crs->Open(CRecordset::snapshot, sql, CRecordset::readOnly );
>         RefreshData();
>     } catch( CDBException *cdbexcept )
>     {
>         MessageBox( cdbexcept->m_strError, "SQL error", MB_ICONEXCLAMATION );
>     }
>
> I get the same error (attribute "ctid" not found).
>
> Am I doing something wrong?
>
>             Shachar
I found the source of the problem.

I'm using the CVS version. options.c, line 73, has the following:
            else if (ci->updatable_cursors)
                setval = SQL_CONCUR_ROWVER;
In other words, if updateable cursors are at all available, they will override
whatever I choose to use for concurrency settings.

Commenting out these two lines solve the problem for me. I can also disable
"Updateable cursors" in the ODBC settings, but that would mean that no cursor on
the database can be updateable at all, and that's not acceptable.

             Shachar

pgsql-odbc by date:

Previous
From: Andre Felipe Machado
Date:
Subject: Re: large objects and pg 7.3.x
Next
From: "Hiroshi Inoue"
Date:
Subject: Re: ODBC Open cursors on views