En complément des manipulations expliquées dans la vidéo, il faut noter que :
On ne peut pas utiliser de pointeurs et de lignes de tableaux dans une requête SQL, l'interpréteur ne les prend pas en compte.
Dans ce cas, il est souvent préférable de constituer la requête sous forme de texte et de l'exécuter via la commande
EXECUTE IMMEDIATE
.
`TYPAGE IMPERATIF DES VARIABLES sinon la requête génère une erreur ARRAY TEXT(TabStatsTechniciens;0) `créer un tableau sans ligne, il sera rempli par la requête suivante ARRAY TEXT($TabIDTechniciens;0) `tableau dans lequel on stockera les identifiants des TECHNICIENS
`Ne pas oublier le caractère espace ou retour chariot à la fin de chaque ligne C_TEXT($TexteRequete) $TexteRequete:="SELECT Last_name, ID " $TexteRequete:=$TexteRequete+"FROM TECHNICIANS " $TexteRequete:=$TexteRequete+"INTO :TabTechniciens, :$TabIDTechniciens"
Begin SQL`On ne souhaite ramener que le nom du technicien et le stocker dans un tableau
EXECUTE IMMEDIATE :$TexteRequete; End SQL
Il s'agit de sélectionner le nom et l'identifiant de la table techniciens et de transférer dans les 2 tableaux.
dans cette vidéo nous allons apprendre à mettre en oeuvre des commandes SQL simples intégrées à la programmation de 4D sous 2 formes :
plusieurs lignes de commande SQL insérées dans un bloc de traitement SQL
une seule ligne de commande qui exécute la liste de commandes stockées dans une variable texte.
En complément du langage de 4D, nous pouvons intégrer dans 4D des commandes SQL comme vous le faites dans d’autres outils :
mysql_query en PHP
INCLUDE SQLCA en COBOL
etc ...
Ces commandes peuvent être intégrées dans les développements existants de manière très simple.
Nous allons reprendre notre formulaire statistiques pour calculer le même tableau à partir de commandes SQL :
Je duplique le bouton
le début de la méthode reste le même
n'ayant pas encore sélectionné de fiches, le tableau des techniciens aura 0 lignes
nous ajoutons le tableau des identifiants techniciens dans une variable locale, on n'a pas besoin de la conserver ultérieurement
ensuite, j'intègre mon code SQL Il s'agit de sélectionner le nom et l'identifiant de la table techniciens et de transférer dans les 2 tableaux.
Notez la syntaxe qui indique à 4D de transférer le résultat dans les tableaux. On utilise le nom de la variable précédé du symbole “:” (deux-points). La suite de la méthode (dimensionnement du tableau des interventions) reste globalement structurée de la même manière :
on rajoute juste la valeur de $Nb pour savoir combien de techniciens on a à traiter?
Ensuite on enlève toute la fin qu'on remplace par les commandes SQL :
on stocke dans une variable l'identifiant du technicien à traiter
on exécute les commandes SQL qui tiennent compte de la date de début et de fin d'année
et ensuite on valorise le tableau des interventions à la ligne i
À l'exécution de la méthode,
ici nous passons le code SQL
nos techniciens sont bien au nombre de 7
on dimensionne le tableau des intervetnions
puis pour chaque valeur du tableau, on va faire un
SELECT COUNT
stocker dans une variable $Result
qui va valoriser le tableau
et qu'on choisisse l'une ou l'autre des options, nous obtenons bien le même résultat.
Une autre manière de programmer, notamment cette première partie aurait été de l'écrire de cette manière :
c'est-à-dire qu'on écrit la requête dans une variable texte
et ensuite entre un Début SQL et une Fin SQL on utilise la commande
EXECUTE IMMEDIATE
à laquelle on passe la requete sous forme de texte
ce qui donne exactement le même résultat que ceci.