From: | Michael J Davis <michael(dot)j(dot)davis(at)tvguide(dot)com> |
---|---|
To: | 'José Soares' <jose(at)sferacarta(dot)com>, "Hostmaster - Internet au Virtuel Inc(dot)" <hostmaster(at)virtuel(dot)qc(dot)ca> |
Cc: | pgsql-sql <pgsql-sql(at)postgreSQL(dot)org> |
Subject: | RE: [SQL] ODBC SQL question |
Date: | 1999-06-22 15:29:17 |
Message-ID: | 93C04F1F5173D211A27900105AA8FCFC298FC3@lambic.prevuenet.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
I choose to define all booleans in Access97 as int2 in PostgreSQL. This
eliminated the problem with any code or SQL changes.
-----Original Message-----
From: José Soares [SMTP:jose(at)sferacarta(dot)com]
Sent: Tuesday, June 22, 1999 12:38 AM
To: Hostmaster - Internet au Virtuel Inc.
Cc: pgsql-sql
Subject: Re: [SQL] ODBC SQL question
The M$Access boolean value is an integer (0 or -1);
FALSE=0
TRUE=-1
while the PostgreSQL boolean is a string;
TRUE= 'true','t','1','y','yes'
FALSE='false','f','0','n','no'
You have to create an = operator for bool and int4 for compatibility
with M$Access.
This PL/pgsql script creates all what you need:
--this function returns every zero value as FALSE otherwise as
TRUE--
create function AccessBool(bool,int4) returns bool as '
begin
if $1 is NULL then
return NULL;
end if;
if $1 is TRUE then
if $2 <> 0 then
return TRUE;
end if;
else
if $2 = 0 then
return TRUE;
end if;
end if;
return FALSE;
end;
' language 'plpgsql';
create operator = (
leftarg=bool,
rightarg=int4,
procedure=AccessBool,
commutator='=',
negator='!=',
restrict=eqsel,
join=eqjoinsel
);
"Hostmaster - Internet au Virtuel Inc." ha scritto:
Hi
I'm running PostgreSQL v6.4.2 on Red Hat Linux 6.0. I use it
on a Windows NT
server 4.0 with service pack 5 through ODBC calls; the ODBC
driver is the
one from Insight Distributions System, v6.40.00.06.
Usually everything is fine. My datasource works, as I can
link tables from
MS Access 97 without problems.
Here is what I don't understand:
Query1: SELECT * FROM sites WHERE free = FALSE;
Query2: SELECT * FROM sites WHERE free IS FALSE;
When I run them within psql, both queries output the
requested rows.
Through the ODBC driver, query1 complains that "ERROR: There
is more one
possible operator '=' for types 'bool' and 'int4' You will
have to retype
this query using an explicit cast (#1)
query2 complains for "Invalid use of Is operator in query
expression 'free
IS FALSE'"
I tried fiddling with the ODBC driver parameters, to no
avail. What do I do
wrong? I ran the queries with MS Access 97 and also with
pgAdmin 6.4.3 beta,
they both return the same errors. Anybody could help me?
Here is the table definition:
+---------------------+--------------+-------+
| Field | Type | Length|
+---------------------+--------------+-------+
| site_id | int4 | 4 |
| name | varchar() | 50 |
| ip | varchar() | 15 |
| parent | int4 | 4 |
| type | int4 | 4 |
| owner | int4 | 4 |
| admin | int4 | 4 |
| creation_date | datetime | 8 |
| non_profit | bool | 1 |
| free | bool | 1 |
| reg_fee | bool | 1 |
| bill_period | int2 | 2 |
| bill_date | datetime | 8 |
| bill_paid | bool | 1 |
| paid_until | datetime | 8 |
| size | int4 | 4 |
| peek | int4 | 4 |
| list_personal | bool | 1 |
| list_organisation | bool | 1 |
| list_business | bool | 1 |
| title_fr | varchar() | 75 |
| title_en | varchar() | 50 |
| description_fr | varchar() | 254 |
| description_en | varchar() | 254 |
| free2 | bool | 1 |
+---------------------+--------------+-------+
Accept my apologies if I'm not in the right place to ask
this. If this is
the case, please tell me where I should direct my question.
Thanks,
Nicolas Cadou
______________________________________________________________
PostgreSQL 6.5.0 on i586-pc-linux-gnu, compiled by gcc 2.7.2.3
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Jose'
From | Date | Subject | |
---|---|---|---|
Next Message | Herouth Maoz | 1999-06-22 15:47:20 | Re: [SQL] Trouble with massive select statement. |
Previous Message | Tom Lane | 1999-06-22 15:25:10 | Re: [SQL] Trouble with massive select statement. |