woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007
-
5 juil. 2006 à 12:01
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007
-
6 juil. 2006 à 17:05
Salut à tous,
Voilà, dans mon programme, je dois travaillé sur une table access qui comporte environ 16 000 entrées!
Et lorsque je fais mes test de chaque fonction avec un 'limiteur' qui ne traite donc qu'une centaine de champs, l'éxécution ce passe bien.
Mais lorsque je fais le traitement sur toute la table, l'éxécution ne termine pas même si l'on ne teste qu'une fonction!
Par exemple, cette fonction est en éxécution depuis 30min! :
public
void NettoyeTitre(){InitialiserCorrespondances();
string chaine;
string lineCmd "UPDATE M9004_CONTACTSYNC SET TITLE '{0}' WHERE CONTACTSYNCID = {1}";
string req =
"SELECT TITLE ,CONTACTSYNCID FROM M9004_CONTACTSYNC";ADODB.
Recordset Recordset =
new ADODB.
Recordset();Recordset.Open(req, chaineDeConnection2, ADODB.
bernie666
Messages postés427Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention29 janvier 20081 5 juil. 2006 à 12:13
Si ton pc est un 486Dx2 ... sa peut poser quelques soucy ... mais 16 000 entrées normalement il de devrai pas y avoir de probleme ... si le traitement de ta fonction est lourd => tu peux développer un process a coté qui te cleanra tes titres en asynchrone (ou au moins utiliser les threads) comme ca ton application ne seras pas bloquée
gcorbineau -> Il y a un Recordset.MoveNext, c'est la dernière ligne de la fonction;) juste après l'éxécution de la commande odbc.
bernie666 -> Je ne comprend pas trop ce que tu veu dire...
Mais en faite, ce que je ne comprend pas c'est que lorsque j'effectue un debugg, ça fonctionne très bien!
De même, lorsque l'on limite le nombre d'entrées à traiter.
De plus, il y a autre chose que je ne comprend pas, lorsque je click sur mon bouton démarrer, je copie la base d'origine pour la mettre dans un autre répertoire, histoire de ne pas détruire ma base.
Mais le faite est que dès que j'éxécute une fonction, la base est mal copier, exemple :
1ere exemple, lorsque la base est bien copier :
bernie666
Messages postés427Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention29 janvier 20081 5 juil. 2006 à 14:13
"Et là, lorsque j'éxécute 'NettoyeAdresse(), il me vide ma table mais me laisse le nom des champs! :" <= tu veux faire quoi exactement ? vider la table ET le nom des champs ? si oui => DROP TABLE ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 5 juil. 2006 à 14:21
Non en faite je souhaite enlever des espaces, les accents, mettre en majuscule, supprimer les caractères spéciaux...
En gros ôter tous ce qui est inutile mais garder une lisibilité de la table, donc faire une éspèce de 'compression'.
Donc je souhaite garder tous mes champs, toutes mes colonnes mais justement, le problème est que quand j'éxécute une fonction pour nettoyer un champs, il me supprime toutes les entrées de la table! (ce que je ne souhaite donc pas!)
En faite j'ai l'impression qu'il me copie mal la table, mais ce n'est pas le cas vu que quand je n'éxécute pas de fonction, il le fait très bien.
Donc le problème doit ce situer dans une optimisation du code mais je ne sais pas ou, d'où mon topic!
Si quelqu'un a une idée...
bernie666
Messages postés427Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention29 janvier 20081 5 juil. 2006 à 14:25
Oui ton probleme de base comme tu me l'as dit est un probleme de temps d'execution de ta fonction ... => pour ne pas bloquer ton application => utilise des Threads
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 5 juil. 2006 à 17:14
Vraiment bizarre ton pb, on réalité j'ai eu le meme genre de pb mais pas avec une BDD.
Le thread permettra de ne pas bloquer ton appli, mais pas de résoudre ton pb.
En debug, ton programme rame, donc access a un peu plus de temps pour faire ses update (ou autre). Et peut-etre qu'en exécution normal, access s'en prend plein la tête et plante quand il y a trop de records.
Ca fait un moment que je n'ai pas fait de BDD pour mieux te renseigner. Il faudrait peut-etre tester avec SQL Server Express pour voir si c'est ton programme qui fait planté ou si c'est access qui n'en peut plus. Mais bon faut avoir SQL sous la main et un peu le connaitre.
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 5 juil. 2006 à 17:19
Et bien enfaite, comme dis auparavant, quand j'éxécute (et non debugg) avec peu d'entrées sélectionner, ça marche.
Mais quand j'éxécute avec toutes les entrées de la base, ça ne marche pas du tout, de plus, ça me supprime les entées de ma table!
Ce n'est donc pas qu'en debugg que c'est lent, mais aussi en éxécution!
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 5 juil. 2006 à 17:30
Tu dit dans ton 1er message que ca tournait depuis 30min en release et c'était pas fini. Et
quand tu lances ton programme avec Visual en debug, ca met combien de
temps ?
En gros as-tu fait des tests de temps avec/sans Visual et release/debug.
N'oublie pas de créer le thread (fonction NettoyeTitre), c'est plus propre.
PS : Je pars dans l'hypothèse (peut-etre mauvaise) que c'est Access qui
merde, mais là faudrait qu'un spécialiste Access te réponde.
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 5 juil. 2006 à 17:43
En faite ça faisait 30 min que ça tournait en éxécution mais je l'ai laisser tourner 2h et la fonction n'était toujours pas terminée! (que ce soit en debugg ou non, mais au bout de 2h, j'ai coupé)
Pour le thread, je n'aurais pas le temps de le mettre en place en vue du temps qui me reste et puis, il faudrait que je me documente car c'est la première fois que je code en c#!
Donc voilà, le thread c'est foutue pour moi...
Pour ton hypothèse, je ne pense pas que access merde, enfin rien d'apparent en tout cas.
Donc je vais faire un appel solanel (ça s'écrit comme ça?) :
Y-a-t'il un spécialiste access par ici?
Merci
P.S.: Pour la suppression des entrées de la table, je pense que c'est moi qui ait foirer dans une requête DELETE! Mais ce n'est pas sûr je suis encore en train de tester.
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 6 juil. 2006 à 14:09
Mais pour utiliser un thread, il faut que toutes les fonctions soit statiques?
Car il me dit que mes fonctions ne sont pas statiques ce qui me génère des erreurs...