RE: [SQL] ODBC SQL question
От | Michael J Davis |
---|---|
Тема | RE: [SQL] ODBC SQL question |
Дата | |
Msg-id | 93C04F1F5173D211A27900105AA8FCFC298FC3@lambic.prevuenet.com обсуждение исходный текст |
Список | 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@sferacarta.com]Sent: Tuesday, June 22, 1999 12:38 AMTo: Hostmaster- Internet au Virtuel Inc.Cc: pgsql-sqlSubject: 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; endif; 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 sitesWHERE 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'
В списке pgsql-sql по дате отправления: