OVH Cloud OVH Cloud

Base PROGRESS - Accès aux séquenceurs

17 réponses
Avatar
Yannick
Bonjour

Lorsque j'importe les tables d'une base progress, dans une analyse HF,
je ne rencontre aucun problème.

Par contre, comment accéder aux séquenceurs de la base progress ?

Merci pour votre aide
Yannick

7 réponses

1 2
Avatar
Yannick
> Le Fri, 16 Jun 2006 11:37:35 +0200, Yannick a écrit:

Le Wed, 14 Jun 2006 15:21:20 +0200, nwjb
a écrit:

Le Wed, 14 Jun 2006 15:07:45 +0200, Yannick a écrit:

Dans une base progress, on peut mettre, précisément, des "séquences"
(via le Data Dictionary, on peut créer des tables et des séquences).

Une séquence est un compteur, auquel on donne des propriétés (valeur de
départ / incrément / ...).








[...]
Comme il n'y a pas de réaction à ma réponse je détaille:

Créer une requete SEQ_SEL_01 en code SQL seul (pas avec l'assistant
requete) comportant
ce qu'il faut pour obtenir la valeur de la séquence : en ORACLE:

select syscrim.compteur.nextval as seq from dual

Dans la procédure WD:

HExécuteRequête(SEQ_SEL_01,"gcCCAM",hRequêteSansCorrection)
HLitPremier(SEQ_SEL_01)
seq=SEQ_SEL_01.seq
HAnnuleDéclaration(SEQ_SEL_01)




Bonjour

Voici la syntaxe exacte pour accéder à la séquence :
"SELECT PUB.tpnoxfi.NEXTVAL FROM PUB.TPFiEnTete"
Où tpnoxfi est le séquenceur et TPFiEnTete est une table de la base de
données.
Cette syntaxe fonctionne parfaitement dans Microsoft Query.

Maintenant, comment faire dans windev ?
Dans l'analyse du projet, j'ai défini une connexion sur la base de donnée.
Cette connexion fonctionne (j'arrive à lire des tables, via l'accès natif
progress).

Maintenant, si je fais comme demandé plus haut, je créé une requête en code
sql seul (nouvelle requête, saisir le code sql), j'ai déjà une warning sur
la syntaxe "SELECT PUB.tpnoxfi.NEXTVAL FROM PUB.TPFiEnTete" :
-> si je mets les guillements, il souligne le mot SELECT et met la warning
'Caractère " inattendu'
-> si j'enlève les guillements, il souligne le mot NEXTVAL et met la
warning 'Mot . inattendu'


Que faire ?




