CalcSQL

Fonctions Calc pour les requêtes SQL

CalcSQL a pour objectif d'envoyer, par une formule, une requête SQL à une source de données et d'afficher le résultat dans des cellules Calc. C'est une macro StarBasic qui s'en charge. Pour des raisons de commodités, cette bibliothèque, destinée à Calc, est incluse dans ce document.

Plusieurs approches sont proposées et présentées ci-après. Voir également la section Remarques Complémentaires avant l'utilisation de ces fonctions.

Ce document expose donc la structure des formules des 3 approches explorées

CalcSQL1

CalcSQL2

CalcSQL3

Viennent ensuite des remarques importantes liées à l'utilisation de cette bibliothèque dans Calc

Enfin, les informations de Crédits et Licences.

1ère approche

On utilise directement l'API d'accès aux sources de données. Le retour de la fonction est un tableau.

Fonctions définies

CALCSQL1 : Traite une requête SQL sur la source de données spécifiée

QUOTE : Gère les caractères ' lors de l'insertion de cellules dans la requête

ARRETURGENCE : Si le résultat est trop long, arrête l'analyse en cours

Syntaxe

=CALCSQL1("SourceDeDonnees";"select * from LaTable where LeChamp=" & QUOTE(A14))

On remarque que les arguments sont séparés par des points virgules et que la concaténation de chaîne est autorisée par l'intermédiaire de l'opérateur &. Ne pas omettre d'utiliser la fonction QUOTE si nécessaire. Cette syntaxe permet donc l'utilisation de valeurs issues d'autres cellules pour construire la Requête.

Description des arguments

CALCSQL1

Source de Donnée : Obligatoire - Nom de la source de données telle que définie dans OOo – La casse est importante

Requête : Obligatoire - Requête SQL valide de type SELECT. Aucun contrôle de validité autre que celui interne à OOo n'est effectué

AfficheTitre : Optionnel – La valeur 1 permet d'afficher le nom des champs récupérés

BorneMax : Optionnel – Affiche les BorneMax premiers éléments

BorneMin : Optionnel – Saute les BorneMin premiers éléments

QUOTE

Encadre l'argument entre quotes simples et les double si l'argument en contient

ARRETURGENCE

Dans le cas d'une analyse trop longue, si l'utilisateur à la possibilité d'agir sur les menus de Calc, il peut lancer cette macro pour arrêter le processus en cours

Outils/macros/macro ... Double-cliquer sur LibSQL/ArretUrgence

2ème approche

Utilise les possibilités d'imports de Calc (Reproduit F4 + glisser-déposer une requête enregistrée)

Fonction définie

CalcSQL2 : Importe le résultat de la requête sur la source de données spécifiée à l'endroit spécifié par les arguments. Le résultat est cellule/cellule et non pas matriciel

Syntaxe

=CALCSQL2("NomFeuille";""CelluleCible""SourceDeDonnees";"select * from LaTable where LeChamp=" & QUOTE(A14))

Description des arguments

NomFeuille : Obligatoire – Feuille où sera affiché le résultat – Doit être différente de la feuille contenant la cellule

CelluleCible : Obligatoire – Cellule en haut à gauche contenant le résultat

Source de Donnée : Obligatoire - Nom de la source de données telle que définie dans OOo – La casse est importante

Requête : Obligatoire - Requête SQL valide de type SELECT. Aucun contrôle de validité autre que celui interne à OOo n'est effectué

3ème approche

Approche mixte – Moteur de la 2ème approche et retour sous forme matricielle

Cette approche utilise une feuille temporaire invisible créée dynamiquement. Le résultat de la requête est importé dans cette feuille pour ensuite être filtré sous forme matricielle dans la cellule contenant la formule

Fonction définie

CalcSQL3 : Importe le résultat de la requête sur la source de données spécifiée à l'endroit spécifié par les arguments. Le résultat est matriciel.

Syntaxe

=CALCSQL3("SourceDeDonnees";"select * from LaTable where LeChamp=" & QUOTE(A14))

Description des arguments

Source de Donnée : Obligatoire - Nom de la source de données telle que définie dans OOo – La casse est importante

Requête : Obligatoire - Requête SQL valide de type SELECT. Aucun contrôle de validité autre que celui interne à OOo n'est effectué

Bornes : Optionnel – Chaîne de caractères de la forme <BorneMin>:<BorneMax>- Affiche les enregistrements compris en tre BorneMin et BorneMax

Titre : Optionnel – Toute chaîne de caractères permet d'afficher le nom des champs

Remarques Complémentaires

Les fonctions sont dans le module libSQL de la bibliothèque STANDARD (chargée par défaut)

Pour éviter le problème inhérents aux chargements des bibliothèques, il est impératif que ce module se trouve soit dans la bibliothèque standard de OOo, soit dans celle du document. Vous pouvez y copier le module inclus dans ce document.

Ces fonctions n'apparaissent pas dans l'autopilote.

Dans ces fonctions, les paramètres optionnels ne le sont que si ils sont situés à la fin de la formule. Si ce n'est pas le cas, il deviennent obligatoires.

Il existe plusieurs problèmes dû aux retours matriciels

Toutes les cellules affichées sont recalculées : cela implique des appels successifs aux fonctions qui peuvent être pénalisants si la requête est lourde

Une fois la fonction évaluée une première fois, la taille de la matrice n'est pas adaptée si l'on change la requête. Cela implique l'affichage de #NA si moins de lignes sont retournées. Si plus de lignes sont retournées, le retour est tronqué à la taille initiale

Sous Calc, pour qu'une formule soit considérée comme matricielle, il faut la valider lors de la saisie par CTRL+SHIFT+RETURN et non pas une validation simple.

Pour sélectionner la plage d'une formule matricielle, se placer dans une de ses cellules et faire CTRL+*

Informations de Licence

Auteur: Laurent Godard – dev.godard@wanadoo.fr

Remerciements: La société Speno pour le financement et l'autorisation de mise sous LGPL de ce développement – Pierre Wenger et Tony Galmiche pour leur investissement dans les différents tests

Intégré par :

Dernière modification: 14/12/2003

Contacts : Projet Documentation OpenOffice.org http://fr.openoffice.org

Traduction :

Appendix

Public Documentation License Notice

The contents of this Documentation are subject to the Public Documentation License Version 1.0 (the "License"); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.

The Original Documentation is : CalcSQL- Fonctions Calc pour les requêtes SQL

The Initial Writer of the Original Documentation is Laurent Godard

Copyright (C) 2003. All Rights Reserved. (Initial Writer contact(s): dev.godard@wanadoo.fr)

Contributor(s): ______________________________________.

Portions created by ______ are Copyright (C)_________[Insert year(s)].

All Rights Reserved. (Contributor contact(s):________________[Insert hyperlink/alias]).

NOTE: The text of this Appendix may differ slightly from the text of the notices in the files of the Original Documentation. You should use the text of this Appendix rather than the text found in the Original Documentation for Your Modifications.

Laurent Godard

2003-12-03T11:39:57