Just nu i M3-nätverket
Jump to content

SQL i Access IFF IS [NOT] NULL


ottarpslisa

Recommended Posts

Hej,

Jag har en rapport som ska i första hand innehålla alla avslutade objekt för en månad (i ett år) och i andra hand alla avslutade objekt för ett år. Eftersom jag inte kan skapa frågor längre än 155 tecken om jag vill köra dem direkt i kod (under en knapp)kan jag inte skapa den så lång som det behövs innan jag öppnar rapporten.

 

Jag lyckas inte få

DoCmd.OpenReport "AvslutadeMånadsrapport", acViewReport, , "Year(eAvslutningskoll.avslutningsdag)= 2011"

att fungera vilket är mycket skumt eftersom en skapad SQL fråga med samma WHERE sats fungerar klockrent

 

Nu har jag iallafall gett upp det försöket och försöker få grundfrågan till rapporten att göra det jag vill dvs ta ut de AvslutadeObjekt som är avslutade under 2011 i månad x om det är valt i formuläret. Om inget är valt vill jag att rapporten ska visa alla avslutadeobjekt från hela det valda året.

 

Min fråga ser i nuläget ut såhär:

SELECT DISTINCT AvslutadeEleveranser.*, eAvslutningskoll.avslutningsdag

FROM AvslutadeEleveranser INNER JOIN eAvslutningskoll ON AvslutadeEleveranser.kartobjekt = eAvslutningskoll.kartobjekt

WHERE Year(([eAvslutningskoll].[avslutningsdag])=([Forms]![Avslutadekartobjekt]![år]))

AND IIF ([Forms]![Avslutadekartobjekt]![månad] IS [NOT] NULL)

(Month([eAvslutningskoll].[avslutningsdag]))=[Forms]![Avslutadekartobjekt]![månad]));

 

men den går inte att spara utan att Access klagar på syntaxen (vilket jag i och för sig förstår)

snälla hjälp mej hitta rätt syntax, jag har inte såhär mycket tålamod

MVH

Lisa

Link to comment
Share on other sites

Tack det kanske kan vara en början..

Det första är ju att kontrollera om det står något i [Forms]![Avslutadekartobjekt]![månad] men sen vill jag ju att själva WHERE biten av frågan (som rapporten bygger på) ska lägga till månadsvillkoret ifall månaden är vald. Om månad inte är vald vill jag ju bara välja år.

 

Tänk så enkelt det hade varit om man hade fått WHERE funktionen att fungera i DoCmd.OpenReport och kunde lägga till det där. Frågan blir ju för lång för att lägga den som ett filter.

 

Fler förslag mottages gärna!

 

Med Vänlig Hälsning

Lisa

Link to comment
Share on other sites

Hur väljer du fram året? Använder du nån typ ab combobox för att välja årtal eller skriver du direkt i koden?

Ett förslag kan vara följande:

 

DoCmd.OpenReport "AvslutadeMånadsrapport", acPreview, , "Year(eAvslutningskoll.avslutningsdag)=" & 2011 & " "

 

Men helst skulle du kanske ha en kombinationsruta som söker reda på Distinct vilka årtal du har i tabellen eAvslutningskoll och därefter använda den som sökkriterie när du kör rapporten Typ:

 

DoCmd.OpenReport "AvslutadeMånadsrapport", acPreview, , "Year(eAvslutningskoll.avslutningsdag)=" & Me.kombinationsrutan & " "

 

Kommer du lite närmare lösningen med detta? Vad får du för felmeddelande när du kör frågan?

 

 

En fråga bara:

 

I koden så har du stavat IF med 2 I......

AND IIF ([Forms]![Avslutadekartobjekt]![månad] IS [NOT] NULL)

Link to comment
Share on other sites

Hej,

Nu har jag nog varit lite otydlig. Jag har ett formulär "Avslutat" där användaren kan välja år och månad i varsin kombobox.

 

När sedan användaren klickar på knappen "Rapport" vill jag att alla objekt som är avslutade det valda året och månaden ska vara med i rapporten. Om användaren bara väljer året och ingen månad vill jag att alla objekt som är avslutade det valda året är med på rapporten.

 

Om allt hade varit enkelt hade jag kunnat skapa en variabel och lägga in den som argument i öppningen av rapporten. Syntaxen för öppning av rapporten ser ut såhär:

DoCmd.OpenReport "rapportnamn",typ av visning, filter, where

där filter är en hel SQL fråga (på max 155 tecken om man skapar den i VBA) och where är wheredelen av en SQL fråga utan ordet WHERE

 

Då hade jag kunnat skapa en variabel av användarens val och öppna rapporten med det.

Såhär hade det blivit då:

anvVal = "Year(avslKoll.avslutningsdag) = " & [Forms]![Avslutat]![årsVal]

ifnull([Forms]![Avslutat]![månadsVal])= false Then

anvVal = anvVal & " AND Month(avslKoll.avslutningsdag) = " & [Forms]![Avslutat]![månadsVal]

endif

anvVal = anvVal & "ORDER BY eAvslutningskoll.avslutningsdag;"

DoCmd.OpenReport "Rapport",acPreview,, anvVal

 

 

 

Eftersom jag inte får detta till att fungera försöker jag istället göra om frågan som rapporten är byggd på.

 

Då blir frågan såhär:

SELECT DISTINCT AvslutadeEleveranser.*, eAvslutningskoll.avslutningsdag

FROM AvslutadeEleveranser

INNER JOIN eAvslutningskoll

ON AvslutadeEleveranser.kartobjekt = eAvslutningskoll.kartobjekt

WHERE (((Year([eAvslutningskoll].[avslutningsdag]))=[Forms]![Avslutadekartobjekt]![år])

AND ((Month([eAvslutningskoll].[avslutningsdag]))=[Forms]![Avslutadekartobjekt]![månad]));

 

men innan avslutandet av frågan skulle jag ju vilja ha in samma villkor men det lyckas jag inte riktigt få ihop.

Mitt försök är:

AND IIF ([Forms]![Avslutadekartobjekt]![månad] IS [NOT] NULL)

(Month([eAvslutningskoll].[avslutningsdag]))=[Forms]![Avslutadekartobjekt]![månad]));

 

Hoppas jag var lite tydligare nu

MVH

Lisa

Link to comment
Share on other sites

Lite svårt att hitta rätt syntax när jag inte ser databastabellerna men kanske kan det se ut nått sånt här vid en händelseprocedur vid klick på din knapp:

 

Dim stDocName As String

 

stDocName = "Rapportnamn"

If IsNull(Me.Årsval) Or Me.Årsval = "" Then

DoCmd.OpenReport stDocName, acPreview, , "Year(avslKoll.avslutningsdag)='" & Me.Månadsval & "'"

End If

 

If IsNull(Me.Månadsval) Or Me.Månadsval = "" Then

DoCmd.OpenReport stDocName, acPreview, , "Month(avslKoll.avslutningsdag)='" & Me.Årsval & "'"

 

 

Else

DoCmd.OpenReport stDocName, acPreview, , "Year(avslKoll.avslutningsdag)='" & Me.Årsval & "' AND Month(avslKoll.avslutningsdag)='" & Me.Månadsval & "'"

End If

End Sub

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...