|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
update d'une table oracle à partir d'un fichier hyperfile |
Débuté par adonaim, 09 mar. 2017 12:17 - 7 réponses |
| |
| | | |
|
| |
Posté le 09 mars 2017 - 12:17 |
bonjour la famille windev, aidez moi svp. j'ai deux tables qui ne sont pas dans la même base de données (oracle et hyperfileSQL). je dois verifier dans la table conges(hyperfyle) les agents dont leur flag_conge=actif et faire un update dans la table utilisateurs(oracle) mettre le flag_actif=0 pour chaque enregistrement correspondant. voila ce que j'essaie de faire :
HLitPremier(UTILISATEURS) TANTQUE PAS HEnDehors(UTILISATEURS) HLitRecherchePremier(Conges,NUM_MATRICULE,UTILISATEURS.NUM_MATRICULE) SI HTrouve(Conges) ALORS SI Conges.Flag_Conge = 1 ALORS HExécuteRequête(REQ_UpdateUser) //requete que jai fais pour que ca mette à jour, mais ca met toute la table à jour au lieu de le faire avec les enregistrements correspondant
FIN HLitSuivant(UTILISATEURS) FIN FIN |
| |
| |
| | | |
|
| | |
| |
Posté le 09 mars 2017 - 12:42 |
Bonjour
à mon avis, ta requête est fausse...
Cordialement
-- Fabrice Harari Consultant WinDev, WebDev et WinDev Mobile International
A votre disposition : WXShowroom.com, WXReplication (open source) et maintenant WXEDM (open source)
Plus d'information sur http://fabriceharari.com
Le 3/9/2017 à 6:17 AM, adonaim a écrit :
bonjour la famille windev, aidez moi svp. j'ai deux tables qui ne sont pas dans la même base de données (oracle et hyperfileSQL). je dois verifier dans la table conges(hyperfyle) les agents dont leur flag_conge=actif et faire un update dans la table utilisateurs(oracle) mettre le flag_actif=0 pour chaque enregistrement correspondant. voila ce que j'essaie de faire :
HLitPremier(UTILISATEURS) TANTQUE PAS HEnDehors(UTILISATEURS) HLitRecherchePremier(Conges,NUM_MATRICULE,UTILISATEURS.NUM_MATRICULE) SI HTrouve(Conges) ALORS SI Conges.Flag_Conge = 1 ALORS HExécuteRequête(REQ_UpdateUser) //requete que jai fais pour que ca mette à jour, mais ca met toute la table à jour au lieu de le faire avec les enregistrements correspondant
FIN HLitSuivant(UTILISATEURS) FIN FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 09 mars 2017 - 12:45 |
Bonjour C'est impossible de vous aider sans avoir le contenu de votre requête SQL (REQ_UpdateUser) Avez-vous bien une close WHERE dans votre requête ? cela devrait ressembler à : WHERE <TABLE_ORACLE.CHAMP_NUM_MATRICULE> = UTILISATEUR.NUM_MATRICULE |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 09 mars 2017 - 13:03 |
re je viens de lire votre message sur un autre site (avec l'image de vos 3 tables). Normalement vous devriez pouvoir remplacer tout votre code en exécutant une seule requête SQL avec HExécuteRequêteSQL()
UPDATE UTILISATEURS SET FLAG_ACTIF = 0 WHERE Conges.NUM_MATRICULE = Agents.NUM_MATRICULE AND Conges.Conges.Flag_Conge = 1 |
| |
| |
| | | |
|
| | |
| |
Posté le 09 mars 2017 - 14:59 |
La requête de Philippe n'est pas bonne, mais c'est une piste :
update utilisateurs u set u.flag_actif = 0 where u.num_matricule in ( select c.num_matricule from congés c where c.flag_conges = 1 ) |
| |
| |
| | | |
|
| | |
| |
Posté le 09 mars 2017 - 15:02 |
Je me réponds à moi même ... est-ce que un update avec des tables sur Oracle, et d'autres sur HFSQL, ça marche ? Je ne sais pas , et donc, dans le doute, on va faire très simple :
HLitPremier(UTILISATEURS) TANTQUE PAS HEnDehors(UTILISATEURS) HLitRecherchePremier(Conges,NUM_MATRICULE,UTILISATEURS.NUM_MATRICULE) SI HTrouve(Conges) ALORS SI Conges.Flag_Conge = 1 ALORS utilisateurs.flag_actif = 0 HModifie(utilisateurs) FIN HLitSuivant(UTILISATEURS) FIN FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 25 mars 2017 - 08:15 |
Bonjour, La première chose c'est que ma requête c'est effectivement du grand n'importe quoi ! en effet elle ne fonctionne pas
Après avoir créé un accès natif "Oracle" grâce à l'accès natif "PostgreSQL" j'ai refais les tests et je dois avouer être tombé sur un fait bizarre:
conditions du test : Windev20 Oracle Database 11g Express Edition 11.2.0.2.0 64bit Production PostgreSQL 9.6.1, compiled by Visual C++ build 1800, 64-bit Foreeign Data Wrapper : oracle_fdw 9.6 64-bit Accès natif PosgreSQL
J'ai donc un accès natif sur une table Oracle : vue_ora_users et une table hyperfile : Conges
Si j'exécute :
updRequete est une chaîne = [ UPDATE vue_ora_users SET flag_actif = 0 WHERE num_matricule IN (SELECT Conges.NUM_MATRICULE FROM Conges WHERE Conges.Flag_conges = 1) ] pas d'erreur mais la table n'est pas modifiée
Si j'exécute :
updRequete est une chaîne = [ UPDATE vue_ora_users SET flag_actif = 0 WHERE num_matricule IN ('MAT-001', 'MAT-003') ] la table est modifiée
j'ai vérifié que :
SELECT Conges.NUM_MATRICULE FROM Conges WHERE Conges.Flag_conges = 1 renvoie bien les deux valeurs MAT-001 et MAT-003 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 33 messages Popularité : +1 (1 vote) |
|
Posté le 25 mars 2017 - 16:44 |
Joel, Pour revenir à ton code original, je déplacerais le HLitSuivant(UTILISATEURS) à l'extérieur de ton SI HTROUVE(Conges). Car si aucun congés n'est trouvé pour un utilisateur, tu ne sortiras jamais de ta boucle.
HLitPremier(UTILISATEURS) TANTQUE PAS HEnDehors(UTILISATEURS) HLitRecherchePremier(Conges,NUM_MATRICULE,UTILISATEURS.NUM_MATRICULE) SI HTrouve(Conges) ALORS SI Conges.Flag_Conge = 1 ALORS utilisateurs.flag_actif = 0 HModifie(utilisateurs) FIN FIN HLitSuivant(UTILISATEURS) FIN
-- Daniel D. |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|