IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Appel de fonctions Postgres via Access


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 62
    Points
    62
    Par défaut Appel de fonctions Postgres via Access
    Bonjour à tous,

    Je ne sais pas si le meilleur endroit pour poser ma question ou si il vaudrait mieux la poser dans le forum Access, vous me direz .

    Donc voilà j'ai une base postgres sur laquelle je travaille liée à une interface QGIS pour la partie géographique. Pour une visualisation plus simple pour les utilisateurs je dois développé une interface utilisateur. Pour cela je suis parti sur Access.

    Du coup pour commencer j'ai créé une base vide, puis est ouvert mon ODBC ce qui m'a ramener toutes les tables :
    Nom : Vue générale.PNG
Affichages : 278
Taille : 120,2 Ko

    Ensuite lorsque j'ai crée une requête de base avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT c.ident, nc.id_conception
    FROM public_siea_s_fibrvue_v_ca_assemble_cable c
    LEFT JOIN public_suivi_non_conformites nc ON c.ident = nc.cable;
    Et là tout fonctionne sans problème.

    Ensuite j'ai voulu commencer à utiliser des fonctions de postgres du type right(), st_intersects(), st_dwithin(), st_startpoint(), st_endpoint(), etc. Et là Access me sort des erreurs de syntaxe. De ce que j'ai compris de mes recherches c'est parce que c'est fonction ne sont pas connues d'Access donc son interpréteur ne sait pas comment les traiter.
    Du coup j'ai essayé de passer par une requête en SQL direct, si j'ai bien compris avec cette solution Access n'essai plus d'interprété le code mais l'envoi directement au serveur qui lui le traite et retourne le résultat.

    J'ai donc fait un test avec la même requête simple mais en virant les "public_" devant mes tables et ca fonctionne :
    SELECT c.ident, nc.id_conception
    FROM siea_s_fibrvue_v_ca_assemble_cable c
    LEFT JOIN suivi_non_conformites nc ON c.ident = nc.cable;

    Donc pour finir j'ai de nouveaux inclus des fonctions de postgres et là ça ne marche pas :
    select c.ident as ident,
    com.commune as commune,
    com.postal as postal,
    com.insee as insee
    from siea_s_fibrvue_v_ca_assemble_cable c
    left join liste_communes com on right(c.insee,5) = com.insee;
    Nom : ODBC - L'appel a échoué.PNG
