+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 3 su 3

SQL And e Or

  1. #1
    pierovb non è in linea Scolaretto
    Buonasera,
    ho osservato uno strano comportamento di una query che effettuo su database access.
    la query in oggetto se la eseguo con access

    
    SELECT Turni.GiornoS, Turni.Giorno, Turni.Mese, Turni.Anno, Turni.Data, Turni.Badge, Turni.Cognome, Turni.Nome, Turni.Turno
    FROM Turni
    WHERE (((Turni.Giorno)="D" Or (Turni.Giorno)="F") AND ((Turni.Data) Between #4/1/2020# And #4/30/2020#) AND ((Turni.Turno)<>"x" And (Turni.Turno)<>"MALATTIA"))
    ORDER BY Turni.Data,Turni.Badge;
    
    funziona.

    La stessa eseguita dall'IDE di visual basic 6.0

    sSQL = "SELECT GiornoS,Giorno,Mese,Anno,Data,Badge,Cognome,Nome,Turno FROM Turni"
    sSQL = sSQL & " WHERE Giorno='D' Or Giorno='F'"
    sSQL = sSQL & " AND Data Between #" & Format(Text1.Text, "mm/dd/yyyy") & "# AND #" & Format(Text2.Text, "mm/dd/yyyy") & "#"
    sSQL = sSQL & " AND Turno<>'x'"
    sSQL = sSQL & " And Turno<>'MALATTIA'"
    sSQL = sSQL & "ORDER BY Data,Badge"
    
    funziona solo se escludo la condizione Or Giorno='F' altrimenti ignora tutto ciò che viene dopo Giorno='D' Or Giorno='F'
    ed estrapola tutti i record della tabella non rispettando né il periodo né i turni diversi da x e MALATTIA né la clausola Order By.
    Credo che il problema sia nella concatenazione And e Or, ma non riesco a venirne fuori.
    Ma soprattutto perché funziona in access e in VB no ?

  2. #2
    Hai notato le parentesi che racchiudono le prime due Or ?
    Insomma se togli le parentesi cambiano le precedenze è ovvio
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    pierovb non è in linea Scolaretto
    Ho provato cambiando la posizione delle condizioni, ma non ho pensato proprio alle parentesi

    Ovviamente ho risolto mettendo le parentesi
    sSQL = "SELECT GiornoS,Giorno,Mese,Anno,Data,Badge,Cognome,Nome,Turno FROM Turni"
    sSQL = sSQL & " WHERE (Giorno='D'  Or Giorno='F')"
    sSQL = sSQL & " AND Data Between #" & Format(Text1.Text, "mm/dd/yyyy") & "# AND #" & Format(Text2.Text, "mm/dd/yyyy") & "#"
    sSQL = sSQL & " AND Turno<>'x'" ' campo vuoto
    sSQL = sSQL & " And Turno<>'MALATTIA'"
    sSQL = sSQL & "ORDER BY Data,Badge"
    
    Grazie

+ Rispondi al messaggio