2012-06-13 27 views
6

Nói rằng tôi có một bảng "tblItems":Thêm một Row liên tục quả to SQL Query - MS Access

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

và tôi muốn điều này trở nên thông dụng trong một thả xuống trong một biểu mẫu. Làm thế nào tôi có thể thêm một hàng:

ALL  | SHOW ALL 

để trở thành

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

với một truy vấn để đặt trong Row Source cho combo box? Tôi đã không thể tìm thấy cú pháp truy cập để làm điều này ..

AFAIK, tôi cần cú pháp tương tự như

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

những gì tôi không thể tìm thấy là Access' phiên bản rằng bảng dummy. Tôi không thực sự muốn có một bảng riêng biệt chỉ để lưu trữ một hàng cho một hình thức ... nhưng từ những gì tôi đã đọc tôi có thể phải.

+1

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

+0

Có sử dụng cùng một bảng nhanh hơn việc tạo bảng giả một hàng và tham chiếu không? Bạn hiển thị bằng cách sử dụng cùng một 'TableA' cho cả hai phần của truy vấn, nhưng nếu TableA là lớn, nó có hiệu quả hơn khi sử dụng một bảng giả chuyên dụng không? – StuckAtWork

+0

Bạn có thể chọn bất kỳ bảng nào được đảm bảo không bị xóa. Tuy nhiên, tôi không nghĩ rằng một bảng rất lớn là thích hợp cho một combobox, do đó, điều này có vẻ là phần nào lý thuyết. – Fionnuala

Trả lời

7

bạn có thể làm một cái gì đó như thế này:

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

nếu bạn luôn muốn nó xuất hiện ở phía dưới, bạn sẽ phải trở nên phức tạp hơn một chút.

Mỗi nhận xét, tôi nhận ra rằng Access không hỗ trợ câu lệnh SELECT mà không có điều khoản FROM, điều này gây phiền toái. Một cách giải quyết sẽ là để tạo ra một bảng tblAll (cú pháp có thể yêu cầu sửa đổi):

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

sau đó bạn có thể làm:

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

Bạn có thể cần phải đặt 'ID' làm giá trị chuỗi để làm việc này, tôi không chắc chắn cách MSAccess xử lý điều đó. –

+1

Tôi nhận được thông báo lỗi "Mục nhập truy vấn phải chứa ít nhất một bảng hoặc truy vấn". Tôi có 'Row Source' trỏ đến 'Query2' chứa cú pháp trên của bạn. Tôi đã thử đơn giản hóa mã của tôi và tôi không thể nhận cú pháp này để làm việc cho Access? Tôi cũng đã thử nó trực tiếp từ cửa sổ Query2 (dạng xem biểu dữ liệu ném cùng một lỗi) – StuckAtWork

+0

@StuckAtWork: Thật không may, và một lý do nữa không gây nhầm lẫn cho Access cho một hệ thống cơ sở dữ liệu thực sự. Tôi đã cập nhật câu trả lời của mình. –

2

Bạn có thể sử dụng UNION ALL, tuy nhiên, bạn có một không phù hợp giữa các hằng số và các cột ("ALL" không phải là số nguyên). Bạn có thể làm điều gì đó như:

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

Ở phía ứng dụng, diễn giải ID bằng 0 là "HIỂN THỊ TẤT CẢ". Hoặc, chuyển đổi ID thành chuỗi.

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

Tôi nghĩ Access cần một bảng sau khi 'HIỂN THỊ TẤT CẢ' .. đó là cú pháp tôi cần. Nó ném một lỗi "Không có bảng hoặc truy vấn trong truy vấn". Tôi đã nhìn thấy các DB khác sử dụng những thứ như "SYS.DUMMY" loại điều như tên bảng cho các giá trị không đổi, nhưng không thể tìm thấy nó để truy cập. – StuckAtWork

+0

@StuckAtWork Vui lòng xem liên kết của tôi ở trên. – Fionnuala

6

Những gì tôi làm là sử dụng một tuyên bố SELECT TOP 1 và sử dụng tên bảng hiện có, vì vậy nó trông như thế này:

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

Điều đó sẽ cung cấp cho bạn hàng duy nhất cùng với các lựa chọn từ bảng hiện tại của bạn . Bạn có thể sử dụng bất kỳ bảng nào bạn muốn cho hàng TOP 1.

+0

Điều đó hoạt động hoàn hảo! Cảm ơn @Sean Sutton –

2

Chỉ muốn sửa câu trả lời của Jeremy Holovacs để làm việc trong MS Access. Bằng cách này bạn có thể sử dụng cùng một bảng và không phải tạo một bảng giả.

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

Thông báo cho bạn biết, sau đây chỉ hoạt động nếu có bất kỳ hàng nào trong bảng, nếu bạn có bảng trống, bảng sẽ không hoạt động.

SELECT ID, Name 
FROM tblItems 
UNION ALL 
SELECT TOP 1 'ALL', 'SHOW ALL' 
FROM tblItems 
Các vấn đề liên quan