Je pense que PUB est un schéma ou un compte et tpnoxfi le nom de la séquence.
Le compilateur WD (je suppose ) ne s'attend pas à avoir deux niveaux de '.'
dans
un select (il ne doit en accepter qu'un du genre table.attribut). Il faudrait
donc supprimer la référence au compte de façon à n'avoir qu'un seul '.':
SELECT tpnoxfi.Nextval from ...

Une solution par exemple est de créer un synonyme : create synonym XXX for
PUB.tpnoxfi
puis faire select XXX.nextval as seq from ....

Voir dans ma réponse precédente comment récupérer la valeur de la séquence.

Autre hypothèse: l'erreur n'est qu'un Warning (Mot . inattendu) et comme il
FAUT
exécuter la requête avec hRequeteSANSCORRECTION , le code SQL n'est pas
interprété par WD
mais passé directement au SGBD et cela fonctionne donc peut-être.



Effectivement, tpnoxfi est bien le nom du séquenceur. Pour PUB, je
pense que ça doit être un compte du genre "PUBLIC".
Si je retire le préfixe "PUB.", je tombe sur une autre warning : "Le
fichier tpnoxfi n'existe pas dans la clause FROM"
-> Ce qui est logique... car wd se réfère à l'analyse du projet.

Si j'exécute, le driver odbc me renvoie de syntaxe, bien qu'il y ait le
"hRequeteSansCorrection"...

J'ai envoyé un message au support pc-soft car je suis coincé...
Avatar
nwjb
Le Fri, 16 Jun 2006 13:20:33 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 11:37:35 +0200, Yannick a écrit:

Le Wed, 14 Jun 2006 15:21:20 +0200, nwjb
a écrit:










[...]
Effectivement, tpnoxfi est bien le nom du séquenceur. Pour PUB, je pense
que ça doit être un compte du genre "PUBLIC".
Si je retire le préfixe "PUB.", je tombe sur une autre warning : "Le
fichier tpnoxfi n'existe pas dans la clause FROM"
-> Ce qui est logique... car wd se réfère à l'analyse du projet.

Si j'exécute, le driver odbc me renvoie de syntaxe, bien qu'il y ait le
"hRequeteSansCorrection"...

J'ai envoyé un message au support pc-soft car je suis coincé...




J'ai regardé ce que nous faisons et l'exemple donné précédemment donne
effectivement
des warnings dans WD , mais s'exécute sans problème car envoyé directement
au SGBD.
D'ailleurs dans notre exemple à nous il y a aussi compte.sequence.nextval.

Je te conseille
1-de tester ton code SQL depuis un interrogateur SQL
2-de mettre le code SQL qui fonctionne dans la requête complête (avec les
PUB et les .)

Pour nous cela marche sans pb. Toutefois notre accès à la base est en
OLEDB et non en ODBC.

Ci-dessous: procédure de connexion à la base

gnRes=HDécritConnexion("gcCCAM","CCAM","CCAM",gsServeur,"","OraOLEDB.Oracle")
SI PAS gnRes ALORS Erreur("hdécrit CCAM"+HErreurInfo())
gnRes=HOuvreConnexion("gcCCAM")
SI PAS gnRes ALORS Erreur("houvre CCAM"+HErreurInfo())
gnRes=HChangeConnexion("*","gcCCAM")
SI PAS gnRes ALORS Erreur("hchangecnx CCAM"+HErreurInfo())


Le reste: texte de la requête et code WD est tel quel dans nos logiciels...




--
J.Bratières

Enlever paspub pour répondre
Please remove paspub when answering
Avatar
Yannick
> Le Fri, 16 Jun 2006 13:20:33 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 11:37:35 +0200, Yannick a écrit:

Le Wed, 14 Jun 2006 15:21:20 +0200, nwjb
a écrit:










[...]
Effectivement, tpnoxfi est bien le nom du séquenceur. Pour PUB, je pense
que ça doit être un compte du genre "PUBLIC".
Si je retire le préfixe "PUB.", je tombe sur une autre warning : "Le
fichier tpnoxfi n'existe pas dans la clause FROM"
-> Ce qui est logique... car wd se réfère à l'analyse du projet.

Si j'exécute, le driver odbc me renvoie de syntaxe, bien qu'il y ait le
"hRequeteSansCorrection"...

J'ai envoyé un message au support pc-soft car je suis coincé...




J'ai regardé ce que nous faisons et l'exemple donné précédemment donne
effectivement
des warnings dans WD , mais s'exécute sans problème car envoyé directement au
SGBD.
D'ailleurs dans notre exemple à nous il y a aussi compte.sequence.nextval.

Je te conseille
1-de tester ton code SQL depuis un interrogateur SQL
2-de mettre le code SQL qui fonctionne dans la requête complête (avec les PUB
et les .)

Pour nous cela marche sans pb. Toutefois notre accès à la base est en OLEDB
et non en ODBC.

Ci-dessous: procédure de connexion à la base

gnRes=HDécritConnexion("gcCCAM","CCAM","CCAM",gsServeur,"","OraOLEDB.Oracle")
SI PAS gnRes ALORS Erreur("hdécrit CCAM"+HErreurInfo())
gnRes=HOuvreConnexion("gcCCAM")
SI PAS gnRes ALORS Erreur("houvre CCAM"+HErreurInfo())
gnRes=HChangeConnexion("*","gcCCAM")
SI PAS gnRes ALORS Erreur("hchangecnx CCAM"+HErreurInfo())


Le reste: texte de la requête et code WD est tel quel dans nos logiciels...




Le code sql est bon car cela fonctionne quand je l'exécute dans
microsoft query. Ce côté là est donc sûr à 100%

Maintenant, je pense que le problème se situe dans la façon dont windev
passe le code sql au driver odbc (malgré de hRequeteSansCorrection).

Je suis dans l'attente de la réponse de pc-soft (il va certainement y
avoir plusieurs échanges de mail, donc plusieurs jours/semaines pour
avoir la réponse).
Je posterai la solution pour info.

