Har problem med att överföra Filtervillkor från ett formulär till en rapport! Välkomen till den underbara världen av datum. ISO formatet är att föredra i SQL frågor: Tack igen en gång Andreas! Hej igen Andreas! Den är nästan enklare. Skapa frågan du önskar för lista. Men lägg till två paramterar med samma namn som dina textrutor: Jag tackar o bugar igen Andreas! Kinesiskt ordspråk: Hej Andreas!Filterproblem ? Datumproblem? Northwind exempeldatabasen
Mitt anrop ser ut som följer:
Private Sub cmdSkrivLista_Click()
Dim ReportName, Dt As New DateInfo
ReportName = "Påminnelser"
DoCmd.OpenReport _
ReportName:=ReportName, _
View:=acViewPreview, _
wherecondition:="(Paminnelser.Paminnelsedatum) Between #" & _
txtStartDate & "# AND #" & _
txtEndDate & "#"
Vid körning får jag felmeddelande: ”Syntaxfel i datum i frågeuttrycket ’((Paminnelser.Paminnelsedatum) Between #1.8.2005# AND #31.8.2005#)’.
Min Finländska(Åländska) nationella inställning är Finland(Svenska).
ReportName: "Påminnelser" innehåller följande filter:
(((Paminnelser.Paminnelsedatum) Between [txtStartdate] And [txtEnddate]))
Vid körning av rapporten frågar programmet efter txtStartdate och txtEnddate rapporten visas helt OK.
Rapport: "Påminnelser" byggs upp m.h.a. en fråga: ” Paminnelser_P”. Datakällan i rapport: "Påminnelser" hänvisar alltså till: Paminnelser_P
Fråga: Paminnelser_P innehåller:
SELECT Personer.Nyckel, EfterNamn & ' ' & ForNamn & ' ' & OvrigaForNamn AS Namn, Personer.Personsignum, Personer.Anstallningsnr, EnhetFartyg.EnhetFartyg, Paminnelser.Handelsedatum, Paminnelser.Paminnelsedatum, Paminnelser.Paminnelse
FROM (EnhetFartyg INNER JOIN Personer ON EnhetFartyg.Fartygsnr = Personer.Fartygsnr) INNER JOIN Paminnelser ON Personer.Anstallningsnr = Paminnelser.Anstallningsnr
ORDER BY Personer.EfterNamn, Personer.ForNamn, Personer.OvrigaFornamn;
Vill använda mig av fråga Paminnelser_P eftersom jag kan använda den också till annat.
För att närmare undersöka hur det hela hänger ihop gick jag in på exempeldatabasen Northwind: Frågor: Fakturor (Design).
Höger_Klicka i det tomma fältet ovanför kolumnerna och välj egenskaper.
Frågeegenskaperna kommer fram.
Egenskapen Filter innehåller följande: (((OrderDatum) Mellan #4/20/95# Och #5/3/95#))
Ändra datumangivelsen till: #20.4.1995# Och #3.5.1995#
Vid körning med användandet av filter ges meddelande:
”Syntaxfel (operator saknas) i frågeuttrycket ’(((Orderdatum) Mellan #20.4.1995# Och #3.5.1995#))’
Borde ju gå att få exempeldatabasen Northwind att fungera med filter innan man försöker få sin egen databas att fungera i motsvarande situation.
Någon som hittar eller hittat felet?
mvh/HarrySv: Filterproblem ? Datumproblem? Northwind exempeldatabasen
<code>
Function SQLDate(Value As Variant) As String
If IsDate(Value) Then
SQLDate = "#" & Year(Value) & "-" & Right("0" & Month(Value), 2) & "-" & Right("0" & Day(Value), 2) & "#"
Else
SQLDate = "Null"
End If
End Function
Private Sub cmdSkrivLista_Click()
Dim ReportName
Dim Dt As New DateInfo
Dim strWhere as String
If IsDate(txtStartDate) Then
If IsDate(txtEndDate) Then
strWhere = "Paminnelser.Paminnelsedatum BETWEEN " & SQLDate(txtStartDate) & " AND " & SQLDate(txtEndDate)
Else
strWhere = "Paminnelser.Paminnelsedatum >= " & SQLDate(txtStartDate)
End If
ElseIf IsDate(txtEndDate) Then
strWhere = "Paminnelser.Paminnelsedatum <= " & SQLDate(txtEndDate)
End If
ReportName = "Påminnelser"
DoCmd.OpenReport _
ReportName:=ReportName, _
View:=acViewPreview, _
wherecondition:= strWhere
End Sub
</code>
Har även ändrat koden så att den ger alla poster om du lämnar rutorna tomma.
Om du fyller i första gör det en from-sökning och bara den andra en tom-sökning.Sv:Filterproblem ? Datumproblem? Northwind exempeldatabasen
Utan din hjälp hade jag haft väldigt svårt att komma vidare. Hade ingen aning om att SQLDate skulle se ut på nåt annat sätt än jag stött på i olika exempel.
Ibland blir man helt förvånad.
Stort tack! Allt fungerar nu helt OK!
mvh/HarrySv:Filterproblem ? Datumproblem? Northwind exempeldatabasen
Är det möjligt att använda samma teknik för att överföra datumparameter till en SQLfråga som öppnar en Listruta?
ReportName = "Påminnelser"
DoCmd.OpenReport _
ReportName:=ReportName, _
View:=acViewPreview, _
wherecondition:= strWhere
Alltså ist.för att öppna Rapporten i ovanstående så skulle jag vilja servera motsvarande uppgifter till listrutan med samma Fråga: "Påminnelser" som jag använder i Rapport: "Påminnelser".
Det vore ju väldigt elegant om det gick ?!?
mvh/HarrySv: Filterproblem ? Datumproblem? Northwind exempeldatabasen
<code>
PARAMETERS txtStartDate DateTime, ToDate txtEndDate;
SELECT Paminnelser.Paminnelsedatum, osv...
FROM Paminnelser
WHERE ((txtStartDate Is Null) OR (Paminnelser.Paminnelsedatum >= txtStartDate) AND ((txtEndDate Is Null) OR (Paminnelser.Paminnelsedatum <= txtEndDate)
ORDER BY Paminnelser.Paminnelsedatum;
</code>
Spara gärna frågan av prestanda skäl.
Sedan behöver du bara updatera frågan när du ändrar txtStartDate och txtEndDate:
<code>
Private Sub txtStartDate_AfterUpdate()
List2.Requery
End Sub
Private Sub txtEndDate_AfterUpdate()
List2.Requery
End Sub
</code>
Så kommer listan att visa önskat resultat.
Ett tips är att ändra Format för dina textboxar till: Short Date
Access kommer då validera att du skriver giltliga datum i dem.Sv:Filterproblem ? Datumproblem? Northwind exempeldatabasen
Funkar (nästan) perfekt.
Om jag sätter in:
((txtStartDate Is Null) OR i Where satsen så felmeddelar den:
Syntaxfel(operator saknas) i frågeuttrycket ((txtStartDate Is Null) OR (Paminnelser.Paminnelsedatum >= txtStartDate) AND ((txtEndDate Is Null) OR (Paminnelser.Paminnelsedatum <= txtEndDate)
ORDER BY Personer.EfterNamn, Personer.ForNamn, Personer.OvrigaFornamn;
Har kringgått det genom att ta bort ((txtStartDate Is Null) OR i Where satsen,
men undrar givetvis varför "den" klagar.
OBS Ser nu att det inte går att kringgå problemet genom att "ta bort" .
Min Private Sub cmdSkrivLista_Click()
har slutat fungera. Den frågar nu alltid med en frågeruta efter värden på txtStartDate och txtEndDate.
För att få formuläret att visa rätt innehåll i listan vid laddning av formuläret skrev jag in
List2.Requery i LOad-proceduren.
Det fina tipset om Format: Short Date är inte aktuellt i dethär fallet. Jag har gjort så att användaren väljer Datum (månad) genom att trycka på en knapp med en pil(Upp)(Ner) för att välja månad som visas i en textruta. Startinnehållet utgår från aktuell månad. Textrutan med aktuell månad utgör sedan ett värde med vars hjälp jag tar fram txtStartDate (månadens första dag) och txtEndDate (månadens sista dag).
Återstår nu enbart ett mindre problem.
Önskar mata in aktuell(vald) månad i Rapporthuvudet.
I det fall att rapporten anropas från mitt formulär där jag väljer ut månadens Påminnelser, så skulle det se ut såhär:
Private Sub Rapporthuvud_Print(Cancel As Integer, PrintCount As Integer)
Dim F As Form
Set F = Forms![Lista_Påminnelser]
Me.lblDataRange.Caption = _
Format((F!txtStartDate), "mmmm yyyy")
Ovanstående fungerar ju enbart när Forms![Lista_Påminnelser] är aktivt.
I stället skulle jag vilja på nåt sätt få tillgång till det värde på txtStartDate som
min fråga "Påminnelser_F" använder sig av. Det värde som programmet antingen hämtar från en frågeruta eller från mitt formulär "Påminnelser".
Kunde se ut någonting som t.ex:
' If Form![Lista_Påminnelser].Active = True Then
' Set F = Forms![Lista_Påminnelser]
' Me.lblDataRange.Caption = _
' Format((F!txtStartDate), "mmmm yyyy")
' ELSE
'
' End If
'eller ännu hellre någonting i stil med:
' Set Q = Query!(Påminnelser_F(txtStartDate))
' Me.lblDataRange.Caption = _
' Format((Q!txtStartDate), "mmmm yyyy")
End Sub
Du skrev också att jag gärna skulle spara frågan av prestandaskäl.
Du menar då att jag ifrån programmet kommer åt att spara frågan. ?
Vet inte hur jag i så fall kan referera till frågan.
Om du fortfarande har tid och ork så ser jag med tacksamhet fram emot ditt svar.
mvh/HarrySv: Filterproblem ? Datumproblem? Northwind exempeldatabasen
<info>
Här jag det glömer jag det.
Ser jag det minns jag det.
Gör jag det kan jag det.
</info>
När jag ger dig en SQL fråga så är min ambition lite att du skall sätta dig in i den och förstå den. För att du skall lära dig.
Det rör sig i detta fallet om ett mycket enkelt syntaxfel. Sakans en parantes i frågan. vilken ger jag dig i uppdrag att lista ut.
Knappar för att trycka upp och ner tycker jag inte är särskilt användarvänligt. En kombinationsruta eller listruta ger möjlighet att navigera snabbare.
Det är fult/dålig design att låta rapporten hämta värden. Bättre att skicka med dem när du öppnar raporten istället:
Private Sub Command0_Click()
DoCmd.OpenReport "Report2", acViewPreview, , , , Format(Date, "mmmm yyyy")
End Sub
Du behöver då inte ens ha någon kod utan kan använda en texbox vars kontrollkälla är: =[OpenArgs]
Eller om du envisas med kod:
Private Sub Report_Open(Cancel As Integer)
Label0.Caption = Me.OpenArgs
End Sub
<b>
>Du skrev också att jag gärna skulle spara frågan av prestandaskäl.
>Du menar då att jag ifrån programmet kommer åt att spara frågan. ?
>Vet inte hur jag i så fall kan referera till frågan.
</b>
Va? Du sparar frågo i databasfönstret under fliken frågor. Du ändrar radkällan eller postkällan till trågans namn istället för SQL kod.
Detta gäller ju bara statiska frågor. Frågor du inte förändrar eller infogar värden i. En parameterfråga är en statisk fråga.
Sv:Filterproblem ? Datumproblem? Northwind exempeldatabasen
Jag borde nog inte ställt min fråga så nära inpå (ett par dagar) att jag åkte iväg på semester långt utom räckhåll för allt vad datorer heter!. Trodde det gick att klara av problemet innan jag åkte, men tyvärr hann jag åka iväg innan jag fick ditt svar. Det blev också tyvärr lite bråttom med uttestningen av ditt föregående svar innan jag åkte.
Är nu i alla fall tillbaka.
Felet med parentesen hade jag åtgärdat, men problemet som kvarstod var att jag använde samma fråga både som sparad fråga, som radkälla till listruta och som radkälla för rapport. Jag hade trasslat till argumentöverföringen av datum. Fungerar nu ok.
Ang. att använda knappar att trycka för datum upp och ner är helt ok i dethär fallet eftersom jag börjar med att låta programmet föreslå ett datum (föregående månad) vilket är aktuell månad i 99 % av fallen för de övriga fallen är det enbart fråga om en knapptryckning uppåt eller nedåt.
Ang. frågan om att spara undan en fråga så är det ju det jag gjort hela tiden. Det är ju på så sätt jag kan återanvända frågan som radkälla. Det blev ett missförstånd i brådskan!
Användbart tips ang. [OpenArgs].
Tackar såhär sent om sider för dina svar!
mvh /Harry