Windev et OLE DB Oracle : Parcourir une vue Oracle avec les fonctions de lecture Hyperfile (Hlit)
Bonjour,
J'ai un petit problème de lecture d'une vue Oracle avec les fonctions Windev Hlit (en accès OLE DB Oracle).
Le but étant de lire uniquement certains enregistrements filtrés implicitement par cette vue.
Côté Oracle, j'ai une table CLIENT dans un schéma "Schema1".
Cette table contient 2 colonnes IDClient et IDPays.
J'ai deux clients :
Client1 IDClient = 1 et IDPays = 1
Client1 IDClient = 2 et IDPays = 2
Dans un autre schéma "Schema1Vue", J'ai créé une vue sur la table CLIENT du schéma "Schema1" :
CREATE OR REPLACE FORCE VIEW "Schema1Vue"."CLIENT" ("IDClient", "IDPays")
AS
SELECT "IDClient","IDPays" FROM "Schema1"."CLIENT" WHERE IDPays = 1;
Le but de cette vue est donc de ne sélectionner que les clients dont l'IDPays = 1.
Côté Windev, j'ai importé dans l'analyse la description du fichier CLIENT depuis le schéma Oracle "Schema1", car il n'est pas possible d'importer la description directement depuis le schéma contenant la vue.
Lorsque je tente d'importer la description depuis le schéma "Schema1Vue" contenant la vue sur le fichier CLIENT, j'obtiens l'erreur :
Description = Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence ordinale demandé.
Source = ADOX.Views
Help File = C:\Windows\HELP\ADO270.CHM
Help Context = 1240649
Error Number = -2146825023
Le problème est que lorsque que je parcours la vue avec les fonctions Hlit, je vois tout les clients et non uniquement les clients dont l'IDPays = 1 (Pourtant cela fonctionne avec HExécuteRequêteSQL).
Connexion au schéma "Schema1Vue" contenant la vue sur le fichier CLIENT :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
//Je me connecte sur le schéma contenant la vue sur le fichier CLIENT
Cnx_Oracle est une Connexion
Cnx_Oracle..Provider = hOledbOracle
Cnx_Oracle..Utilisateur = "Schema1Vue"
Cnx_Oracle..MotDePasse = "pass"
Cnx_Oracle..Serveur = "IPServeurOracle:1521/xe"
Cnx_Oracle..Accès = hOLectureEcriture
SI HOuvreConnexion(Cnx_Oracle) = Faux ALORS
Erreur(HErreurInfo(hErrComplet))
FIN
SI PAS HChangeConnexion(CLIENT,Cnx_Oracle) ALORS
Erreur(HErreurInfo(hErrComplet))
RENVOYER Faux
FIN |
Parcours du fichier CLIENT avec Hlit :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Trace("--------------------")
Trace("Hlit")
HLitPremier(CLIENT,IDClient)
TANTQUE PAS HEnDehors(CLIENT)
Trace(CLIENT.IDClient)
HLitSuivant(CLIENT)
FIN
//Affiche tout les clients |
Tout les clients sont affichés, la fonction Hlit ne tient pas compte de la condition IDPays = 1 définie dans la vue Oracle.
Parcours du fichier CLIENT avec une requête SQL :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
Trace("--------------------")
Trace("Requête SQL")
sdReq est une Source de Données
sReq est une chaîne
sReq = "Select * From CLIENT"
SI PAS HExécuteRequêteSQL(sdReq,Cnx_Oracle,hRequêteSansCorrection,sReq) ALORS
Erreur(HErreurInfo(hErrComplet))
RENVOYER Faux
FIN
HLitPremier(sdReq)
TANTQUE PAS HEnDehors(sdReq)
Trace(sdReq.IDClient)
HLitSuivant(sdReq)
FIN
//Affiche bien uniquement les clients dont l'IDPays = 1. |
Affiche bien uniquement les clients dont l'IDPays = 1 selon la condition définie dans la vue Oracle.
Merci pour vos suggestions.