[ODBC-Excel] Echec connexion
Résolu
Moeb
Messages postés
102
Date d'inscription
Statut
Membre
Dernière intervention
-
Moeb Messages postés 102 Date d'inscription Statut Membre Dernière intervention -
Moeb Messages postés 102 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je vous expose mon problème : je développe un logiciel qui, entre autre choses a besoin de récupérer des infos contenues dans un fichier Excel. Je gère donc la connexion au fichier Excel par ODBC, et j'utilise PDO. Voici le code incriminé.
D'abord, mon probleme se posait au niveau du prepare, pour lequel il me disait que $mydb n'était pas un objet, j'ai donc cru que le constructeur ne marchait pas, mais il fonctionne, le probleme vient du connect, la condition "or die" s'exécute à chaque fois... Voilà le code de la classe DBPDO_ODBC et celui de sa classe parente DBPDO
J'ai essayé plusieurs choses, notamment de simplifier cette structure de DBPDO_ODBC qui hérite de DBPDO pour voir s'il s'emmelait les pinceaux dans le connect. Et visiblement oui, quand je mets tout le code de connexion dans le connect de DBPDO, il ne rentre plus dans le "or die", et me refait l'erreur "call to prepare() on a non-object".
J'ai testé avec un is_object, pour vérifier, et $mydb est bien un objet. Help >_<
je vous expose mon problème : je développe un logiciel qui, entre autre choses a besoin de récupérer des infos contenues dans un fichier Excel. Je gère donc la connexion au fichier Excel par ODBC, et j'utilise PDO. Voici le code incriminé.
<?php require 'DBPDO_ODBC.class.php'; $config_odbc = array(ODBC_DRIVER => 'Microsoft Excel Driver (*.xls)', ODBC_FILE => 'C:\wamp\www\Vannes\logs.xls' ); $mydb = new DBPDO_ODBC($config_odbc); $mydb->Connect() or die ("Impossible de se connecter au fichier Excel. Verifiez vos infos de connexion"); $mydb->Prepare("SELECT * FROM [Extraction$]"); $mydb->Execute(); ?>
D'abord, mon probleme se posait au niveau du prepare, pour lequel il me disait que $mydb n'était pas un objet, j'ai donc cru que le constructeur ne marchait pas, mais il fonctionne, le probleme vient du connect, la condition "or die" s'exécute à chaque fois... Voilà le code de la classe DBPDO_ODBC et celui de sa classe parente DBPDO
<?php define("ODBC_DRIVER", "ODBC_DRIVER"); define("ODBC_FILE", "ODBC_FILE"); define("ODBC_USER", "ODBC_USER"); define("ODBC_PWD", "ODBC_PWD"); if (!class_exists('DBPDO')) { require(dirname(__FILE__) . '/DBPDO.class.php'); } class DBPDO_ODBC extends DBPDO { /**************************************************************/ /* CONNECT */ /* */ /* Permet de se connecter à la base en passant en paramètre la chaine de */ /* connexion qu'il faut. */ /* */ /**************************************************************/ public function Connect() { $this->m_oPDO = new PDO('odbc:Driver={'.$this->m_tabOptions[ODBC_DRIVER].'};Dbq='.$this->m_tabOptions[ODBC_FILE], $this->m_tabOptions[ODBC_USER], $this->m_tabOptions[ODBC_PWD]); return parent::Connect(); } } ?>
[quote="DBPDO"] <?php if (!class_exists('DB')) { require(dirname(__FILE__) . '/DB.class.php'); } class DBPDO extends DB { private $m_oPDO = null; private $m_oStatement = null; /**************************************************************/ /* CONSTRUCTEUR */ /* */ /* Permet de construire un DBPDO avec la configuration donnee par */ /* $options. */ /* */ /* $options : tableau contenant les informations de connexion a la base */ /* $oDbg : */ /* */ /**************************************************************/ function __construct($options, $oDbg=null) { $this->m_tabOptions = $options; } /**************************************************************/ /* CONNECT */ /* */ /* Permet de se connecter à la base */ /* */ /**************************************************************/ public function Connect() { if ($this->m_oPDO != null) return true; else return false; } /**************************************************************/ /* DISCONNECT */ /* */ /* Permet de se deconnecter de la base. */ /* */ /**************************************************************/ public function Disconnect() { unset($this->m_oPDO); } /**************************************************************/ /* PREPARE */ /* */ /* Prépare la future execution de la requete passee en parametre */ /* */ /* $sql : Requete SQL a preparer */ /* */ /**************************************************************/ public function Prepare($sql) { return $this->m_oStatement = $this->m_oPDO->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); } /**************************************************************/ /* EXECUTE */ /* */ /* Execute une requete precedemment preparee */ /* */ /**************************************************************/ public function Execute() { return $this->m_oStatement->execute(); } /**************************************************************/ /* FETCH */ /* */ /* Permet de récupérer les résultats d'une requête sous forme d'un */ /* qui peut avoir différentes formes selon le parametre $style */ /* */ /* $style : Style de retour du fetch (differents types de tableaux) */ /* */ /**************************************************************/ public function Fetch($style=FETCH_BOTH) { switch($style) { case 0 : return ( $this->m_tabResults = $this->m_oStatement->fetch(PDO::FETCH_ASSOC)); case 1 : return ( $this->m_tabResults = $this->m_oStatement->fetch(PDO::FETCH_NUM)); case 2 : return ( $this->m_tabResults = $this->m_oStatement->fetch(PDO::FETCH_BOTH)); } } /**************************************************************/ /* CONNECT */ /* */ /* Permet de récupérer une information précise du resultset courant en */ /* passant la clé (nom de la colonne) en parametre */ /* */ /* $sKey : Cle permettant d'acceder a un element précis du Resultset */ /* */ /**************************************************************/ public function Get($sKey) { return $this->m_tabResults[$sKey]; } } ?>
J'ai essayé plusieurs choses, notamment de simplifier cette structure de DBPDO_ODBC qui hérite de DBPDO pour voir s'il s'emmelait les pinceaux dans le connect. Et visiblement oui, quand je mets tout le code de connexion dans le connect de DBPDO, il ne rentre plus dans le "or die", et me refait l'erreur "call to prepare() on a non-object".
J'ai testé avec un is_object, pour vérifier, et $mydb est bien un objet. Help >_<
A voir également:
- [ODBC-Excel] Echec connexion
- Gmail connexion - Guide
- Liste déroulante excel - Guide
- Mode sans echec ps4 - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide