sdisp
Messages postés75Date d'inscriptionjeudi 27 janvier 2005StatutMembreDernière intervention17 octobre 2008
-
11 déc. 2006 à 17:11
sdisp
Messages postés75Date d'inscriptionjeudi 27 janvier 2005StatutMembreDernière intervention17 octobre 2008
-
13 déc. 2006 à 17:09
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).
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.
sdisp
Messages postés75Date d'inscriptionjeudi 27 janvier 2005StatutMembreDernière intervention17 octobre 20081 13 déc. 2006 à 17:09
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>
Test AS400
<?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 (" Error " . odbc_error() . ": " . odbc_errormsg() . " ");
}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-->
</OBJECT>
nb elem : <!--affichage du nb d'elements-->