meerdere criteria werkt niet

Status
Niet open voor verdere reacties.

GerwinEderveen

Gebruiker
Lid geworden
18 apr 2011
Berichten
65
Geachte heer/mevrouw,

Ik heb een probleem met de criteria het is als volgt:
Veld Material action code Weeknumber: Right$("0000"&Getalletje([comment]);4)
tabel tbl_ZOPS tbl_ZOPS
sort.
weerg.
criteria "repair" <Right$("00" & CStr(Year(Date()));2) & (Right$("00" & CStr(Isoweeknumber(Date()));2)-12)
of "write off" <Right$("00" & CStr(Year(Date()));2) & (Right$("00" & CStr(Isoweeknumber(Date()));2)-8)

Als ik de laatste regel weghaal doet hij het wel en met de laatste regel niet. kan iemand mij vertellen waarom dat is?

mvg Gerwin
 
Ik zie het woord OF staan.... Dat mag je niet gebruiken, want is geen Engels. Vervang het dus door OR. Overigens oogt de rest van de tekst ook niet bepaald als een reguliere expressie ;)
 
Veld Material action code Weeknumber: Right$("0000"&Getalletje([comment]);4)
tabel tbl_ZOPS tbl_ZOPS
sort.
weerg.
criteria "repair" <Right$("00" & CStr(Year(Date()));2) & (Right$("00" & CStr(Isoweeknumber(Date()));2)-12)
of write off <Right$("00" & CStr(Year(Date()));2) & (Right$("00" & CStr(Isoweeknumber(Date()));2)-8)

Alleen als ik de eerste regel invoeg van de criteria doet access het. Anders geeft hij een foutmelding van het getalletje(dus bij meerdere criteria)

Getalletje is:

Code:
Function Getalletje(Veld As String)
Dim i As Byte, x As Byte, iWaarde As Long

i = 1
Do Until IsNumeric(Mid(Veld, i, 1))
    If i = Len(Veld) Then
        Exit Function
    End If
    i = i + 1
Loop

Do While IsNumeric(Mid(Veld, i, 1))
    iWaarde = iWaarde & Mid(Veld, i, 1)
    i = i + 1
Loop
Getalletje = iWaarde
End Function
 
Laatst bewerkt:
Kun je de hele SQL plaatsen? Hier zie ik niet genoeg aan.
 
dit is de bas general:


