Forum d'entraide PHPFrance

Venez poser vos questions PHP, MySQL, HTML, CSS, Javascript, Gestion de serveurs à la communauté PHPfrance

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

formater une date avant un between pour db access

Questions sur le SQL et les bases de données (MySQL, PostgreSQL, etc..).

formater une date avant un between pour db access

Messagepar devcphp 13 Jan 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
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
$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
devcphp
Maitre du phpinfo()
 
Messages: 72
Inscription: 01 Déc 2008, 16:33

Publicité

Re: formater une date avant un between pour db access

Messagepar Mazarini 13 Jan 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.
Mazarini
ViPHP
ViPHP
 
Messages: 1383
Inscription: 27 Oct 2010, 21:05

Re: formater une date avant un between pour db access

Messagepar devcphp 13 Jan 2012, 17:20

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

merci
devcphp
Maitre du phpinfo()
 
Messages: 72
Inscription: 01 Déc 2008, 16:33

Re: formater une date avant un between pour db access

Messagepar devcphp 13 Jan 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' }
devcphp
Maitre du phpinfo()
 
Messages: 72
Inscription: 01 Déc 2008, 16:33

Re: formater une date avant un between pour db access

Messagepar devcphp 07 Fév 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

Syntaxe: [ Télécharger ] [ Masquer ]
Code sql
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
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
/** 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
devcphp
Maitre du phpinfo()
 
Messages: 72
Inscription: 01 Déc 2008, 16:33


Retourner vers SQL & Bases de données

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

  • Publicité