SQL error: Data type mismatch... mais non

Eléphant du PHP | 161 Messages

11 janv. 2006, 12:36

Yop tout le monde!
voila j'ai besoin de me connecter a une base de donnée Access et donc j'utilise un driver odbc.

Or j'ai l'erreur SQL suivante:

Code : Tout sélectionner

odbc_exec() [<a href='function.odbc-exec'>function.odbc-exec</a>]: SQL error: [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression., SQL state 22005 in SQLExecDirect
Apparement une erreur de comparaison de données je dirait mais je trouve vraiment pas.

Voila la structure de mes tables:

Table people (MySQL):
_'cardNum' varchar(20)

Table tblCards (MS Access):
_'strCardIdentity' type string
_'lngCardnumber' type long

Table tblEmployee (MS Access):
_'lngProxCard' type long
_'intStatus' type int

et voila mon code:
$ben = new Mysql();
$ben->connect();

//selection du numéro de carte
$ben->sendQuery('SELECT id,cardNum FROM people order by firstname');
//...

//tant que ya des employés
while($staff = $ben->fetchQuery())
{
$card = new Odbc();
$card->connect();

$cardNum = $staff['cardNum'] ;
//fait la correspondance entre le numéro de la carte et celui de l'employé
$card->sendQuery('SELECT lngCardnumber FROM tblCards WHERE strCardIdentity=\''.$cardNum.'\'');

//s'il a trouvé la carte
if($cardId = $card->display('lngCardnumber')) {
		$status = new Odbc();
		$status->connect();
		
		//s'il ne trouve pas d'employé correspondant au numéro de carte
		if(!$status->sendQuery('SELECT intStatus FROM tblEmployee WHERE lngProxCard=\''.$cardId.'\'')) {
			//status inconnu = -1
			$xml .= '  status="-1"';
		}
		else {
			//s'il a trouvé, affiche le status (1 ou 0)
			$xml .= ' status="'.$status->display('intStatus').'"';
		}
		$status->close();
	}

	//s'il a pas trouvé le numéro de carte 
	//status inconnu = -1
	else {
		//$xml .= '  status="-1"';
	}
$card->close();
}
//...
Je sais pas si quelqu'un a repéré quelque chose?
merci beaucoup d'avance :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

11 janv. 2006, 13:40

Je pense que ton pb doit plutôt venir de la connexion

Donne nous le code de Odbc->connect()
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 161 Messages

11 janv. 2006, 13:58

Le code est la.

Mais je pense pas que le probleme soit la methode connect(). J'ai fais pas mal de test assez simple qui ont marché.

Et surtout la ligne qui retourne l'erreur c'est la ligne 70 de ma class odbc:
else if(!$this->result_id = odbc_exec($this->connect_id,$query)) { 
qui correspond a l'execution de la requete :shock:

donc je ne sais pas trop ce que vous en pensez?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

11 janv. 2006, 14:25

Fait afficher les requetes générées afin de le valider directement depuis Access
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 161 Messages

11 janv. 2006, 19:24

En fait, c'est bizare mais php me retourne $cardId
if($cardId = $card->display('lngCardnumber')) { 
en string...
Et donc apres forcement que je lui demande de chercher $cardId dans l'autre table il me sort un probleme de type vu que dans les tables c'est un long...

Enfin voila comment j'ai résolu le probleme ($cardId = $cardId + 0;) :
$card = new Odbc();
	$card->connect();
	$cardNum = $staff['cardNum'] ;
	$card->sendQuery('SELECT lngCardnumber FROM tblCards WHERE strCardIdentity=\''.$cardNum.'\'');
	if($cardId = $card->display('lngCardnumber')) {
		$cardId = $cardId + 0;
		if(!$card->sendQuery('SELECT intStatus FROM tblEmployee WHERE lngProxCard='.$cardId.'')) {
			$xml .= '  status="-1"';
		}
		else {
			$xml .= ' status="'.$card->display('intStatus').'"';
		}
	}
	else {
		//$xml .= '  status="-1"';
	}
	$card->close();
Pas tres propre mais bon ca marche.
Est ce que l'utilisation de odbc_fetch_assoc a fait que ca me converti tout en string?

En tout cas merci quand meme pour ton aide Zeus!