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...
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.
// 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
// 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