Page 1 sur 1

Postgresql - PB Requête

Publié : ven. 21/oct./2022 10:11
par pls
Bonjour,

Je viens de ressortir ma licence PB pour développer une petite application de saisie sur une BDD Postgresql.
Pas de soucis avec le SQL que je connais bien par contre je n'arrive pas à exécuter des requête qui fonctionnent correctement sur la base.

la connexion se passe bien par contre une un message d'erreur à l'exécution de la requête :

Code : Tout sélectionner

Module Dico
  #DQ = #DQUOTE$
  EnableExplicit
  Global dbId
  Procedure load()
    dbId = DB::open()
    Protected req.s = "select 1 from dual"
    Debug req
    ProcedureReturn DB::query(dbId, req)
  EndProcedure
Message d'erreur : La relation A" dual A" n'existe pas

J'ai testé différentes requêtes en précisant les schémas des tables mais rien n'y fait.

Vous auriez une idée ?

Merci d'avance,

Re: Postgresql - PB Requête

Publié : ven. 21/oct./2022 10:36
par Marc56
Bonjour,

Difficile de debuger un code utilisant un module. Cependant, un message « La relation ... n'existe pas » signifie qu'il ne voit pas la table.

Solution: encapsuler le nom de la table par des " " (ou ' ' )

À tester:

Code : Tout sélectionner

Protected req.s = ~"select 1 from \"dual\" "
ou
Protected req.s = "select 1 from 'dual'"
Je n'ai pas de base pour tester.
:wink:

Re: Postgresql - PB Requête

Publié : ven. 21/oct./2022 11:28
par pls
Merci pour votre réponse mais j'ai toujours ce message d'erreur.
J'ai refait une page de code histoire de tester :

Code : Tout sélectionner

UsePostgreSQLDatabase()

Procedure open()
  Protected id = OpenDatabase(#PB_Any, "host=xxx.xx.xx.xx port=5432", "xxxxx", "xxxxxxx")
  If Not id
    MessageRequester("Database error", "Cannont connect to database", #PB_MessageRequester_Error)
    End
  EndIf
  ProcedureReturn id
EndProcedure

Procedure close(id)
  CloseDatabase(id)
EndProcedure

dbId = open()
req.s = "select 1 from 'dual'"

If DatabaseQuery(dbId, req)
  While NextDatabaseRow
    Debug(req) 
  Wend
Else
  MessageRequester("SQL ERROR",req + Chr(10) + DatabaseError(),#PB_MessageRequester_Error)
EndIf 

close(dbId)
Je vais tester la piste que vous m'indiquer, d'encapsuler la table source.

Merci en tout cas

Re: Postgresql - PB Requête

Publié : ven. 21/oct./2022 12:47
par pls
Je viens de tester via ODBC, ça passe très bien. Dommage car ça oblige à déclarer le DNS sur les postes clients.

Avec la librairie PostgreSQL, J'ai essayé d'encapsuler la chaine avec des #DQUOTE$ mais rien n'y fait

Re: Postgresql - PB Requête

Publié : sam. 22/oct./2022 10:24
par Marc56
On peut obtenir plus de détails en demandant au serveur d'afficher son message d'erreur (DatabaseError())

Code : Tout sélectionner

    If Not id
        Debug DatabaseError() ;   <---------------------------
        MessageRequester("Database error", "Cannot connect to database", #PB_MessageRequester_Error)
        End
    Else
PS.
Il faut PB6 pour se connecter directement à une base PostgreSQL 14 (changement du mode authentification)
22 June 2022 : Version 6.00 LTS
- Updated: libpq (PostgreSQL) to 14.2

Re: Postgresql - PB Requête

Publié : mar. 25/oct./2022 9:41
par pls
Merci pour ces informations.
Je suis bien en PB6. Je viens de faire l'essai avec une postgre v15 mais pas mieux.

Je viens d'installer une BDD en Local est ça marche bien avec les drivers Postgre donc faut que je regarde plutôt au niveau de l'environnement.

Re: Postgresql - PB Requête

Publié : mar. 25/oct./2022 12:58
par Marc56
pls a écrit : mar. 25/oct./2022 9:41 Merci pour ces informations.
Je suis bien en PB6. Je viens de faire l'essai avec une postgre v15 mais pas mieux.

Je viens d'installer une BDD en Local est ça marche bien avec les drivers Postgre donc faut que je regarde plutôt au niveau de l'environnement.
Pour autoriser les connexions depuis une machine du réseau, il faut que tu modifies le fichier pg_hba.conf qui se trouve dans le répertoire des données sur le serveur.
Si tu es en IPv4, ajoute la (les) machine(s) cliente(s)
Exemple pour ajouter 192.168.0.10 (en plus de localhost)

Code : Tout sélectionner

# IPv4 local connections:
host    all             all             127.0.0.1/32           scram-sha-256
host    all             all             192.168.0.10/32        scram-sha-256
Je ne me souviens plus s'il faut relancer le service.

Re: Postgresql - PB Requête

Publié : jeu. 27/oct./2022 8:57
par pls
Merci :)

J'ai bien toutes les autorisations pour accéder à la base depuis ma machine.
Ça passe en ODBC, via Dbeaver...

Je me dit que c'est peut être un PB de character set entre ma machine et le serveur.

Re: Postgresql - PB Requête

Publié : mer. 09/nov./2022 17:50
par pls
Bonjour,

Pour information, problème corrigé.
Je n'avais pas précisé le dbname dans la chaine de connexion qui prend, si il n'est pas renseigné le nom de l'utilisateur.

A bientôt.