PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Valeurs Booléennes entre MS-Access et PostgreSQL 8 : solution

Technique - odbc | Valeurs Booléennes entre MS-Access et PostgreSQL 8 : solution

Par lucrol le 12/07/2005 - 17:51

Par une belle fin d'après midi, lucrol s'exprima ainsi dans les forums de notre site :

Bonjour !

Gràce à Microsoft je viens de vivre un enfer avec MS-Access (2002) utilisé en frontal de PostgreSQL 8.0 : malgré toutes les configurations de la source de données ODBC il m'était impossible d'avoir une gestion cohérente des cases à cocher dans Access :erreurs à la mise à jour du record, où lorsque cela fonctionnait, les Query avec des critères logiques ne fonctionnaient plus !

Le problème est assez simple à cerner le format des booléens est très différent entre Access et PostgreSQL :

  • PostgreSQL utilise :
    TRUE, 't', 'true', 'y', 'yes', '1' pour Vrai,
    FALSE, 'f', 'false', 'n', 'no', '0' pour Faux,
    NULL pour Inconnu (triple état).

  • Access utilise :
    True, -1 pour Vrai,
    False, 0 pour Faux,
    NULL pour Inconnu (Le triple état peut être désactivé)

On obtient donc un conflit lorsque ODBC tente de mettre une valeur entière dans un champ texte.

A force de recherche sur le Net j'ai trouvé une solution à cet URL :

http://docman.sourceforge.net/home_html/projects/sql/access_fix.sql

Il suffit donc de :

  • Charger le langage procedural PLPGSQL dans la base si ce n'est pas déjà fait,
  • Créer les 2 fonctions : MsAccessBool1 & MsAccessBool2
  • Créer les 2 opérateurs: = (bool, int4) & = (int4, bool)
    dans la base PostgreSQL concernée, comme indiqué dans le document sus-indiqué.

  • Stopper puis redémarrer le serveur PostgreSQL
  • Détacher toutes les tables liées à la base PostgreSQL dans MS-Access,
  • Refaire la liaison ODBC des tables PostgreSQl dans MS-Access.*

A partir de ce moment toutes les fonctions Booléennes de MS-Access sont compatibles avec PostgreSQL !

Une meilleure documentation de ce genre de problème permettrait de gagner de nombreuses heures de recherches stériles !

Salutations amicales.

NdM: PostgreSQL est un projet Open Source, la documentation est faite par des bénévoles, qui tout comme vous, écrivent des articles. Si la documentation ne couvre pas tout, il ne tient qu'à vous de la compléter. Et c'est justement ce que vous venez de faire ! Cependant la documentation de PostgreSQL ne peut pas contenir ce genre d'astuces techniques, car, il y en aurait des centaines (songez qu'Access n'est qu'un client potentiel de PostgreSQL).

Cependant, PostgreSQLFr.org est là pour ça : Votre post initial dans les forums de PostgreSQLFr.org est donc passé en article en page principale, après un petit coup de peinture HTML, où j'espère qu'il sera plus visible. Sans le savoir donc, vous venez de contribuer au projet PostgreSQL. Merci beaucoup lucrol !

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

le problème peut être plus complexe

jmreymond/ = 16 Juillet, 2005 - 21:09

c'est bizarre car j'étais tombé sur le problème en Septembre et je pensais avoir documenté la solution.
De fait, il faut prévoir le cas où dans la base Postgres, on a une valeur null
Pour ma part, Access ne semblait pas gérer le triple état et donc récupérait une valeur venant de Postgres comme null, la modifiait et fait une requete du style:
insert into matable (boule) values (true) where boule=false;
Comme dans Postgres, la valeur de boule était null et pas false d'où erreur dans la requête ODBC
la requête un peu spéciale produite par Access est pour vérifier qu'il n'y a pas eu une maj pendant qu'on modifiait l'écran de saisie.
Pour fixer le problème dans ma base Postgres, j'ai donc fait un
UPDATE set boule=false where boule=NULL;

Jean-Max Reymond
CKR Solutions Open Source
Nice France
http://www.ckr-solutions.com


Bonjour J'ai un problème i

madboy57/ = 1 Mars, 2006 - 19:45

Bonjour
J'ai un problème identique entre PostgreSQL 8.1.2 et Visual Basic 6 !!! Etant donné qu'Access et Visual Basic provienne du même éditeur de logiciel :( , je pense que la solution doit etre identique .... Je vais essayer sa tout de suite et je vous tiendrai au courant au fil de la soirée ! Déja merci ;)

Edit: Et ben c'est reparti pour l'enfer sa ne marche encore pas si une ame charitable pouvais m'aider : j'ai une table avec trois champs de type booléen et lorsque je lance une requete via Visual Basic, les deux premiers enregistrements que je recupere sont juste mais les suivants ont des valeurs booléennes aléatoires .... !!!
Merci de votre aide


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.