begin process at 2012 05 29 00:48:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

Autre

 > 

DATAPAGESIZE et odbc_exec()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

DATAPAGESIZE et odbc_exec()

lundi 11 décembre 2006 à 17:11:37 | DATAPAGESIZE et odbc_exec()

sdisp

Bonjour.

   J'ai une page php qui se connecte à un AS400, qui exécute une requête et qui affiche dans un tableau son résultat.

   Le souci que j'ai c'est qu'il peut y avoir beaucoup de ligne et j'aurai donc voulu afficher le résultat sur plusieurs pages.

   Je suis tout d'abord parti sur une requête avec une clause limit (select * from nom_table limit 0,10) et j'aurai donc ré exécuter ma requête à chaque changement de pages en changeant cette valeur dans ma requête (limit 0,10 pour la première page, limit 10,20 pour la deuxième...).
Mais cette instruction ne marche apparemment pas sur l'as400 (BDD de type DB2).

   Apres une petit recherche j'ai trouvé l'attribut DATAPAGESIZE ( [ Lien ]) que l'on peux ajouter à la balise <table> et qui permettrait de limiter le nombre de ligne que l'on affiche dans une table. Puis pour parcourir les autres pages il faudrait faire un nextPage.

   Mais il faut définir une DATASRC ( [ Lien ]) pour utiliser DATAPAGESIZE.

Je voudrai donc savoir si je peux définir cette DATASRC à partir du résultat de mon odbc_exec() et comment celà se ferait-il?

Une autre solution serai de mettre le résultat dans un tableau de session et de me débrouiller avec ce tableau pour afficher ce que je souhaite, mais je ne suis pas sur que ce soit une solution idéale?

D'autre solution?

Merci d'être arrivé au bout de ma question, j'espère avoir été compris.

Bonne journée.
mardi 12 décembre 2006 à 10:12:25 | Re : DATAPAGESIZE et odbc_exec()

malalam

Administrateur CodeS-SourceS
Hello,

tu trouveras ici :
http://www.phpcs.com/codes/PHP5-LIMIT-PACKAGE-LIMITATION-GENERIQUE-JEU-RESULTAT-ITERATEURS_40545.aspx
Une classe permettant de limiter un jeu de données.
Il n'y a pas de version odbc, mais il te suffit de prendre la classe mysqllimit ou mssqllimit, et de la réécrire en remplaçant simplement les mssql_num_rows(), mssql_fetch_assoc(), mssql_fetch_field avec les équivalents odbc.

mardi 12 décembre 2006 à 16:20:57 | Re : DATAPAGESIZE et odbc_exec()

sdisp

Bonjour.

Merci malalam celà me semble très bien je me penche dessus.

@+
mercredi 13 décembre 2006 à 17:09:47 | Re : DATAPAGESIZE et odbc_exec()

sdisp

