Page 1 sur 1

Affichage page par page odbc ms access

Posté : 12 févr. 2008, 23:16
par ulo
Bonsoir,
je souhaite faire un affichage page par page afin d'avoir des liens vers les autres pages(d'autant plus que je n'autorise que 20 enregistrements a afficher par page).
Les sujets traitant de l'affichage page par page sont tous avec mysql.
Par contre moi j'utilise une base de donnée sous ms access 2003 pour afficher mes données dans un tableau php. Et c'est sous php que j'aimerais faire un affichage page par page.
Merci de m'expliquer la marche à suivre.
Bye

Posté : 13 févr. 2008, 07:42
par Cyrano
Le principe général est exactement le même à un détail près : la clause LIMIT étant propre à MySQL, tu devras trouver une méthode différente pour ne récupérer qu'un nombre x d'enregistrements.

Première idée : effectuer une première requête pour lister toutes les clés primaires de façon à faire par la suite une requête avec une clause WHERE sur cette clé primaire pour ne conserver que les lignes dont la clé est > à point de départ et < à maximum. Et pour ne pas refaire cette première requête à chaque page, tu pourrais utiliser une variable de session pour en conserver le résultat, et donc pour chaque page, vérifier si cette variable de session existe bien ou s'il faut faire la requête.

Posté : 13 févr. 2008, 11:13
par ulo
Bonjour,
Le problème pour moi, c'est que je suis débutant ( :wink: ).
Et voici le code qui me permet d'afficher mes données dans ma page php:

Code : Tout sélectionner

<?php $dsn="monshop"; // identifiant dsn $user=""; // login $password=""; // password $cnx = odbc_connect( $dsn , "", "" ); $sql = "SELECT TOP 20 * FROM shop ORDER BY [Date], [Heure] desc"; $requete = odbc_do($cnx, $sql) ; while(odbc_fetch_row($requete)) { $Date = odbc_result($requete,"Date"); $Heure = odbc_result($requete,"Heure"); $Exp = odbc_result($requete,"Exp"); $Message = odbc_result($requete,"Message"); ?> <tr> <td bgcolor="#CCCCCC" width="7%"><div align="center"><?php echo $Date ; ?></td> <td bgcolor="#CCCCCC" width="7%"><div align="center"><?php echo $Heure ; ?></td> <td bgcolor="#CCCCCC" width="10%"><div align="center"><?php echo $Exp ; ?></div></td> <td bgcolor="#CCCCCC" width="40%"><div align="center"><?php echo $Message ;?></div></td> </tr> <?php }odbc_close($cnx); ?> </table>
Mon souci est de pouvoir avoir des liens pour les autres enregistrements
ET là je sèche grave.
Merci

Posté : 13 févr. 2008, 11:45
par Cyrano

Posté : 13 févr. 2008, 17:06
par ulo
Salut,
Sur le base de vos conseils,
As-tu lu le tuto de la FAQ sur l'affichage page par page ?
je cherche a réécrire ce code

Code : Tout sélectionner

$sql_n = "SELECT nouv_titre, nouv_texte, nouv_date FROM nouvelles LIMIT "
afin qu'il puisse être valide sous ms access pour pouvoir l'exploiter.
Merci

Posté : 13 févr. 2008, 17:40
par Cyrano
Ok, on va donc revenir à la première réponse que je t'ai faite : cette clause LIMIT pose problème, il faut donc procéder autrement, avec par exemple une clause WHERE où tu pourrais indiquer la première ligne et la dernière ligne d'un nombre x de lignes à récupérer. Et pour faire ça, il faudrait au départ effectuer une requête qui liste identifiants des les lignes qui t'intéressent.

Est-ce que tu commences à saisir la manœuvre ?

Posté : 13 févr. 2008, 17:53
par ulo
Est-ce que tu commences à saisir la manœuvre ?
OUI
il faut donc procéder autrement, avec par exemple une clause WHERE où tu pourrais indiquer la première ligne et la dernière ligne d'un nombre x de lignes à récupérer
Mes données sont permanemment mis à jour. Donc les identifiants augmente à chaque moment. (exple en ce moment je suis a 4863 et d'ici une heure je serais à un peu plus).
Merci

Posté : 13 févr. 2008, 18:33
par Cyrano
Dans ce cas, tu dois mettre à jour les identifiants stockés périodiquement, par exemple, tu fixes un paramètre de configuration établissant un timeout, mettons 10mn : en récupérant ta liste, tu la mets dans une variable de session : tu enregistres une autre variable de session avec le timestamp correspondant au moment de cette récupération : à chaque nouvelle page, tu vérifies la validité du timestamp et selon le cas, tu affiches les informations ou tu effectues une nouvelle requête pour mettre à jour ta liste et tu remets alors également à jour le timestamp... et c'est reparti pour 10mn.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 13 févr. 2008, 19:20
par ulo
Dans ce cas, tu dois mettre à jour les identifiants stockés périodiquement, par exemple, tu fixes un paramètre de configuration établissant un timeout, mettons 10mn : en récupérant ta liste, tu la mets dans une variable de session : tu enregistres une autre variable de session avec le timestamp correspondant au moment de cette récupération : à chaque nouvelle page, tu vérifies la validité du timestamp et selon le cas, tu affiches les informations ou tu effectues une nouvelle requête pour mettre à jour ta liste et tu remets alors également à jour le timestamp... et c'est reparti pour 10mn.
.
Pour un débutant de ma trempe, la tâche s'avère délicate alors :( .
Bof j'essaierai d'être positif en attendant d'avoir unse soluce.
Merci

Posté : 13 févr. 2008, 21:23
par Cyrano
Tu dois être encore plus positif que ça en songeant que tu vas trouver toi-même la solution.
Découpe le problème global en problèmes plus petits et résous les un à la fois.

Le premier problème consiste à concevoir la requête qui va te permettre de faire la liste des identifiants que tu dois stocker temporairement.

Second problème, les variables de session : comment les crée-t-on ?

Ensuite tu auras les éléments pour reprendre là où les tutos avec MySQL fonctionnent : tu dois adapter la requête en remplaçant la clause LIMIT par une clause WHERE.

Petit à petit ulo, un pas après l'autre, n'essaye pas de tout résoudre en même temps ;)