Utiliser une variable dans une requête SQL dans BASE

Bonjour,

Je reposte une question déjà posée mais sous une autre forme, car je pense qu’elle concerne la syntaxe utilisée dans ma requête et non le logiciel BASE.

J’ai un problème avec une requête SQL contenant une variable dans LibreOffice-Base (Version: 6.0.7.3 sur Ubuntu 18.04 Type de BDD : HSQLDB)
Quelque soit la manière d’intégrer ma variable dans la requête (avec ou sans les “:” MaVariable ou :MaVariable), j’ai systématiquement une erreur. J’ai tenté plusieurs syntaxes (j’utilise le mode “requête en mode SQL”)

Voici, ci-dessous, un exemple du type de requête que je voudrais utliser.

MaVariable
SET MaVariable=1
SELECT "Champ1", "Champ2", "Champ3" FROM "MaBase" WHERE "Champ2" = MaVAriable,  

Message d’erreur :

->Impossible de charger le contenu des données.

→ Statut SQL: 00000
Code d’erreur: -155

Statement does not generate a result set

Bizarrement lorsque j’entre la requête suivante (avec les “:” avant le nom de la variable, ça ne fonctionne pas sans),elle me renvoie les champs appelés dans la requête mais sans aucun enregistrement

SELECT "Champ1", "Champ2", "Champ3" FROM "MaBase" WHERE "Champ2" = :MaVAriable

Je précise que la valeur donnée en exemple (MaVariable=1) donne bien des résultats car lorsque j’entre la même requête sans variable (SELECT “Champ1”, “Champ2”, “Champ3” FROM “MaBase” WHERE “Champ2” = 1) les enregistrements correspondant à la requête s’affichent bien.

J’ai beau chercher je ne trouve pas de solution.

Merci pour votre aide.

Salut,

Dans votre question précédente, il a été commenté de poster un exemple de fichier de votre problème. Vous n’avez pas là ou ici. Sans cela, il est difficile de dire ce qui est incorrect.

Vous trouverez ci-joint un exemple contenant la même instruction SQL que celle que vous avez publiée. Peut-être que ça va aider.

Échantillon------ParameterSample.odb

Bonjour, Merci pour votre réponse mais elle ne règle pas mon problème. J’avais déjà trouvé cette procédure, mais elle ouvre une boite de dialogue demandant de renseigner la valeur de la variable. Ce n’est pas ce que je cherche à faire. Je voudrais pouvoir assigner une valeur à ma variable une bonne fois pour toute. Il n’y a vraiment aucun moyen de parvenir à ça ?

En utilisant le même exemple, entrez la requête suivante:

SELECT "Champ1", "Champ2", "Champ3" FROM "MaBase" WHERE "Champ2" = 1

1 est la variable.
Vérifié comme travaillant avec l’échantillon déjà donné.

Encore une fois, si cela n’est pas voulu, votre question n’est pas claire et vous oblige à poster un échantillon du problème.

Je crois que nous avons du mal à nous comprendre :confused: La variable est MaVAriable à laquelle je veux affecter la valeur 1. L’échantillon que vous avez fourni s’applique très bien à ma question et à la réponse que je vous ai faite précédemment. Or dans l’échantillon comme je vous l’ai dit je dois affecter la valeur de MAVAriable via une boite de dialogue et je ne peux pas l’intégrer directement dans ma requête. Donc la question est : comment affecter une valeur à une variable dans une requête SQL. Quelle est la bonne syntaxe? SET, DECLARE… ne fonctionnent pas.La requête que vous fournissez n’utilise pas de variable, elle ne fait que rechercher les enregistrements pour lesquels le Champ2 a pour valeur 1.L’utilité de la variable est qu’elle permet de stocker une valeur pour la récupérer dans une autre requête ou sous requête et qu’elle est modifiable. J’espère que c’est un peu plus clair :slight_smile:

Désolé, mais il semble que je ne peux pas aider davantage car vos commentaires se contredisent. Dans le premier commentaire, vous indiquez que vous ne voulez PAS de dialogue. Maintenant, vous déclarez avoir besoin d’un dialogue. N’a pas de sens. Comme je peux le constater, il n’ya pas besoin d’une “variable”. Ceci est courant dans les procédures de base de données mais dans une structure totalement différente.

La seule autre méthode possible à laquelle je peux penser utilise un filtre de table. C’est là que vous stockez une valeur dans une table à un enregistrement, puis que vous l’utilisez pour la sélection SQL. L’utilisation typique est une sélection dans une zone de liste. Ce n’est pas une “variable” comme on le sait en SQL.

Je vois que vous ne comprenez pas ma question. Mais merci d’avoir essayé :slight_smile:

Pour vous donner une petite idée de ce que je cherche à faire :
https://openclassrooms.com/fr/courses/1313136-pour-aller-plus-loin/1313632-les-variables-utilisateur

OK, je trouve cela lorsque j’utilise une base de données MySQL, mais pas jusqu’à présent dans HSQLDB ou Firebird. Avec MySQL, vous définissez ceci en utilisant l’option de menu Outils -> SQL

Cela se fait normalement dans Base en utilisant le filtrage de table, comme mentionné précédemment.

Merci. Bon je vous avoue que cela me paraît un peu compliqué Je vais devoir envisager l’installation de MYSQL ce sera plus simple je pense.
Mais merci pour votre aide :wink:

Après quelques recherches, nous avons trouvé des variables de session pour Firebird. Plus complexe que le jeu MySQL. N’ont que des liens en anglais vers la documentation, mais ils ont été testés et fonctionnent:

https://firebirdsql.org/refdocs/langrefupd20-set-context.html

https://firebirdsql.org/refdocs/langrefupd20-get-context.html

Dans HSQLDB Session, les variables ne peuvent pas être utilisées dans les instructions SQL. Uniquement peut être utilisé dans les procédures et les fonctions stockées.