King Nothing Posté(e) le 25 novembre 2008 Partager Posté(e) le 25 novembre 2008 Bonjour, Je développe une page PHP qui se ballade dans plusieurs dossier et se connecte aux basses Access qu'il rencontre pour récuperer quelques données. J'utilise donc odbc mais j'ai un soucis avec la fonction odbc_close() Elle ne fonctionne pas du tout, du coup à chaque tour de boucle odbc_connect() crée une nouvelle ressource et un bout d'un certain nombre Access dit STOP : Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] Trop de tâches client., SQL state 08004 in SQLConnect D'après les docs odbc_close() échoue si une transaction est encore en cours, pourtant autocommit est activé, par précaution j'ai ajouté des odbc_free_result() un peu partout mais ça ne change rien. Pour avoir les idées plus clair j'ai fais ce script tout simple : <?php $cnx = odbc_connect("testodbc", "root", "") or die ("Erreur du connect"); odbc_close($cnx) or die("Erreur du close"); ?> Résultat : Erreur du close. Je passe à coté de quelque chose mais je ne voi pas quoi. Lien vers le commentaire Partager sur d’autres sites More sharing options...
King Nothing Posté(e) le 26 novembre 2008 Auteur Partager Posté(e) le 26 novembre 2008 Il semblerais après avoir découvert la fonction var_dump() que la fonction odbc_close() fonctionne très bien. Je n'ais donc plus aucune piste pour le problème d'origine. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 26 novembre 2008 Partager Posté(e) le 26 novembre 2008 odbc_close ne retourne rien, tu iras toujours dans le die Lien vers le commentaire Partager sur d’autres sites More sharing options...
King Nothing Posté(e) le 26 novembre 2008 Auteur Partager Posté(e) le 26 novembre 2008 Oui c'est ce que j'ai compris après, mais je bloque toujours avec ce message d'erreur : Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] Trop de tâches client., SQL state 08004 in SQLConnect Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 26 novembre 2008 Partager Posté(e) le 26 novembre 2008 Tu as essaye en te connectant sans passer par un dsn systeme ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
King Nothing Posté(e) le 27 novembre 2008 Auteur Partager Posté(e) le 27 novembre 2008 Oui je fais comme ça : $cnx = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".$fichier.";", "", ""); Je n'ai pas le choix ne connaissant pas à l'avance les bases auxquelles je vais me connecter. De plus il y en a bien une centaine. Lien vers le commentaire Partager sur d’autres sites More sharing options...
thiiil Posté(e) le 27 novembre 2008 Partager Posté(e) le 27 novembre 2008 tu bosses en local ou tu es sur un serveur de dev / prod ? Car c peut être un soucis de config serveur j'ai eu un prestataire une fois dont la config obscure bloquer tout mon code. Lien vers le commentaire Partager sur d’autres sites More sharing options...
King Nothing Posté(e) le 27 novembre 2008 Auteur Partager Posté(e) le 27 novembre 2008 Je bosse avec easyphp sur serveur 2003, les bases access sont toutes situées en local sur le serveur. Il n'a pas l'air d'avoir de configuration particulière, je lance mes scripts depuis un autre poste, tous le script PHP fonctionne juqu'a un certain nombre de bases. En effet le script se connecte bien pour les 60 premières bases environ mais après il ne veut plus. Sachant qu'il y est des utilisateurs connecter ou non sur les bases ça fonctionne mais toujours avec cette limite. De plus ce script existe en vba depuis une autre base acces et fonctione parfaitement, le hic c'est que office n'est pas installé sur le serveur 2003 mais seulement sur tous les autres postes d'utilisateurs. Ce qui oblige à utiliser cette base de consultation sur un autre poste et c'est très lent. La solution php me parraissait parfaite jusqu'a que je tombe sur cette erreur. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 27 novembre 2008 Partager Posté(e) le 27 novembre 2008 Apres un petit test en local, essaye en changeant la prtie de la deconnection : [...] odbc_close($cnx); ?> devient [...] odbc_close($cnx); odbc_close_all(); ?> C'est passer, sur mon jeu de test. Lien vers le commentaire Partager sur d’autres sites More sharing options...
King Nothing Posté(e) le 27 novembre 2008 Auteur Partager Posté(e) le 27 novembre 2008 Merci. J'avais déjà testé la fonction odbc_close_all() mais avec le die() et depuis je ne l'ai pas retester en pensant que cela ne venait plus du close(). La fonction odbc_close() ne fonctionne pas comme je le pensais, en tous cas close_all à l'air de bien fonctionner, j'ai ouvert 140 bases sans problèmes. Pour conclure je ne sais pas à quoi sert odbc_close($cnx) mais odbc_close_all() est bien plus efficace. RESOLU. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.