2009-04-21 17 views
24

Czy można używać wyrażeń case w programie Access? Próbuję określić formę data Max 2 kolumny, ale wciąż otrzymuję błędy składniowe w następującym kodzie:Opisy wyrażeń w programie Access

CASE 
    WHEN dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date] 
    THEN dbo_tbl_property.LASTSERVICEDATE 
    ELSE Contour_dates.[Last CP12 Date] 
END AS MaxDate 

Odpowiedz

41

Można użyć funkcji IIF() zamiast.

IIF(condition, valueiftrue, valueiffalse) 

condition to wartość, którą chcesz przetestować.

valueiftrue to wartość, która jest zwracana, jeśli warunek zostanie oceniony jako PRAWDA.

valueiffalse to wartość, która jest zwracana, jeśli warunek zostanie oceniony jako FALSE.

+0

Myślałam, że musiał mieć prawdziwą odpowiedź flase to zrobić? –

+3

"dbo_tbl_property.LASTSERVICEDATE> Contour_dates. [Ostatnia data CP12]" to Twoja prawda/fałsz –

7

Brak instrukcji dotyczącej spraw w programie Access. Zamiast tego możesz użyć instrukcji switch. Będzie to wyglądać jak poniżej:

switch(dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date],dbo_tbl_property.LASTSERVICEDATE,dbo_tbl_property.LASTSERVICEDATE <= Contour_dates.[Last CP12 Date],Contour_dates.[Last CP12 Date])

Dla dalszego wygląd czytania pod adresem: http://www.techonthenet.com/access/functions/advanced/switch.php

Albo przez przypadek przykład implementacji funkcji w VBA:

http://ewbi.blogs.com/develops/2006/02/adding_case_to_.html

Pozdrawiam, J.

+3

Funkcja 'switch' jest znacznie lepszą funkcją do zastosowania, jeśli ocenianych jest wiele różnych warunków. Będzie łatwiej czytać/rozumieć/utrzymywać w porównaniu do używania zagnieżdżonych funkcji 'IIF'. Alternatywnym sposobem na zaimplementowanie wartości domyślnej zamiast tworzenia wyrażeń logicznych, które zasadniczo oceniają "wszystkie poprzednie wyrażenia są fałszywe", jest użycie "prawda" jako ostatecznego wyrażenia do oceny. Na przykład 'switch (dbo_tbl_property.LASTSERVICEDATE> Contour_dates. [Data ostatniego CP12], dbo_tbl_property.LASTSERVICEDATE, true, Contour_dates. [Data ostatniego CP12])' –

-2

FWIW - IIF jest oporem, a rozwiązanie przełączające nie wydaje się poprawne dla SQL (być może zrobiłem coś złego). Wszedłem wartości, które Fionnuala oferowanych do nowej tabeli o nazwie AccessObjectXref:

ID ObjectType ObjectDesc 1 -32768 -32766 Macro formularz 2 3 -32764 -32761 raport 4 Moduł 5 -32758 -32757 Użytkownicy 6 DB Document 7 tabeli 8 1 2 dB 9 3 pojemnik 10 5 11 8 zapytania podrzędnego arkusza

następnie wykorzystane następujące SQL utworzyć listę opisów obiektów i ich liczby. Oczywiście można to każdy rekord jeśli chciałeś:

SELECT objectdesc, Count(*) AS Expr1 
FROM msysobjects, AccessObjectTypeXref 
where type = objecttype group by objectdesc order by objectdesc 

Mam listę typów obiektów z: Meaning of MsysObjects values

Powiązane problemy