J'utilise dans mes traitements d'importation la fonction
HExecuteRequeteSQL. Lors des itérations (20796 dans le cas que je vous
propose) l'utilisation de la RAM (visible à partir de l'explorateur de
tâches de WinXP) grimpe en flèche. Par exemple : de 350 Mo de RAM
utilisé avant l'exécution de mon code, je termine à 1.04 Go de RAM
utilisé. C'est considérable.
Voici donc le code utilisé pour importer une base Btrieve qui est
locale sur le poste vers une base SQL Serveur, également locale sur le
poste de développement :
PROCEDURE Importer_Rue()
// Création de la table (accès natif SQLServeur installé)
HCréation(Rue_SQL)
NumConnexion est un entier
NomSource est une chaîne
REQImportRue est une Source de Données
// L'accès aux fichiers Btrieve se fait via un odbc nommé BTRIEVE_Taxes
NomSource = "BTRIEVE_Taxes"
NumConnexion = SQLConnecte(NomSource, "", "", "", "ODBC")
SI NumConnexion<>0 ALORS
// La connexion s'est bien passée
SQLExec("Select * from Rue", "REQBtrieve")
TANTQUE SQLAvance("REQBtrieve") = 0
// Importer la ligne courante (via une procédure stockée SQL Serveur)
// Je dois utiliser la commande Remplace pour éviter les problèmes
avec les apostrophes
HExécuteRequêteSQL(REQImportRue, GlbStrNomConnexion,
hRequêteSansCorrection, ...
"proc_Ajout_Rue '" + Remplace(SQLLitCol("REQBtrieve", 1), "'", "''")
+ "', '" + ...
Remplace(SQLLitCol("REQBtrieve", 2), "'", "''") + "', '" +
Remplace(SQLLitCol("REQBtrieve", 3), "'", "''") + "'")
SI HErreur ALORS GestionErreur(HErreurInfo())
FIN
SQLFerme("REQBtrieve")
SINON
// La connexion a échoué : affichage d'un message explicatif
SQLInfoGene()
strErreur est une chaîne = SQL.Erreur +RC+ SQL.MesErreur
SQLDéconnecte()
GestionErreur(strErreur)
FIN
// Dans tous les cas (connexion OK ou pas)
SQLDéconnecte()
HAnnuleDéclaration(REQImportRue)
-= Fin du code =-
J'ai essayé de plusieurs manières (une requête Insert Into avec
HExécuteRequeteSQL plutôt qu'une procédure stockée, utiliser la
fonction HPrépareRequêteSQL qui ne fonctionne apparemment pas, il me
reste à essayer avec des HAjoute) et jusqu'ici toujours le problème de
RAM qui disparaît comme neige au soleil (et même un peu plus vite...).
Voyez-vous où se situe mon problème ? Avez-vous les mêmes symptômes ?
Est-ce que je m'y prends de la mauvaise manière ? Je suis un peu perdu
et je n'arrive pas à trouver des pistes parmi les ressources
habituelles (aide en ligne, exemples, forums, site Web tels que
wdforge, etc...).
Merci bien à tout ceux qui auront une petite pensée pour moi ! :/
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Yanick Charland
<snip>
Problème résolu grâce à l'aide de [DrCharly93].
J'ai créé une connexion de type OLEDB sur ODBC pour les fichiers Btrieve que j'ai attaqués via un HExecuteRequeteSQL, puis j'ai utilisé les ordres HAjoute pour mon importation sur SQLServeur.
Toujours aucune idée cependant concernant l'utilisation de la mémoire qui ne semble pas se libérer en utilisant la commande HExecuteRequeteSQL pour l'importation sur SQLServeur, malgré la présence des HAnnuleDéclaration. La mémoire est libérée seulement à la toute fin de vie du logiciel...
Mais bon, il faut aussi se garder un petit côté "mystic coding" dans la vie, non ? :')
--
Yanick Charland
<snip>
Problème résolu grâce à l'aide de [DrCharly93].
J'ai créé une connexion de type OLEDB sur ODBC pour les fichiers
Btrieve que j'ai attaqués via un HExecuteRequeteSQL, puis j'ai utilisé
les ordres HAjoute pour mon importation sur SQLServeur.
Toujours aucune idée cependant concernant l'utilisation de la mémoire
qui ne semble pas se libérer en utilisant la commande
HExecuteRequeteSQL pour l'importation sur SQLServeur, malgré la
présence des HAnnuleDéclaration. La mémoire est libérée seulement à la
toute fin de vie du logiciel...
Mais bon, il faut aussi se garder un petit côté "mystic coding" dans la
vie, non ? :')
J'ai créé une connexion de type OLEDB sur ODBC pour les fichiers Btrieve que j'ai attaqués via un HExecuteRequeteSQL, puis j'ai utilisé les ordres HAjoute pour mon importation sur SQLServeur.
Toujours aucune idée cependant concernant l'utilisation de la mémoire qui ne semble pas se libérer en utilisant la commande HExecuteRequeteSQL pour l'importation sur SQLServeur, malgré la présence des HAnnuleDéclaration. La mémoire est libérée seulement à la toute fin de vie du logiciel...
Mais bon, il faut aussi se garder un petit côté "mystic coding" dans la vie, non ? :')