Dans tous les cas, merci pour ton aide pour avoir bien décortiqué le
problème
Yannick
Avatar
Yannick
> Le Fri, 16 Jun 2006 13:20:33 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 11:37:35 +0200, Yannick a écrit:

Le Wed, 14 Jun 2006 15:21:20 +0200, nwjb
a écrit:










[...]
Effectivement, tpnoxfi est bien le nom du séquenceur. Pour PUB, je pense
que ça doit être un compte du genre "PUBLIC".
Si je retire le préfixe "PUB.", je tombe sur une autre warning : "Le
fichier tpnoxfi n'existe pas dans la clause FROM"
-> Ce qui est logique... car wd se réfère à l'analyse du projet.

Si j'exécute, le driver odbc me renvoie de syntaxe, bien qu'il y ait le
"hRequeteSansCorrection"...

J'ai envoyé un message au support pc-soft car je suis coincé...




J'ai regardé ce que nous faisons et l'exemple donné précédemment donne
effectivement
des warnings dans WD , mais s'exécute sans problème car envoyé directement au
SGBD.
D'ailleurs dans notre exemple à nous il y a aussi compte.sequence.nextval.

Je te conseille
1-de tester ton code SQL depuis un interrogateur SQL
2-de mettre le code SQL qui fonctionne dans la requête complête (avec les PUB
et les .)

Pour nous cela marche sans pb. Toutefois notre accès à la base est en OLEDB
et non en ODBC.

Ci-dessous: procédure de connexion à la base

gnRes=HDécritConnexion("gcCCAM","CCAM","CCAM",gsServeur,"","OraOLEDB.Oracle")
SI PAS gnRes ALORS Erreur("hdécrit CCAM"+HErreurInfo())
gnRes=HOuvreConnexion("gcCCAM")
SI PAS gnRes ALORS Erreur("houvre CCAM"+HErreurInfo())
gnRes=HChangeConnexion("*","gcCCAM")
SI PAS gnRes ALORS Erreur("hchangecnx CCAM"+HErreurInfo())


Le reste: texte de la requête et code WD est tel quel dans nos logiciels...



Voici la solution :

