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()"><</BUTTON> <!--bouton elem precedent-->
<BUTTON ID=cmdnextPage onclick="tblElements.nextPage()">></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.
@+