Accueil du site > Les articles > Résultat d’un fetch dans une DS sous adelia 400
Version à imprimer Enregistrer au format PDF

Résultat d’un fetch dans une DS sous adelia 400

jeudi 7 juin 2007, par David Malle Visites  1411

C’est maintenant usuel en rpg, mais comment gérer un fetch dans une DS sous Adelia 400 ?

Ce n’est pas si évident que cela.


Méthode

- Définir dans le modèle une variable de même longueur que la totalité du format du fichier en *NODEF (ici 1023)
- Définir une ds externe associant cette variable au fichier (ici MYFILE)
- Déclarer un curseur sur toutes les zones
- Effectuer le fetch dans la ds

Déclaration de la variable et source du programme ADELIA

DSE DSMYF MYFILE                        
DEBUT_SQL                                
+ DECLARE C_LIGNE CURSOR FOR            
+ SELECT * FROM MYFILE                  
+  WHERE DTECRE >= 20060915    
+  ORDER BY Z1, Z2, Z3
FIN_SQL                                  
DEBUT_SQL                                
+ OPEN C_LIGNE                          
FIN_SQL                                  
TANT_QUE *SQLCODE <> 100                
 DEBUT_SQL                              
 + FETCH NEXT FROM C_LIGNE              
 +  INTO :DSMYF                        
 FIN_SQL                                
 SI *SQLCODE = 0    
 *- Faire quelque chose
 FIN                                    
REFAIRE                                  
DEBUT_SQL                                
+ CLOSE C_LIGNE                          
FIN_SQL                                  
TERMINER                                

Conclusion

Lors de l’exécution, les contenus de chaque champ renvoyés par le fetch se retrouvent dans les zones de la DS.

Dans le cas ou vous manipulez un fichier de 80 zones par exemple, un argument récurrent pour ne pas utiliser un curseur sql est de trouver irritant de lister toutes les zones du fetch.

Et bien comme en rpg, ce n’est plus un argument, car avec cette méthode (qui n’est pas nouvelle), c’est facile.