ReqSeq est une Source de Données
HExécuteRequêteSQL(ReqSeq, "ConnexionPcsoft",
hRequêteSansCorrection,"SELECT PUB.tpnoxfi.NEXTVAL FROM
PUB.TPFiEnTete")
HLitPremier(ReqSeq)
Info(ReqSeq.sequence_next)

Si on veut la valeur courante du séquenceur, on remplace "NEXTVAL" par
"CURRVAL" et "sequence_next" par "sequence_current".


Et encore merci pour ton aide.
Avatar
nwjb
Le Wed, 05 Jul 2006 14:33:18 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 13:20:33 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 11:37:35 +0200, Yannick a écrit:

Le Wed, 14 Jun 2006 15:21:20 +0200, nwjb
a écrit:










[...]
Effectivement, tpnoxfi est bien le nom du séquenceur. Pour PUB, je
pense que ça doit être un compte du genre "PUBLIC".
Si je retire le préfixe "PUB.", je tombe sur une autre warning : "Le
fichier tpnoxfi n'existe pas dans la clause FROM"
-> Ce qui est logique... car wd se réfère à l'analyse du projet.

Si j'exécute, le driver odbc me renvoie de syntaxe, bien qu'il y ait
le "hRequeteSansCorrection"...

J'ai envoyé un message au support pc-soft car je suis coincé...




J'ai regardé ce que nous faisons et l'exemple donné précédemment donne
effectivement
des warnings dans WD , mais s'exécute sans problème car envoyé
directement au SGBD.
D'ailleurs dans notre exemple à nous il y a aussi
compte.sequence.nextval.

Je te conseille
1-de tester ton code SQL depuis un interrogateur SQL
2-de mettre le code SQL qui fonctionne dans la requête complête (avec
les PUB et les .)

Pour nous cela marche sans pb. Toutefois notre accès à la base est en
OLEDB et non en ODBC.

Ci-dessous: procédure de connexion à la base

gnRes=HDécritConnexion("gcCCAM","CCAM","CCAM",gsServeur,"","OraOLEDB.Oracle")
SI PAS gnRes ALORS Erreur("hdécrit CCAM"+HErreurInfo())
gnRes=HOuvreConnexion("gcCCAM")
SI PAS gnRes ALORS Erreur("houvre CCAM"+HErreurInfo())
gnRes=HChangeConnexion("*","gcCCAM")
SI PAS gnRes ALORS Erreur("hchangecnx CCAM"+HErreurInfo())


Le reste: texte de la requête et code WD est tel quel dans nos
logiciels...



Voici la solution :

ReqSeq est une Source de Données
HExécuteRequêteSQL(ReqSeq, "ConnexionPcsoft",
hRequêteSansCorrection,"SELECT PUB.tpnoxfi.NEXTVAL FROM PUB.TPFiEnTete")
HLitPremier(ReqSeq)
Info(ReqSeq.sequence_next)

Si on veut la valeur courante du séquenceur, on remplace "NEXTVAL" par
"CURRVAL" et "sequence_next" par "sequence_current".


Et encore merci pour ton aide.




C'est ce qu'il me semblait avoir dit dans le message d'avant...(identique
avec Oracle)


--
J.Bratières

Enlever paspub pour répondre
Please remove paspub when answering
Avatar
Yannick
> Le Wed, 05 Jul 2006 14:33:18 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 13:20:33 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 11:37:35 +0200, Yannick a écrit:

Le Wed, 14 Jun 2006 15:21:20 +0200, nwjb
a écrit:










[...]
Effectivement, tpnoxfi est bien le nom du séquenceur. Pour PUB, je pense
que ça doit être un compte du genre "PUBLIC".
Si je retire le préfixe "PUB.", je tombe sur une autre warning : "Le
fichier tpnoxfi n'existe pas dans la clause FROM"
-> Ce qui est logique... car wd se réfère à l'analyse du projet.

Si j'exécute, le driver odbc me renvoie de syntaxe, bien qu'il y ait le
"hRequeteSansCorrection"...

J'ai envoyé un message au support pc-soft car je suis coincé...




J'ai regardé ce que nous faisons et l'exemple donné précédemment donne
effectivement
des warnings dans WD , mais s'exécute sans problème car envoyé directement
au SGBD.
D'ailleurs dans notre exemple à nous il y a aussi compte.sequence.nextval.

Je te conseille
1-de tester ton code SQL depuis un interrogateur SQL
2-de mettre le code SQL qui fonctionne dans la requête complête (avec les
PUB et les .)

Pour nous cela marche sans pb. Toutefois notre accès à la base est en
OLEDB et non en ODBC.

Ci-dessous: procédure de connexion à la base

gnRes=HDécritConnexion("gcCCAM","CCAM","CCAM",gsServeur,"","OraOLEDB.Oracle")
SI PAS gnRes ALORS Erreur("hdécrit CCAM"+HErreurInfo())
gnRes=HOuvreConnexion("gcCCAM")
SI PAS gnRes ALORS Erreur("houvre CCAM"+HErreurInfo())
gnRes=HChangeConnexion("*","gcCCAM")
SI PAS gnRes ALORS Erreur("hchangecnx CCAM"+HErreurInfo())


Le reste: texte de la requête et code WD est tel quel dans nos
logiciels...



Voici la solution :

