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.

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.