Utilisation de procédures

Chapitre parent Chapitre précédent Chapitre suivant

LDSQL permet d'exécuter des procédures. On écrira, sur l'onglet Procédure, le code de la procédure souhaitée, en langage Windev.

Bien entendu, il est nécessaire de maîtriser (au moins à minima, si l'on repart des exemples qui sont fournis) la programmation en langage Windev.


L'objectif principal d'une telle procédure est de « travailler » à partir des données qui auront été isolées au préalable par une commande SQL SELECT, et qui sont donc affichées sur l'onglet Données. On peut citer deux exemples fréquents :


On peut aussi, via une telle procédure, importer des données dans un fichier de la base à partir d'un fichier « externe » (Fichier Excel, CSV ou texte tabulé par exemple). Les données affichées sur l'onglet Données importeront peu dans ce cas ; la seule chose qui importera sera de se placer sur la bonne connexion source (et le bon dossier source dans le cas de LDCompta ou LDPaye) avant d'exécuter la procédure d'import.


Une fois le source de la procédure écrit, cliquez sur le bouton Exécuter. Le code source est alors contrôlé et compilé. S'il ne comporte aucune erreur de syntaxe, il est exécuté. Notez que c'est à vous de prévoir, si nécessaire, un compte-rendu d'exécution de ce source pour savoir ce qui a été réalisé : affichage au final du nombre d'enregistrements traités...


Vous pouvez bien sur enregistrer une procédure pour pouvoir la ré-exécuter ultérieurement, et ce grâce au bouton Enregistrer proposé à droite.

Pour appeler par la suite une procédure ayant été enregistrée, cliquez sur le bouton Ouvrir et sélectionnez le fichier souhaité (chaque procédure est enregistrée sous la forme d'un fichier ayant l'extension .swd).

Si vous avez ouvert une procédure de la sorte, ou enregistré une première fois la procédure par le bouton Enregistrer, puis que vous avez modifié le code source de la procédure, les clics ultérieurs sur le bouton Enregistrer provoqueront directement l'enregistrement de la procédure sous le nom utilisé à l'ouverture ou au dernier enregistrement. Vous ne pourrez donc pas changer le nom de la procédure. Si vous voulez enregistrez le code modifié sous un nouveau nom, il faut tenir la touche Majuscule enfoncée lors du clic sur ce bouton pour forcer un Enregistrer sous...


Quelques éléments à connaître pour manipuler les données


L'objectif étant souvent de travailler avec les données affichées sur l'onglet Données, il faut pouvoir accéder à celles-ci.

Ces données sont présentées dans une table dont le nom est TableSQL. Cette table étant reconstruite dynamiquement en fonction de la requête SELECT exécutée, les noms des différentes colonnes de la table sont sans rapport avec les intitulés affichés en-tête de chaque colonne ou même avec les noms des rubriques de la commande SELECT. Les noms de ces colonnes sont tous de la forme _COLn ou _COLnn, n ou nn étant le N° d'ordre de la colonne en partant de la gauche.

Pour balayer toutes les lignes et toutes les colonnes affichées dans cette table nommée TableSQL, il faut donc deux boucles de parcours imbriquées, l'une pour parcourir les lignes, l'autre pour parcourir les colonnes :


POUR i=1 à TableSQL..occurrence

       POUR j=1 à TableOccurrence(TableSQL,toColonne)

               // Ici, je peux insérer le code de traitement d'une « cellule » de la table

       FIN

FIN


Et pour accéder aux données d'une cellule présente en ligne i colonne j, la syntaxe à utiliser est : TableSQL[i,j]

Ainsi, pour afficher dans une fenêtre de trace tout le contenu d'une table, ligne par ligne et colonne par colonne, on écrira le code suivant :


POUR i=1 à TableSQL..occurrence

       POUR j=1 à TableOccurrence(TableSQL,toColonne)

               Trace("Ligne "+i+" colonne "+j+" : "+TableSQL[i,j])

       FIN

FIN


Pour accéder à la colonne d'indice j de la table, on peut utiliser au choix l'une de ces deux syntaxes :

{"TableSQL._COL"+NumériqueVersChaîne(j)}

ou

{TableEnumèreColonne(TableSQL,j)}

suivi par exemple ..Libellé pour le libellé en-tête de la colonne ou ..Type pour connaitre le type de la colonne.

Exemple de script : Export des données en format texte tabulé


// Permet d'exporter le contenu entier de la table présentant les résultats de la commande SQL

// dans un fichier au format texte tabulé (pouvant être lu par Excel ou Calc).

Ligne,Texte sont des chaines


// Formatage du contenu de la table en texte tabulé

POUR i=1 à TableSQL..occurrence

       Ligne=""

       POUR j=1 à TableOccurrence(TableSQL,toColonne)

               Ligne+=[tab]+TableSQL[i,j]

       FIN

       Texte+=Ligne+RC

FIN


// Sélection du fichier pour l'export

NomFichier est une chaine

NomFichier = fSélecteur(SysRep(srBureau), "Export.txt", ...

       "Sélectionner le fichier résultat de l'export", ...

       "Fichier Texte (*.TXT)" + TAB + "*.txt" + RC + "Tous" + TAB + "*.*", "txt", fSelCrée)


// Enregistrement dans le fichier indiqué

SI NomFichier<>"" ALORS

       SI fSauveTexte(NomFichier,Texte)

               Info(TableSQL..Occurrence+ " ligne(s) exportée(s) dans le fichier "+NomFichier)

       SINON

               Erreur("Erreur lors de l'export : "+ErreurInfo())

       FIN

FIN


Exemple de script : Ajout de sommes au bas des colonnes numériques dans la table présentant les données


// Ajout, via les FAA, d'une somme au bas de chaque colonne numérique

// de la table présentant les résultats de la commande SQL

POUR i=1 à TableOccurrence(TableSQL,toColonne)

       SI TypeVar({"TableSQL._COL"+NumériqueVersChaîne(i)}) <= 12 ALORS

               ExécuteFAA("TableSQL._COL"+NumériqueVersChaîne(i),faacolonneajouteTotal)

       FIN

FIN