ReqSeq est une Source de Données
HExécuteRequêteSQL(ReqSeq, "ConnexionPcsoft",
hRequêteSansCorrection,"SELECT PUB.tpnoxfi.NEXTVAL FROM PUB.TPFiEnTete")
HLitPremier(ReqSeq)
Info(ReqSeq.sequence_next)

Si on veut la valeur courante du séquenceur, on remplace "NEXTVAL" par
"CURRVAL" et "sequence_next" par "sequence_current".


Et encore merci pour ton aide.




C'est ce qu'il me semblait avoir dit dans le message d'avant...(identique
avec Oracle)



Presque...
Si tu observe bien, dans le code sql, il n'y a pas le "as seq".
-> Le driver odbc de progress refuse cette syntaxe...
C'est pour cela qu'on récupère la valeur avec "sequence_next", car cela
semble figé.

Merci encore pour ton aide.
Avatar
nwjb
Le Fri, 07 Jul 2006 08:44:14 +0200, Yannick a écrit:

Le Wed, 05 Jul 2006 14:33:18 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 13:20:33 +0200, Yannick a écrit:

Le Fri, 16 Jun 2006 11:37:35 +0200, Yannick a écrit:

Le Wed, 14 Jun 2006 15:21:20 +0200, nwjb
a écrit:










[...]
Effectivement, tpnoxfi est bien le nom du séquenceur. Pour PUB, je
pense que ça doit être un compte du genre "PUBLIC".
Si je retire le préfixe "PUB.", je tombe sur une autre warning : "Le
fichier tpnoxfi n'existe pas dans la clause FROM"
-> Ce qui est logique... car wd se réfère à l'analyse du projet.

Si j'exécute, le driver odbc me renvoie de syntaxe, bien qu'il y ait
le "hRequeteSansCorrection"...

J'ai envoyé un message au support pc-soft car je suis coincé...




J'ai regardé ce que nous faisons et l'exemple donné précédemment
donne effectivement
des warnings dans WD , mais s'exécute sans problème car envoyé
directement au SGBD.
D'ailleurs dans notre exemple à nous il y a aussi
compte.sequence.nextval.

Je te conseille
1-de tester ton code SQL depuis un interrogateur SQL
2-de mettre le code SQL qui fonctionne dans la requête complête (avec
les PUB et les .)

Pour nous cela marche sans pb. Toutefois notre accès à la base est en
OLEDB et non en ODBC.

Ci-dessous: procédure de connexion à la base

gnRes=HDécritConnexion("gcCCAM","CCAM","CCAM",gsServeur,"","OraOLEDB.Oracle")
SI PAS gnRes ALORS Erreur("hdécrit CCAM"+HErreurInfo())
gnRes=HOuvreConnexion("gcCCAM")
SI PAS gnRes ALORS Erreur("houvre CCAM"+HErreurInfo())
gnRes=HChangeConnexion("*","gcCCAM")
SI PAS gnRes ALORS Erreur("hchangecnx CCAM"+HErreurInfo())


Le reste: texte de la requête et code WD est tel quel dans nos
logiciels...



Voici la solution :

ReqSeq est une Source de Données
HExécuteRequêteSQL(ReqSeq, "ConnexionPcsoft",
hRequêteSansCorrection,"SELECT PUB.tpnoxfi.NEXTVAL FROM
PUB.TPFiEnTete")
HLitPremier(ReqSeq)
Info(ReqSeq.sequence_next)

Si on veut la valeur courante du séquenceur, on remplace "NEXTVAL" par
"CURRVAL" et "sequence_next" par "sequence_current".


Et encore merci pour ton aide.




C'est ce qu'il me semblait avoir dit dans le message
d'avant...(identique avec Oracle)



Presque...
Si tu observe bien, dans le code sql, il n'y a pas le "as seq".
-> Le driver odbc de progress refuse cette syntaxe...
C'est pour cela qu'on récupère la valeur avec "sequence_next", car cela
semble figé.

Merci encore pour ton aide.





Le pilote OleDB lui l'accepte , c'est commode pour choisir le nom de la
colonne.

Padkoi.

--
J.Bratières

Enlever paspub pour répondre
Please remove paspub when answering
1 2