Thread: Either I broke PostgreSQL or I found an ODBC bug

Either I broke PostgreSQL or I found an ODBC bug

From
Richard Broersma Jr
Date:
I am using the ODBC provider [8.02.05.0000] to connect my postgresql database [8.2.5] with my MS ACCESS XP front-end.

This is what I am seeing:  When I issue a select statement from with-in ms-access, the Boolean field that contain null
valuesare returning as false( as 0 in the datasheet view).  My expectation is that null Boolean values display as null
ratherthan false.  When I issue the same query with-in psql the null boolean values correctly display as NULL. 

A while back I applied the following directions to  MS-Access' [yes/no] type to create a better mapping with
PostgreSQL'sBoolean type.  I don't know if these direction are redundant to what is already provided in the ODBC
provider. Perhaps the operator that I've created is causing the problem I am seeing. 
http://archives.postgresql.org/pgsql-odbc/2006-09/msg00103.php


FROM MS-Access:
SELECT did, chktagdesc
 WHERE did = 13601 AND chktagdesc IS NULL;
did     |chktagdesc
--------+-----------
13601   |     0

FROM psql
proj02u20411=> select did, chktagdesc from docs.lfworkscope where did = 13601 and chktagdesc is null;
  did  | chktagdesc
-------+------------
 13601 |
(1 row)

Can anyone where find where this problem is coming from?

Regards, Richard Broersma Jr.

Re: Either I broke PostgreSQL or I found an ODBC bug

From
Hiroshi Inoue
Date:
Richard Broersma Jr wrote:
> I am using the ODBC provider [8.02.05.0000] to connect my postgresql database [8.2.5] with my MS ACCESS XP front-end.
>
> This is what I am seeing:  When I issue a select statement from with-in ms-access, the Boolean field that contain
nullvalues are returning as false( as 0 in the datasheet view).  My expectation is that null Boolean values display as
nullrather than false.  When I issue the same query with-in psql the null boolean values correctly display as NULL. 
>
> A while back I applied the following directions to  MS-Access' [yes/no] type to create a better mapping with
PostgreSQL'sBoolean type.  I don't know if these direction are redundant to what is already provided in the ODBC
provider. Perhaps the operator that I've created is causing the problem I am seeing. 
> http://archives.postgresql.org/pgsql-odbc/2006-09/msg00103.php

Using inttobool(int, bool) defined in the above URL, I see the
  following.

xxxxx=> select inttobool(NULL, true);
  inttobool
-----------
  f
(1 row)

xxxxx=> select inttobool(NULL, false);
  inttobool
-----------
  f
(1 row)

Is it what you expected ?

regards,
Hiroshi Inoue


Re: Either I broke PostgreSQL or I found an ODBC bug

From
Richard Broersma Jr
Date:
--- On Mon, 11/5/07, Hiroshi Inoue <inoue@tpf.co.jp> wrote:

> Using inttobool(int, bool) defined in the above URL, I see
> the
>   following.
>
> xxxxx=> select inttobool(NULL, true);
>   inttobool
> -----------
>   f
> (1 row)
>
> xxxxx=> select inttobool(NULL, false);
>   inttobool
> -----------
>   f
> (1 row)
>
> Is it what you expected ?

No, I guess I did break Postgres with the inttobool function. :-(

I was expecting a null boolean to return a null and not return a false.  I guess my next question would be, how do I go
aboutextracting or fix the inttobool() function in postgres? 


Ms-access can't update any of these records that have fields that incorrectly appear to be false when the contents are
actuallyboolean null's, since Access includes these fields in the as part of the update statement's where condition
thatis sent to postgresql.  When this happens PostgreSQL notifies MS-access that zero records where updated and the
transactionis rolled back.  i.e. update ... where chkfield = '0' -- when chkfield is acutally null. 

Thanks for the help!
Regards, Richard Broersma Jr.

Re: Either I broke PostgreSQL or I found an ODBC bug

From
Richard Broersma Jr
Date:
--- On Mon, 11/5/07, Richard Broersma Jr <rabroersma@yahoo.com> wrote:

> No, I guess I did break Postgres with the inttobool
> function. :-(

On closer inspection, Crystal reports, using the ODBC provider produces the expected results with using boolean.  The
problemonly occurs in ms-access, so I guess that it is a MS-Access bug. 

Regards,
Richard Broersma Jr.

Re: Either I broke PostgreSQL or I found an ODBC bug

From
Hiroshi Inoue
Date:
Richard Broersma Jr wrote:
> --- On Mon, 11/5/07, Richard Broersma Jr <rabroersma@yahoo.com> wrote:
>
>> No, I guess I did break Postgres with the inttobool
>> function. :-(
>
> On closer inspection, Crystal reports, using the ODBC provider produces the expected results with using boolean.
 > The problem only occurs in ms-access, so I guess that it is a
MS-Access bug.

Hmm I found the following at http://allenbrowne.com/xbase-05.html .

    Unfortunately, Access 95 onwards do not permit Null values in
    Yes/No fields.

regards,
Hiroshi Inoue


Re: Either I broke PostgreSQL or I found an ODBC bug

From
Richard Broersma Jr
Date:
--- On Tue, 11/6/07, Hiroshi Inoue <inoue@tpf.co.jp> wrote:

>     Unfortunately, Access 95 onwards do not permit Null values in
>     Yes/No fields.

That explains why I was see FALSE instead of NULL.  As a work around, I've altered all of the boolean fields to be NOT
NULLwith a DEFAULT value as FALSE.  Now MS-access is able to update these records without complaining. 

Thanks!
Regards,
Richard Broersma Jr.