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 :
Parcours du fichier CLIENT avec Hlit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Tout les clients sont affichés, la fonction Hlit ne tient pas compte de la condition IDPays = 1 définie dans la vue Oracle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Parcours du fichier CLIENT avec une requête SQL :
Affiche bien uniquement les clients dont l'IDPays = 1 selon la condition définie dans la vue Oracle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Merci pour vos suggestions.
Partager