IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Windev et OLE DB Oracle : Parcourir une vue Oracle avec les fonctions de lecture Hyperfile (Hlit) [WD17]


Sujet :

WinDev

  1. #1
    Membre actif
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Points : 205
    Points
    205
    Par défaut 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 : 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
    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
     
    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 : 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.
    Affiche bien uniquement les clients dont l'IDPays = 1 selon la condition définie dans la vue Oracle.

    Merci pour vos suggestions.

  2. #2
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    je penche pour un pb d'alias dans Oracle...

    au lieu d'accéder à "Schema1Vue.CLIENT" tu accèdes à "Schema1.CLIENT".

    existe-t-il un synonym public CLIENT ? si oui supprime le et donne nous le résultat du test
    Emmanuel Lecoester
    => joomla addict.

  3. #3
    Membre actif
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Points : 205
    Points
    205
    Par défaut
    Merci pour cette réponse rapide, mais non, il n'y a pas de synonyme public "CLIENT".

    Je précise que j'ai changé la connexion sur le fichier "CLIENT" dans l'analyse Windev, pour le faire pointer sur le schéma contenant la vue, mais rien à faire,
    HExecuteRequeteSQL pointe bien sur la vue mais pas la fonction HLit...

  4. #4
    Membre actif
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Points : 205
    Points
    205
    Par défaut
    Problème résolu !

    En fait, dans l'analyse Windev, il faut aller dans la description du fichier, Onglet "Info" et mettre le nom de la table (et uniquement le nom de la table) dans le champ "Nom de la table dans la base de donnée externe" en respectant la casse.

    Dans mon cas "CLIENT" (Ne surtout pas faire précéder le nom de la table du nom d'un schéma).

    C'est tout !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parcourir une liste pucée avec les touches directionnelles
    Par hukiro dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/04/2013, 19h22
  2. Problème de connexion entre une base Oracle et une base ACCESS avec Oracle sql developer
    Par orasqldev dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 29/04/2010, 19h19
  3. Mapper une vue oracle
    Par aloha dans le forum JPA
    Réponses: 2
    Dernier message: 13/02/2008, 17h13
  4. import d'une vue oracle
    Par habasque dans le forum Oracle
    Réponses: 5
    Dernier message: 26/10/2006, 16h23
  5. Réponses: 11
    Dernier message: 03/05/2006, 01h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo