2012-06-13 21 views
6

że mam tabela „tblItems”:dodanie stałej wiersz wyniku kwerendy SQL - MS Access

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

i chcę to być wypełniane w rozwijanej w formularzu. Jak bym dodać wiersz:

ALL  | SHOW ALL 

stać

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

jednym zapytaniu, aby umieścić w Row Source dla pola kombi? Nie byłem w stanie znaleźć dostęp składni, aby to zrobić ..

AFAIK, muszę składni podobnej do

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

co nie mogę znaleźć to wersja dostępu tego manekina tabeli. Naprawdę nie chcę mieć oddzielnej tabeli tylko po to, żeby przechować jeden wiersz dla jednej formy ... ale z tego, co czytałem, być może będę musiał.

+1

Zobacz http: // stackoverflow.com/questions/3486299/dblookupcombobox-has-a-null-row/3486591 # 3486591 – Fionnuala

+0

Czy używanie tej samej tabeli jest szybsze niż tworzenie jednorzędowego obojętnego stołu i odwoływanie się do tego? Pokazujesz, używając tej samej "Tabeli A" dla obu części zapytania, ale jeśli TableA jest duża, czy bardziej wydajne jest użycie dedykowanej sztucznej tabeli? – StuckAtWork

+0

Możesz wybrać dowolną tabelę, która nie może zostać usunięta. Jednak nie sądzę, aby bardzo duży stół był odpowiedni dla combobox, więc wydaje się, że jest to trochę teoretyczne. – Fionnuala

Odpowiedz

7

mógłby zrobić coś takiego:

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

jeśli zawsze chciał, aby pokazać się na dole, trzeba by się trochę bardziej skomplikowane.

Za komentarze uświadomiłem sobie, że Access nie obsługuje oświadczenia SELECT bez klauzuli FROM, co jest denerwujące. Rozwiązaniem byłoby utworzyć tabelę tblAll (składni może wymagać modyfikacji):

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

następnie można zrobić:

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

Być może będziesz musiał rzucić "ID" jako wartość ciągu, aby to działało, nie jestem pewien, jak MSAccess to obsługuje. –

+1

Otrzymuję komunikat o błędzie z informacją, że "dane wejściowe zapytania muszą zawierać co najmniej jedną tabelę lub zapytanie". Mam 'Row Source' wskazujące na 'Query2', który zawiera powyższą składnię. Próbowałem uprościć mój kod i nie mogę uzyskać tej składni do pracy z programem Access? Próbowałem go również bezpośrednio z okna Query2 (widok arkusza danych zgłasza ten sam błąd) – StuckAtWork

+0

@StuckAtWork: To niefortunne, i jeszcze jeden powód, aby nie mylić Access dla prawdziwego systemu baz danych. Zaktualizowałem swoją odpowiedź. –

2

Można użyć UNION ALL jednak masz niedopasowanie między stałymi i kolumny ("ALL" nie jest liczbą całkowitą). Możesz zrobić coś takiego:

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

Po stronie zgłoszenia, interpretuj identyfikator 0 jako "POKAŻ WSZYSTKO". Lub przekonwertuj ID na ciąg znaków.

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

Myślę, że program Access wymaga tabeli po "POKAŻ WSZYSTKO". To jest bardziej składnia, której potrzebowałem. Zgłasza błąd "Brak tabeli lub zapytania w zapytaniu". Widziałem inne bazy danych używające rzeczy typu "SYS DUMMY" jako nazwy tabeli dla stałych wartości, ale nie mogą znaleźć tego dostępu. – StuckAtWork

+0

@StuckAtWork Proszę zobaczyć mój link powyżej. – Fionnuala

6

Co mogę zrobić, to użyć SELECT TOP 1 oświadczenie i wykorzystać istniejącą nazwę tabeli, więc wygląda to tak:

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

To daje jeden wiersz wraz z wyborem z istniejącej tabeli . Możesz użyć dowolnej tabeli dla wiersza TOP 1.

+0

To działało idealnie! Dzięki @Sean Sutton –

2

Chcę tylko naprawić odpowiedź Jeremy'ego Holovacsa na pracę w MS Access. W ten sposób możesz użyć tej samej tabeli i nie musisz tworzyć obojętnej tabeli.

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

pamiętajcie, następujące działa tylko jeśli są jakieś wiersze w tabeli, jeśli masz pustą tablicę, to nie będzie działać.

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