formater une date avant un between pour db access

Eléphant du PHP | 72 Messages

13 janv. 2012, 16:50

Bonjour à tous

je n'arrive pas à trouver les infos concernant les specificités d'une base de données access.

Je travaille avec une base données access avec un champ dateFacture de type dateTime exemple => 11/04/11 00:00

L'utilisateur a besoin d'effectueur une requete entre deux dates mais je ne sais pas comment l'envoyer en php

Voici ma requete
$iValeurDebutPeriode = wb_get_text(wb_get_control($window,IDC_DebutPeriode));
					$iValeurFinPeriode = wb_get_text(wb_get_control($window,IDC_DebutPeriode));
	$oConnection=GetConnectionDb1::GetConnection();
					
				
					$oPDOStatement=$oConnection->query('SELECT B.reference,C.nomProprietaire,C.numeroFacture,C.tarifTotal,C.tarifTotalHT 
															     FROM ((detailFacture AS A
																 INNER JOIN commande AS B ON A.idCommande = B.idCommande)
																 INNER JOIN facture AS C ON C.idFacture = A.idFacture)
																 WHERE C.dateCreation BETWEEN '.$iValeurDebutPeriode.' AND '. $iValeurFinPeriode);
Mais la requete ne me renvoit pas de deux . l'utilisateur rentre une date de la maniere suivante 08/11/2011.

J'ai essayé pas mal de truc comme 08-11-2011 00:00 et d'autres sans aucun jeu de resultat à la clef.

Merci pour votre aide

ViPHP
ViPHP | 2577 Messages

13 janv. 2012, 17:12

Le plus simple et de fournir les dates sous forme de chaine de caractères et d'utiliser une fonction de transformation dans l'ordre SQL. Soit transformer la chaine de caractère en datetime soit transformer la date de la base de données en chaine de caractères.

Eléphant du PHP | 72 Messages

13 janv. 2012, 17:20

Je suis meme obligé de faire avec la premiere proposition. à quel fonction de transformation penses tu ?

merci

Eléphant du PHP | 72 Messages

13 janv. 2012, 18:02

voici comment apparait les dates dans une requete effectué à partir de open office base

{D '2011-11-13' } AND {D '2011-11-10' }

Eléphant du PHP | 72 Messages

07 févr. 2012, 12:04

Bon j'ai pas mal avancé depuis mais j'ai un souci entre ce que me renvoit ma requqete quand je l'utilise directement dans access et ce qui m'est renvoyé par php à savoir
SELECT B.nomProprietaire AS nomProprietaire, B.reference AS reference, C.dateCreation AS dateCreation, C.numeroFacture AS numeroFacture, C.tarifTotal AS tarifTotal, C.tarifTotalHT AS tarifTotalHT	FROM ((detailFacture AS A 
													INNER JOIN commande AS B ON B.idCommande=A.idCommande)
													INNER JOIN facture AS C ON C.idFacture=A.idFacture)
													WHERE C.dateCreation BETWEEN {D '2011-12-10'} AND {D '2011-12-13'};
me renvoit 10 resultat dans access

alors que mon code php me renvoit un seul resultat
/** fonction de transformation de date entrée par l'utilisateur à des fins d'une recherche dans la base de données access
 * @ date : date entrée sous la forme par l'utilisateur 01/02/2011
 * @ return date : date formatée attendu par la base de données access {D '2011-02-01'}
 **/
 function ConversionEnDateCompatibleDbAccess ($iDateEntreUtilisateur){
 
	list($iJour,$iMois,$iAnnee) = explode ('/',$iDateEntreUtilisateur);
	$iDateFormatee = '{D\''.$iAnnee.'-'.$iMois.'-'.$iJour.'\'}';
	return $iDateFormatee;
 }
$oConnection=GetConnection::GetConnection();
$oPDOStatement=$oConnectionAnalysimmo->query('SELECT B.nomProprietaire AS nomProprietaire, B.reference AS reference, C.dateCreation AS dateCreation, C.numeroFacture AS numeroFacture, C.tarifTotal AS tarifTotal, C.tarifTotalHT AS tarifTotalHT
													FROM ((detailFacture AS A 
													INNER JOIN commande AS B ON B.idCommande=A.idCommande)
													INNER JOIN facture AS C ON C.idFacture=A.idFacture)
													WHERE C.dateCreation BETWEEN '.ConversionEnDateCompatibleDbAccess($iValeurDebutPeriode).' 
																	         AND '.ConversionEnDateCompatibleDbAccess($iValeurFinPeriode).'');
$aNomProprietaire=array();
					$aReference=array();
					$aDateCreation=array();
					$aNumeroFacture=array();
					$aTarifTotal=array();
					$aTarifTotalHt=array();
					
					while($aRow=$oPDOStatement->fetch()){
					
							$aNomProprietaire[]= $aRow['nomProprietaire'];
							$aReference[] = $aRow['reference'];
							$aDateCreation[]= $aRow['dateCreation'];
							$aNumeroFacture[]= $aRow['numeroFacture'];
							$aTarifTotal[]= $aRow['tarifTotal'];
							$aTarifTotalHt[] = $aRow['tarifTotalHT'];
						}
						
						
				$oConnection=NULL;
				unset($oConnection);
// on compte le nombre de resultat
				$iNbreNomProprietaire = count($aNomProprietaire);
				$iNbreReference= count ($aReference);
				$iNbreDateCreation= count ($aDateCreation);
				$iNbreNumeroFacture= count ($aNumeroFacture);
				$iNbreTarifTotal= count ($aTarifTotal);
				$iNbreTarifTotalHt= count ($aTarifTotalHt);

wb_message_box($window,$iNbreNomProprietaire.' ont été trouvé ','nombre de resultat renvoyés',WBC_WARNING); 
						
et la j'ai une message box m'informant que je n'ai qu'un jeu de resultat disponible !!!

j'utilise winbinder pour generer une interface graphique cliente.

OU se situe mon erreur? merci à vous