6 votes

Ajout d'un résultat de ligne constante à une requête SQL - MS Access

Disons que j'ai un tableau "tblItems" :

*ID*    |     *Name*
1       |   First Item
2       |  Second Item

et je veux qu'elle soit remplie dans une liste déroulante d'un formulaire. Comment ajouter une ligne ?

ALL     |    SHOW ALL

pour devenir

*ID*    |     *Name*
1       |   First Item
2       |  Second Item
ALL     |    SHOW ALL

avec une requête à placer dans le Row Source pour la boîte combo ? Je n'ai pas réussi à trouver la syntaxe Access pour le faire

A priori, j'ai besoin d'une syntaxe similaire à celle de

SELECT ID, Name FROM tblItems
UNION
SELECT 0, "All" FROM SOME.SYSTEM.DUMMY.TABLE

Ce que je n'arrive pas à trouver, c'est la version d'Access de cette table factice. Je n'ai pas vraiment envie d'avoir une table séparée juste pour stocker une ligne pour un formulaire... mais d'après ce que j'ai lu, je vais peut-être devoir le faire.

8voto

Jeremy Holovacs Points 6879

Vous pourriez faire quelque chose comme ça :

select ID, Name
from tblItems
union all
select 'ALL', 'SHOW ALL'

si vous voulez toujours qu'il apparaisse en bas, il faut être un peu plus compliqué.

Par des commentaires, j'ai réalisé qu'Access ne prend pas en charge une SELECT sans un FROM ce qui est ennuyeux. Une solution de contournement consisterait à créer une table tblAll (la syntaxe peut nécessiter une modification) :

create table tblAll(ID varchar(15), Name varchar(30));
insert into tblAll(ID, Name) values ('ALL', 'SHOW ALL');

alors vous pouvez le faire :

select ID, Name
from tblAll
union all
select str(ID) as ID, Name
from tblItems

8voto

Sean Sutton Points 81

Ce que je fais, c'est utiliser un SELECT TOP 1 et utiliser le nom de la table existante, de sorte que cela ressemble à ceci :

SELECT ID, Name FROM tblItems
UNION
SELECT TOP 1 'ALL', 'SHOW ALL' FROM tblItems

Vous obtiendrez ainsi la ligne unique ainsi que la sélection de votre tableau existant. Vous pouvez utiliser le tableau de votre choix pour le TOP 1 rang.

3voto

Alex S. Points 31

Je veux juste corriger la réponse de Jeremy Holovacs pour qu'elle fonctionne dans MS Access. De cette façon, vous pouvez utiliser la même table et ne pas avoir à créer une table factice.

SELECT ID, Name
FROM tblItems
UNION ALL
SELECT TOP 1 'ALL', 'SHOW ALL' 
FROM tblItems

2voto

HackedByChinese Points 18294

Vous pouvez utiliser UNION ALL Cependant, vous avez un décalage entre les constantes et les colonnes ("ALL" n'est pas un nombre entier). Vous pourriez faire quelque chose comme :

select ID, NAME from tblItems
union all
select 0, 'SHOW ALL'

Du côté de l'application, interprétez l'ID de 0 comme "SHOW ALL". Ou bien, convertissez l'ID en une chaîne de caractères.

select str(ID), NAME from tblItems
union all
select 'ALL', 'SHOW ALL'

2voto

SuperDre Points 86

Attention, ce qui suit ne fonctionne que s'il y a des lignes dans le tableau. Si vous avez un tableau vide, cela ne fonctionnera pas.

SELECT ID, Name
FROM tblItems
UNION ALL
SELECT TOP 1 'ALL', 'SHOW ALL' 
FROM tblItems

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X