Affichages : 288
Taille : 4,5 Ko

    Auriez-vous une idée de comment je peux faire pour appeler des fonctions postgres dans Access ?

  2. #2
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 922
    Points
    922
    Par défaut
    Effectivement je pense que le souci relève davantage de l'utilisation d'Access

    Pour utiliser la syntaxe Postgre depuis Access, je recommande l'utilisation des procédures stockées, ou des vues ; les développements SQL restent donc dans la "grande" base de données. Il me semble que l'on peut utiliser les vues en tant que tables liées. Au moins, on utilise la puissance de Postgre. Car Access n'est pas ce qu'il y a de plus performant et de moins "bavard" niveau réseau ; lui laisser la partie présentation... et les vaches seront bien gardées.

    Appel de procédure stockée; cf. ce post par exemple.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 62
    Points
    62
    Par défaut
    Merci pour votre réponse.

    Alors si je ne me trompe pas une procédure stockée c'est les fonctions que je retrouve dans la partie "Fonctions" de pgadmin ?
    Si oui justement j'avais essayé de faire comme ça j'ai créé ma requête dans une fonction (j'ai un autre post sur ce sujet ) et j'ai essayé d'appelé cette fonction dans Access et ça n'a pas marché. Après, contrairement au post donné en exemple, je voulais éviter de passer par VBA. Pas que je ne maitrise pas, là ça va, mais plus que pour une requête qui fait juste des jointure je voulais directement lié mes contrôles a paramètre de sortie de ma requête.

  4. #4
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 922
    Points
    922
    Par défaut
    Citation Envoyé par Coco47 Voir le message
    Alors si je ne me trompe pas une procédure stockée c'est les fonctions que je retrouve dans la partie "Fonctions" de pgadmin ?
    Je veux parler de SQL procédural (PL/pgsql me semble t-il), il semblerait effectivement que les "fonctions" correspondent ici aux "procédures stockées" des autres SGBDR. Personnellement j'ai plutôt affaire à Access/MySQL (les deux parias du SQL )

    Citation Envoyé par Coco47 Voir le message
    Après, contrairement au post donné en exemple, je voulais éviter de passer par VBA.
    Dans ce cas, pouvez-vous faire une vue dans Postgre ? Cette vue peut ensuite être intégrée à la base Access par lien ODBC (via le mécanisme des tables liées).

    On peut aussi créer une requête Access appelant une fonction Postgre d'après ce post
    (Merci aux "passants" de m'alerter si l'équivalent existe sur Developpez.net, je serai ravie de changer le lien !)
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  5. #5
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut voir le log des erreurs
    Salut
    Il faut très souvent voir le log des erreurs pour savoir le problème soulevé par PostgreSQL et que ACCESS n'a pas pu voir.
    Le log est dans dossier_d_installation_de_pg\data\log
    Pour l'appel d'une fonction pgsql, on passe par une table (access) liée à une vue (pgsql), requête sql directe ou par VBA.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 62
    Points
    62
    Par défaut
    Merci à tous les deux pour vos réponses.

    Paraffine par rapport au post que vous m'avez proposé, c'est sur celui là que je m'étais basé, et ils parlent effectivement de passer par le sqldirect pour les fonctions postgres et c'est justement ce que j'essaie de faire sans succès.

    alassanediakite j'ai donc regardé le log des erreurs (d'ailleurs merci je ne savais même pas que ça existait). Par contre je ne suis pas sûr de la comprendre. J'ai l'impression que c'est un problème d'encodage :
    2021-01-18 09:04:44 CET LOG: le système de bases de données a été arrêté à 2021-01-15 16:55:02 CET
    2021-01-18 09:04:44 CET LOG: les protections contre la réutilisation d'un membre MultiXact sont maintenant activées
    2021-01-18 09:04:44 CET LOG: le système de bases de données est prêt pour accepter les connexions
    2021-01-18 09:04:44 CET LOG: lancement du processus autovacuum
    2021-01-18 09:14:37 CET ERREUR: la relation « msysconf » n'existe pas au caractère 28
    2021-01-18 09:14:37 CET INSTRUCTION : SELECT Config, nValue FROM MSysConf
    2021-01-18 09:14:37 CET ERREUR: le caractère dont la séquence d'octets est 0xef 0xbb 0xbf dans l'encodage « UTF8 » n'a pas
    d'équivalent dans l'encodage « WIN1252 »
    2021-01-18 09:14:37 CET INSTRUCTION : select c.ident as ident,
    com.commune as commune,
    com.postal as postal,
    com.insee as insee
    from siea_s_fibrvue_v_ca_assemble_cable c
    left join liste_communes com on right(c.insee,5) = com.insee;

  7. #7
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 922
    Points
    922
    Par défaut
    Il y aurait deux erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Config, nValue FROM MSysConf
    ne reconnait pas MSysConf

    et d'autre part
    le caractère dont la séquence d'octets est 0xef 0xbb 0xbf dans l'encodage « UTF8 » n'a pas
    d'équivalent dans l'encodage « WIN1252 »
    The UTF-8 representation of the BOM is the (hexadecimal) byte sequence 0xEF,0xBB,0xBF.
    Donc ce serait de l'UTF-8 avec BOM ?
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 62
    Points
    62
    Par défaut
    Euh... ok

    Vous me parlé chinois là .

    MSysConf je ne l'appel pas moi, il doit être appelé automatiquement ou un truc du genre.

    Et c'est quoi le BOM ? Moi je suis tout par défaut, enfin il me semble. Pour la base j'ai repris celle d'un ancien projet.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 103
    Points : 62
    Points
    62
    Par défaut
    Bon alors en fait je vous avais répondu sans avoir chercher de mon coté. Voilà qui est fait et j'ai trouvé la réponse ici : https://www.developpez.net/forums/d1...utf-8-win1252/

    Mon pilote ODBC était configuré en ANSI et je viens de le passer Unicode et plus de problème.

    Merci à tous pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] INSERT d'une table Postgres vers une autre table Postgres via ACCESS et VBA
    Par totojava dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/03/2018, 10h17
  2. [AC-2016] Appel de fonction Excel depuis Access
    Par riaolle dans le forum VBA Access
    Réponses: 2
    Dernier message: 14/02/2017, 10h45
  3. Réponses: 4
    Dernier message: 21/08/2013, 14h29
  4. Appel de fonction Fortran via un programme C
    Par bybby83 dans le forum Fortran
    Réponses: 3
    Dernier message: 08/01/2009, 11h08
  5. Appel de fonction PHP via un lien
    Par redvivi dans le forum Langage
    Réponses: 1
    Dernier message: 21/02/2008, 21h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo