PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Copie d'enregistrements d'un fichier d'une base de données à une autre en HF/CS
Copie d'enregistrements d'un fichier d'une base de données à une autre en HF/CS
Débuté par Soledad, 11 mai 2015 17:11 - 4 réponses
Posté le 11 mai 2015 - 17:11
Bonjour,

Je cherche à copier les enregistrements d'un fichier dont je ne connais pas le nom et qui est renseigné par l'utilisateur dans un autre fichier dont je ne connais pas le nom renseigné par le même utilisateur, d'une base de données renseignée par l'utilisateur dans une autre base de données et vous l'avez deviné, renseigné par l'utilisateur.

Voici le code qui ne fonctionne pas :
Il est évident que les fichiers et base de données existent
sFicO, sFicD, sWhere, sBddO, sBddD, sSqlO, sSqlD est une chaîne
sdSqlO, sdSqlD est une Source de Données

sBddO='PREPROD'
sBddD='PROD'

sFicO='Article'
sFicD='Artcile'

sWhere="WHERE CodeArt='AA128'

HDécritConnexion(cnxO,"Admin","","srv1",sBddO,hAccèsHFClientServeur)
HDécritConnexion(cnxD,"Admin","","srv2",sBddD,hAccèsHFClientServeur)

HChangeConnexion(sdSqlO,cnxO)
SI PAS HExécuteRequêteSQL(sdSqlO,hModifieFichier,sSqlO) ALORS Erreur("Impossible d'exécuter la requête Source "+sBddO,"",HErreur()); RETOUR
HChangeConnexion(sdSqlD,cnxD)
SI PAS HExécuteRequêteSQL(sdSqlD,hModifieFichier,sSqlD) ALORS Erreur("Impossible d'exécuter la requête de destination "+sBddD,"",HErreur()); RETOUR

sSqlD="SELECT * FROM "+sFicO+" "+sWhere
SI PAS HExécuteRequêteSQL(sdSqlD,cnxD,sSqlD) ALORS Erreur("Impossible d'exécuter la requête de destination "+sBddD,"",HErreur()); RETOUR

POUR TOUT sdSqlO
HRAZ(sdSqlD)
HCopieEnreg(sdSqlD,sdSqlO,hValDéfaut)
HAjoute(sdSqlD)
FIN
HAnnuleDéclaration(sdSqlD); HAnnuleDéclaration(sdSqlO)

Il semble que tout s'exécute sur le fichier et la base de données source.

Pour information, j'ai utiliser la même procédure avec des connexions OLEDB (avec la syntaxe qui va avec) sur des bases Gupta et à ma grande surprise cela fonctionne.

J'insiste sur le fait que le code doit prévoir que les fichiers et bases de données doivent être paramétrables et qu'ils peuvent posséder des noms différents.

Par avance, merci de votre aide.
Membre enregistré
2 572 messages
Popularité : +222 (260 votes)
Posté le 12 mai 2015 - 06:31
Bonjour,

Pour ton problème, il te faut remplacer HChangeConnexion(sdSqlO,cnxO) et HChangeConnexion(sdSqlD,cnxD) par HChangeConnexion(sFicO,cnxO) et HChangeConnexion(sFicD,cnxD). En effet, ce sont les fichiers qui doivent changer de connexion et non les sources de données.

Personnellement, j'aurais fait quelque chose comme ça:

cnxO est une Connexion
cnxD est Connexion
sFicO, sFicD, sBddO, sBddD est une chaîne

sBddO="PREPROD"
sBddD="PROD"

sFicO="Article"
sFicD="Artcile"

HDécritConnexion(cnxO,"Admin","","srv1",sBddO,hAccèsHFClientServeur) ALORS
HDécritConnexion(cnxD,"Admin","","srv2",sBddD,hAccèsHFClientServeur)
HChangeConnexion(sFicO,cnxO)
HChangeConnexion(sFicD,cnxD)

POUR TOUT {sFicO,indFichier} AVEC "CodeArt" = "AA128"
HRAZ(sFicD)
HCopieEnreg(sFicD,sFicO)
HAjoute(sFicD)
FIN


Si le POUR TOUT ne fonctionne pas, tu peux le faire avec un parcours HLitRecherchePremier(), HlitSuivant() qui lui fonctionnera. Il te reste à traiter les erreurs et les exceptions.

Bon dev,

Philippe
Posté le 07 décembre 2015 - 19:10
Je n'arrive pas à utiliser votre exemple
Avez vous un code qui fonctionne ?
Mon code doit lire une requête sur un fichier Origine d'un Serveur Origine pour copier des enregistrements vers un fichier destination identique d'un autre serveur puis supprimer les enregistrements du fichier origine
en vous remerciant
Posté le 09 décembre 2015 - 15:09
Bonjour,

Sur quelle version de windev travaillez-vous ?

Philippe
Membre enregistré
197 messages
Popularité : +9 (9 votes)
Posté le 09 décembre 2015 - 17:39
Exemple pour aller vers des tables de bases Access dont le nom de chaque base est contenu dans une table d'une autre base

sCodAff est une chaine//nom du fichier Access sans son extension .mdb
sCHAINECONNEX est une chaîne

sCodAff = //aller lire dans la table source des noms

sCHAINECONNEX = "R:\M\D\F\"+sNomRepDossier+"\"+sCodAff+".mdb"//chaine de point de connexion
SI fFichierExiste(sCHAINECONNEX) ALORS
bFexiste = Vrai
FIN
SI bFexiste = Vrai ALORS
HDécritConnexion("FACTUREScnx", "", "",sCHAINECONNEX,"",hOledbAccess2000,hOLecture,"")//Connexion sur la BASE.MDB
HOuvreConnexion(FACTUREScnx)
HChangeConnexion(Table,FACTUREScnx)//connexion sur la table de la BASE.MDB
HOuvre(Table)
SI HLitPremier(Table) = Vrai ALORS //TOUTES LES DONNEES DE LA TABLE DE LA BASE CONNECTée SONT ACCESSIBLES