|
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") |
| |
| |
| | | |
|
| | | | |
| | |
|