Téléchargement
illégal
Posez votre question Signaler

[ODBC-Excel] Echec connexion [Résolu]

Moeb 103Messages postés 21 avril 2008Date d'inscription - Dernière réponse le 29 avril 2008 à 10:00
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é.
<?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 >_<
Lire la suite 

[ODBC-Excel] Echec connexion »

1 réponses
Réponse
+1
moins plus
J'ai trouvé mon soucis, il suffisait que je mette $m_oPDO et $m_oStatement en protected au lieu de private, j'avais tout regardé sauf ca..
Ajouter un commentaire
Ce document intitulé « [ODBC-Excel] Echec connexion » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?