Bonjour.

   Pour le moment je n'ai pas encore bien cerner comment fonctionne ce que tu m'as proposé Malalam (je n'ai pas eu beaucoup de temps pour l'étudier et suis certainement encore un peu trop novice). Mais je voudrais déjà te demander si la solution que tu me propose diminue le temps d'exécution de la requête? Ou si la requête est quand même exécuté sur tous les éléments?

   Pour le moment j'ai eu l'occasion de faire quelque chose avec le DATAPAGESIZE mais je me sers d'un fichier texte comme DATASRC dans lequel j'écris le résultat de ma requête, ce qui ne me semble pas être la meilleure solution surtout quand on a affaire à une requête qui retourne un grand nombre de ligne (perte de temps pendant l'écriture).

   Donc je reviens sur ma demande initiale qui était, puis-je faire une DATASRC à partir du résultat du odbc_exec() ou alors d'un tableau php?

Voici mon code:

<html>
    <body>
        <p align="center">
            <font size="5" face = "Arial"><b>Test AS400<br></b></font>
        </p>
        <?php
       
                // connexion à l'AS/400
                $link = odbc_connect("DRIVER=iSeries Access ODBC Driver;SYSTEM=X.X.X.X;", "xxx", "xxx");   //nom du driver;@ip_as400;login;mot_de_passe
                // requete à executé:
                $query = "SELECT * FROM nom_bilblioteque.nom_fichier";
                // execution de la requete
                $result = odbc_exec($link, $query);
               
                $tab_nom_col = array();     //varibale de type tableau pour sauvegarder le nom des colonnes
                $str_result="";     //variable de type chaine qui va permettre de creer le fichier avec le resultat de la requete

                if ($result == false){     //test si la requete a ete execute(ne marche pas!!!)
                    echo ("<B>Error " . odbc_error() . ": " . odbc_errormsg() . "</B>");
                }else{      //parcours du resultat
                    for ($i = 0; $i < odbc_num_fields($result); $i++) {     //parcours du nom des colonnes
                        $tab_nom_col[$i]=odbc_field_name($result,$i+1);     //on sauvegarde le nom de chaque colonnes dans un element du tableau tab_nom_col
                        $str_result.='"'.odbc_field_name($result,$i+1).'"';      //on sauvegarde le nom de chaque colonnes dans la chaine str_result
                        if($i!=odbc_num_fields($result)-1){     //si on est pas a la derniere colonne
                            $str_result.=';';       //on met un point virgule pour separer leurs noms
                        }
                    }
                    while(odbc_fetch_into($result , $prod) != FALSE) {       //parcours de chaque lignes
                        $str_result.="\r\n";        //on reviens a la ligne a la fin de chaques lignes
                        for ($j = 0; $j < odbc_num_fields($result); $j++) {       //parcours de chaque colonnes d'une lignes
                            $str_result.='"'.$prod[$j].'"';     //on sauvegarde chaques valeurs de chaques colonnes d'une lignes dans str_result
                            if($j!=odbc_num_fields($result)-1){     //si on est pas a la fin de la ligne
                                $str_result.=';';       //on met un point virgule pour separer leurs valeurs
                            }
                        }
                    }
                }
                //fermeture de la connec
                odbc_close($link);

                $path="./";     //chemin dans lequel le fichier sera cree
                $fp=fopen($path."connec_as400.txt","w");       //creation du fichier en ecriture, ecrasement s'il existe extension en .csv
                $ecrit=fputs($fp,$str_result);      //on ecrit le contenu de str_result dans le fichier
                fclose($fp);        //fermeture du fichier
           
        ?>
   
        <SCRIPT FOR=tdcElements EVENT=ondatasetchanged>     //permet de recuperer le nb d'elements
        // wait until the DSO announces the datasetchanged event before accessing the ADO recordset
        document.body.all('spanElemCount').innerText = tdcElements.recordset.recordCount;
    </SCRIPT>

        <OBJECT id=tdcElements CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">        <!--permet de definir le fichier comme source du tableau que l'on va afficher-->
            <PARAM NAME="DataURL" VALUE="connec_as400.txt">
            <PARAM NAME="FieldDelim" VALUE=";">
            <PARAM NAME="UseHeader" VALUE="True">
            <PARAM NAME="TextQualifier" VALUE='"'>
        </OBJECT>
        nb elem : <SPAN STYLE="font-weight:bold" ID=spanElemCount></SPAN>       <!--affichage du nb d'elements-->
        <BR><BR>
        <BUTTON ID=cmdfirstPage onclick="tblElements.firstPage()"><<</BUTTON>       <!--bouton 1er elem-->
        <BUTTON ID=cmdpreviousPage onclick="tblElements.previousPage()">&lt;</BUTTON>       <!--bouton elem precedent-->
        <BUTTON ID=cmdnextPage onclick="tblElements.nextPage()">&gt;</BUTTON>       <!--bouton elem suivant-->
        <BUTTON ID=cmdlastPage onclick="tblElements.lastPage()">>></BUTTON>     <!--bouton dernier elem-->
        <BR><BR>
        nb elem a afficher : <INPUT TYPE=TEXT VALUE=10 STYLE="width:20" onblur="tblElements.dataPageSize = this.value;">        <!--champ pour choisir le nb d'elem a afficher mis a jour quand le champ perd le focus-->
        <BR><BR>
        <TABLE ID=tblElements datasrc=#tdcElements DATAPAGESIZE=10 border=1>        <!--table dans laquelle on va afficher le contenu de notre object (le fichier)-->
            <THEAD><TR STYLE="font-weight:bold">
           
            <?      //si on ne connait pas le nom des colonnes on parcours le tableau tab_nom_col
                foreach($tab_nom_col as $cle=>$valeur)
                {
                    ?>
                    <TD><?=$valeur?></TD>
                    <?
                }
            ?>

            </TR></THEAD>
            <TBODY>

            <TR>
            <?      //si on ne connait pas le nom des colonnes on parcours le tableau tab_nom_col
                foreach($tab_nom_col as $cle=>$valeur)
                {
                    ?>
                    <TD><DIV datafld=<?=$valeur?>></DIV></TD>
                    <?
                }
            ?>
            </TR>

            </TBODY>
        </TABLE>
    </body>
</html>


Le fichier text créé resemble donc a celà:

"nom_col1";"nom_col2"";"nom_col3"";"nom_col4";
"val1-1";"val1-2";"val1-3";"val1-4";
"val2-1";"val2-2";"val2-3";"val2-4";
"val3-1";"val3-2";"val3-3";"val3-4";

Si quelqun a une idée pour améliorer tout cela?

Merci.

@+



Cette discussion est classée dans : asp, résultat, requête, datapagesize, limit


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec une requête [ par iomega ] Bonjour à tous, je voudrais savoir comment afficherce résultat.voici ma requête resultat qui contient la somme totale de prime d'assurance et je voudr Sauver le résultat d'une requête dans un fichier txt ??? [ par Melisback ] Bonjour, Surement une question simple, mais j'ai quelques petites difficultés.Je voudrais bien sauver le résultat d'une requête MySql effectuée par un Additionner le résultat d'une requête MySQL [ par djpunk ] Je fais une requête sur ma base SQL du style :$d = mysql_query("SELECT * FROM articles WHERE type='$type' AND idtype='$id'");et j'aurais voulu savoir résultat d'une requête dans un tableau [ par cecell ] Bonjour, je voudrai savoir s'il est possible de mettre les résultats d'une requête de sélection dans un tableau.J'ai réaliser la requête suivanteselec Affichage résultat requête SQL [ par kcin ] Salut à tous,Je pense que tout le monde sait comment fonctionne le traitement d'un résultat de requête SQL avec fetch_row & fetch_array, ceci est bien appliquer du css sur résultat requête php mysql [ par aimara ] Bonjour et merci à celui qui voudra bien m'aider. Pour la petite histoire je suis bloqué sur le "design css" du résultat de ma requête.Comment appliqu Remplir un tableau depuis le résultat d'une requête mysql [ par pl3m0 ] Hello, je débute en php et je suis bloqué à un endroit Je suis en train de créer un site avec différents modules, et ils sont enregistrés dans une tab Affichage du résultat d'une requête mysql dans un tableau html avec plus enregistrement par ligne [ par softmaster ] Bonjour,Je désire afficher le résultat d'une requête dans un tableau html, non pas ligne par ligne mais avec 3 enregistrements par ligne afin de résui Imposer un font au résultat d'une requête [ par Bowlest ] Bonjour, Mon problème est tout simple: J'ai une requête qui me donne le r&#233 Afficher le résultat d'une requête dans plusieurs cellules [ par kenru ] Bonsoir à tous et à toutes, je voudrais savoir comment je pourrais afficher un résultat de requête SQL dans plusieurs cellules () d'une même page.Merc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales