PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Comment eviter les connexions/deconnexions a chaque requete oledb oracle
Comment eviter les connexions/deconnexions a chaque requete oledb oracle
Débuté par laurent volfovsky, 12 oct. 2005 11:39 - 3 réponses
Posté le 12 octobre 2005 - 11:39
Bonjour,

J'effectue dans une mini application la lecture d'un fichier texte pour en insérer le contenu dans une table d'une base oracle, à travers un lien 'oledb pour oracle' (décrit dans l'analyse) et via un 'insert' pour chaque ligne du fichier texte.
Du classique donc (il me semble...) et qui d'ailleurs fonctionne très bien.

MAIS je me fais honnir par mes collègues utilisateur de cette base, car à chaque insert, WD (version 9) effectue une ouverture de session, l'insert, puis une fermeture de session.
ouverture et fermeture étant loggués dans un journal de bord, celui-ci se remplit allègrement de 2 x plusieurs dizaine de milliers de lignes...
par ailleurs, chaque 'insert' est évidemment 'commité' automatiquement. Pas très efficace...

Ma question est: est-il possible de n'effectuer qu'une seule connexion au début de l'ensemble des opération, et 1 seule déconnexion à la fin.
Cela passe-t-il par une connexion à la base sans passer par l'analyse ?

Merci pour vos lumières.
Posté le 12 octobre 2005 - 12:54
Je suis en train de tester ça, justement.
Posté le 12 octobre 2005 - 14:04
Personnellement j'effectue une connexion au lancement de l'appli puis
déconnexion à sa fermeture

"laurent volfovsky" <lvolf@libertysurf.fr> a écrit dans le message de
news:434cc4ee@news.pcsoft.fr...

Bonjour,

J'effectue dans une mini application la lecture d'un fichier texte pour en

insérer le contenu dans une table d'une base oracle, à travers un lien
'oledb pour oracle' (décrit dans l'analyse) et via un 'insert' pour chaque
ligne du fichier texte.
> Du classique donc (il me semble...) et qui d'ailleurs fonctionne très
bien.

MAIS je me fais honnir par mes collègues utilisateur de cette base, car à

chaque insert, WD (version 9) effectue une ouverture de session, l'insert,
puis une fermeture de session.
> ouverture et fermeture étant loggués dans un journal de bord, celui-ci se
remplit allègrement de 2 x plusieurs dizaine de milliers de lignes...
par ailleurs, chaque 'insert' est évidemment 'commité' automatiquement.

Pas très efficace...

Ma question est: est-il possible de n'effectuer qu'une seule connexion au

début de l'ensemble des opération, et 1 seule déconnexion à la fin.
Cela passe-t-il par une connexion à la base sans passer par l'analyse ?

Merci pour vos lumières.
Posté le 12 octobre 2005 - 14:49
Je confirme: c'est mieux et 20 à 50 fois plus rapide...

pour info, le code:


idfichier_origine est un entier
buffer_ligne est une chaîne
entete_sql est une chaîne
buffer_sortie est une chaîne

//-----------------------
//--- description
SI HDécritConnexion("TOTO" , "admin" , "admin" , "TOTO.ZZ.XX.FR" , "" ,hOledbOracle) = Faux ALORS
Erreur(HErreurInfo)
RETOUR
FIN
//--- ouverture
SI HOuvreConnexion("TOTO") = Faux ALORS
Erreur(HErreurInfo)
RETOUR
FIN

//--- entete de requete sql
entete_sql = "INSERT INTO TMP_CP_FRA ( CP, LOCALITE, LANGUE) VALUES ("

idfichier_origine = fOuvre(Ficher_origine, foLecture )
SI idfichier_origine <> -1 ALORS
//---- création du fichier de sortie ----
//---- Lecture d'une ligne dans ce fichier ----
buffer_ligne = fLitLigne (idfichier_origine)
//---- Parcours de toutes les lignes ----
TANTQUE buffer_ligne<>EOT ET buffer_ligne<>""
compteur_ligne++
buffer_sortie = entete_sql
// N.B. traitement_apostrophes est une fonction qui double les apostrophes d'une chaine
buffer_sortie = buffer_sortie + "'" + traitement_apostrophes(Milieu(buffer_ligne,6,5)) + "', "
buffer_sortie = buffer_sortie + "'" + SansEspace( traitement_apostrophes(Milieu(buffer_ligne,11,30)) ) + "', "
buffer_sortie = buffer_sortie + "'FRA')"
//---- execution de la requete ----
SI HExécuteRequêteSQL ("RQT","TOTO" ,hRequêteSansCorrection, buffer_sortie )=Faux ALORS
Erreur(HErreurInfo)
SORTIR
FIN
//---- lecture ligne suivante ----
buffer_ligne = fLitLigne (idfichier_origine)
FIN
fFerme(idfichier_origine)
Info("Traitement terminé")
FIN

//---- fermeture conxion ----
HFermeConnexion("TOTO")