Code:
Public Function ExportTableToExcel(ByVal sTable As String) As Boolean
On Error Resume Next

    Dim sFile As String, sThisMDB As String, sOpen As String
    Const q As String * 1 = """"
    
    sThisMDB = CurrentDb.Name
    sFile = Left(sThisMDB, InStrRev(sThisMDB, "\")) & sTable & ".xls"
    If Dir(sFile) <> "" Then Kill sFile
    
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, sTable, sFile, True
    
    sOpen = "excel.exe " & q & sFile & q
    Shell sOpen, vbNormalFocus
    
End Function

Function Weekcode(Veld As Variant)
Dim sq

sq = Split(Veld, " ")
Weekcode = sq(l)

End Function

Function Getalletje(Veld As String)
Dim i As Byte, x As Byte, iWaarde As Long

i = 1
Do Until IsNumeric(Mid(Veld, i, 1))
    If i = Len(Veld) Then
        Exit Function
    End If
    i = i + 1
Loop

Do While IsNumeric(Mid(Veld, i, 1))
    iWaarde = iWaarde & Mid(Veld, i, 1)
    i = i + 1
Loop
Getalletje = iWaarde
End Function

Moet je alle SQL hebben? want de query staat nog niet in een klassenobject en staat ook nog niet in een formulier.
Even voor de duidelijkheid: hij geeft de foutmelding bij i=i+1 en dat doet hij niet als je maar één criteria regel opgeeft...
 
Laatst bewerkt:
Het gaat inderdaad om de code van de query, want daar zit toch het probleem? En kun je (liefst met terugwerkende kracht) je code opmaken met de Code knop (#) ?

OVerigens gebruik je een erg omslachtige methode voor de bestandsnaam: Dat kan met één regel'

Code:
    sFile = CurrentProject.Path & "\" & sTable & ".xls"
 
waar kan je die SQL dan vinden? Ik heb verschillende queries gemaakt waarin meerdere criteria zoals in m'n tabel hierboven wel werken. Kan het door de criteria(<Right$("00" & CStr(Year(Date()));2) & (Right$("00" & CStr(Isoweeknumber(Date()));2)-12)) komen of door de i=i+1?

Zelf snap ik dus echt niet wat er fout gaat.. Zou je me kunnen zeggen wat je dan precies nodig hebt om het probleem op te lossen?

gr Gerwin
 
Als je in het query-ontwerpscherm zit, kun je met een knop de SQL bekijken. Dat is de SELECT ..... etc. tekst. Die wou ik dus zien.
 
Code:
SELECT tbl_ZOPS.MRPCn, tbl_ZOPS.Material, tbl_ZOPS.[Action code], Right$("0000" & Getalletje([comment]),4) AS Weeknumber, IIf(InStr(1,[comment]," ")=0,"Fout","Goed") AS Expr2
FROM tbl_ZOPS
WHERE (((tbl_ZOPS.[Action code])="repair") AND ((Right$("0000" & Getalletje([comment]),4))<Right$("00" & CStr(Year(Date())),2) & (Right$("00" & CStr(Isoweeknumber(Date())),2)-12)) AND ((IIf(InStr(1,[comment]," ")=0,"Fout","Goed"))="goed")) OR (((tbl_ZOPS.[Action code])="write off") AND ((Right$("0000" & Getalletje([comment]),4))<Right$("00" & CStr(Year(Date())),2) & (Right$("00" & CStr(Isoweeknumber(Date())),2)-10)) AND ((IIf(InStr(1,[comment]," ")=0,"Fout","Goed"))="goed"));

dit staat erin.
 
Zonder gegevens is het lastig checken, en je gebruikt een overdaad aan haakjes, wat de duidelijkheid ook nie bepaald verhoogd, maar volgens mij heb je haakjes verkeerd staan, waardoor de OR niet meedoet in de WHERE. In onderstaande code kloppen de haakjes volgens mij wel, dus die zou kunnen werken.

Code:
SELECT MRPCn, Material, [Action code], Right$("0000" & Getalletje([comment]),4) AS Weeknumber, IIf(InStr(1,[comment]," ")=0,"Fout","Goed") AS Expr2
FROM tbl_ZOPS
WHERE (([Action code]="repair") AND Right$("0000" & Getalletje([comment]),4) < Right$("00" & CStr(Year(Date())),2) & (Right$("00" & CStr(Isoweeknumber(Date())),2)-12) 
AND (IIf(InStr(1,[comment]," ")=0,"Fout","Goed")="goed") 
OR 
(([Action code]="write off") AND Right$("0000" & Getalletje([comment]),4) < Right$("00" & CStr(Year(Date())),2) & (Right$("00" & CStr(Isoweeknumber(Date())),2)-10) 
AND (IIf(InStr(1,[comment]," ")=0,"Fout","Goed")="goed")));
 
Beste michel,

Ik heb jouw code geprobeerd alleen werkt die nog steeds niet. Als ik op de knop fout opsporing klik krijg ik namelijk het volgende te zien(zie bijlage).

gr Gerwin

probleem access.jpg
 
Die foutmelding geeft aan dat hij geen getal kan berekenen. Waarom dat gebeurt kan ik zo niet zien; meest logische verklaring is dat de variabele Veld leeg is. Maar ik zou de db erbij moeten hebben om dat te controleren. Je kunt zelf ook nog wel zien of dat zo is, door de Stap modus in te stellen bij het begin van de loop. Ga in de regel Do Until staan en druk op <F9>. Er verschijnt een rood balletje links van de regel. Als je de query vervolgens uitvoert, stopt hij bij elk record op die plek, en kun je met <F8> elke regel apart uitvoeren. Als je met je muis boven een variabele gaat staan, zie je wat de inhoud is. Of leeg, natuurlijk ;) Je kunt ook het venster <Lokale variabelen> aanzetten, om te zien wat er gebeurt met de variabelen. i moet bijvoorbeeld bij elke lus opgehoogd worden.
 
SELECT tbl_ZOPS.MRPCn, tbl_ZOPS.Material, tbl_ZOPS.[Action code], Right$("0000" & Getalletje([comment]),4) AS Weeknumber, IIf(InStr(1,[comment]," ")=0,"Fout","Goed") AS Expr2
FROM tbl_ZOPS
WHERE (((tbl_ZOPS.[Action code])="repair") AND ((Right$("0000" & Getalletje([comment]),4))<Right$("00" & CStr(Year(Date())),2) & (Right$("00" & CStr(Isoweeknumber(Date())),2)-12)) AND ((IIf(InStr(1,[comment]," ")=0,"Fout","Goed"))="goed"));

Deze formule werkt wel en deze niet:
SELECT tbl_ZOPS.MRPCn, tbl_ZOPS.Material, tbl_ZOPS.[Action code], Right$("0000" & Getalletje([comment]),4) AS Weeknumber, IIf(InStr(1,[comment]," ")=0,"Fout","Goed") AS Expr2
FROM tbl_ZOPS
WHERE (((tbl_ZOPS.[Action code])="repair") AND ((Right$("0000" & Getalletje([comment]),4))<Right$("00" & CStr(Year(Date())),2) & (Right$("00" & CStr(Isoweeknumber(Date())),2)-12)) AND ((IIf(InStr(1,[comment]," ")=0,"Fout","Goed"))="goed")) Or (((tbl_ZOPS.[Action code])="write off") AND ((Right$("0000" & Getalletje([comment]),4))<Right$("00" & CStr(Year(Date())),2) & (Right$("00" & CStr(Isoweeknumber(Date())),2)-10)) AND ((IIf(InStr(1,[comment]," ")=0,"Fout","Goed"))="goed") ;

Kan je me vertellen waar de fout zit? Kan het zijn dat als er geen waarde in de comment field staat hij er dan mee ophoudt? hoe kan je dit dan eruit halen?
 
Ik weet niet of het aan je Comment veld ligt, maar ik constateer wel dat de OR code niet in de WHERE statement valt. In dit snap ik ook niet: Or (([Action code]="write off") Ik vermoed dat je iets wilt controleren met IIF. Die er dus niet is...
 
Kun je een voorbeeldje maken waar alle velden in zitten? Dan kan ik de tabel en de query nabouwen. Excel bestand is overigens prima, want die kan ik inlezen in 2003!
 
in het voorbeeldje staan de kolommen waar het omgaat (volgens mij) of wil je juist meerdere kolommen? dan moet ik een nieuwe maken. Echter als het meerdere rijen moet zijn dan kan dat niet ivm de grootte die het bestand dan wordt.
 
Als ik de query wil kunnen nabouwen, is het wel handig als alle velden er in zitten. Je hoeft er ook geen honderden records in te zetten; een stuk of twintig is al genoeg. Zolang de fout maar tevoorschijn kan komen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan