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

SQL And e Or

  1. #1
    pierovb non è in linea Scolaretto
    Post
    356
    Like Inviati  
    0
    Like Ricevuti  
    0
    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
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,503
    Blogs
    5
    Like Inviati  
    6
    Like Ricevuti  
    35
    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
    Post
    356
    Like Inviati  
    0
    Like Ricevuti  
    0
    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