Problema con una query

di il
14 risposte

Problema con una query

Ciao a tutti

chiedo aiuto per creare una query per un report.

Ho questa query in una sottomaschera che filtro da combo CbCliente

SELECT DISTINCT O.IdCliente, C.IdFornitore, E.Denominazione AS Fornitore, Nz([I].[GiorniConsegna],0) AS GC
FROM (SELECT IdOrdine, IdCliente FROM TbOrdini)  AS O INNER JOIN (((SELECT IdOrdine, IdFornitore FROM TbCarichi)  AS C LEFT JOIN (SELECT Riga, IdFornitore, GiorniConsegna FROM TbImpostazioni WHERE Riga = 7 AND IdCliente = [CboCliente])  AS I ON C.IdFornitore = I.IdFornitore) INNER JOIN (SELECT IdFornitore, Denominazione FROM TbFornitori)  AS E ON C.IdFornitore = E.IdFornitore) ON O.IdOrdine = C.IdOrdine
WHERE (((O.IdCliente)=[CboCliente]))
ORDER BY 3;

Ora vorrei ottenere con una query un riepilo dove solo i record dove i GiorniConsegna sono =0.

Ho provato togliendo :

AND IdCliente = [CboCliente]  e WHERE (((O.IdCliente)=[CboCliente]))

ma non ottengo il giusto risultato

Grazie.

14 Risposte

  • Re: Problema con una query

    Meglio non usare la WHERE nella query altrimenti diventa complicato... dovresti usare la proprietà FILTER di maschera e creare un Criterio a 2 Condizioni... 

    IDCliente=cboCliente AND GiorniConsegna=0 

  • Re: Problema con una query

    14/03/2025 - @Alex ha scritto:

    Meglio non usare la WHERE nella query altrimenti diventa complicato... dovresti usare la proprietà FILTER di maschera e creare un Criterio a 2 Condizioni... 

    IDCliente=cboCliente AND GiorniConsegna=0 

    grazie 

    ora ci provo

  • Re: Problema con una query

    Per la maschera ho dovuto fare cosi:

    query in sottomaschera:

    SELECT DISTINCT O.IdCliente, C.IdFornitore, E.Denominazione AS Fornitore, Nz([I].[GiorniConsegna],0) AS GC
    FROM (SELECT IdOrdine, IdCliente FROM TbOrdini)  AS O INNER JOIN (((SELECT IdOrdine, IdFornitore FROM TbCarichi)  AS C LEFT JOIN (SELECT Riga, IdFornitore, GiorniConsegna FROM TbImpostazioni WHERE Riga = 7 AND IdCliente = [CboCliente])  AS I ON C.IdFornitore = I.IdFornitore) INNER JOIN (SELECT IdFornitore, Denominazione FROM TbFornitori)  AS E ON C.IdFornitore = E.IdFornitore) ON O.IdOrdine = C.IdOrdine
    ORDER BY 3;

    però nella subquery sono obbligato ad usare la Where perchè non ho alternativa.

    in dopo aggiornamento combo e su apertura form:

    With Me!SM_GC.Form
      If Len(Me!CboCliente & vbNullString) = 0 Then
        .Filter = "IdCliente =0"
      Else
       .Filter = "IdCliente =" & Me!CboCliente
      End If
         .FilterOn = True

    End With

  • Re: Problema con una query

    Ciao, 

    ma cosa non ti è chiaro quando ti viene detto di usare o la where o il filter ?  o comunque con alcune attenzioni particolari se si vogliono utilizzare entrambe.

    Per iniziare bisognerebbe utilizzare il "Blocco di codice" per esporre il proprio codice.

    Per continuare occorre studiare i metodi, le sintassi e quant'altro occorre per utilizzare oggetti e controlli nel modo dovuto... e peri Filter Form:
    https://learn.microsoft.com/en-us/office/vba/api/access.form.filter(property)

    Per proseguire bisognerebbe avere qualche idea in merito alle combobox.. oggetto/eventi/proprietà/metodi... 
    https://learn.microsoft.com/it-it/office/vba/api/access.combobox

    Ecco dopo alcune letture ti accorgerai di aver fatto una domanda abbastanza inutile con coefficiente prossimo allo zero (senza offesa ovviamente)  ;-))

    Quindi per concludere...

    I Filter Form si attivano e si disattivano:   Me.FilterOn = True  oppure Me.FilterOn = False

    Si assegna un valore ai filter:  Me.Filter = "Your Condition" che non deve andare in conflitto con eventuali Where Condition del record source

    Mentre le combobox per verificare l'eventuale selezione di un item si potrebbe semplicemente testare : 
    If IsNull(Me.YourComboBox.Value) Or Me.YourComboBox.Value = "" Then .... 

    Per le Form o SubForm i concetti non cambiano e i filtri si applicano comunque senza problemi facendo attenzione alle relazioni trai campi master e secondari.

    In coclusione sarebbe meglio non parlare della stringa Sql che può solo essere presa di esempio su come non fare certe cose ???  ;-)
    Non te la prendere ... la mia non è una critica, ma semplicemente un modo per evidenziare delle carenze di base... e quindi cercare di farti capire la necessità di studiarsi almeno gli argomenti di cui sopra per poi utilizzare correttamente oggetti, metodi, eventi, etc etc...  ;-) 

    Ad ogni modo se leggi attentamente quanto sopra riportato, trovi la risposta al tuo quesito. Diversamente si dovrebbe passare le due righe di codice che poi per te diventa un copia/incolla e non impari nulla. 

  • Re: Problema con una query

    15/03/2025 - By65Franco ha scritto:

    CUT

    Grazie  Franco

  • Re: Problema con una query

    Fai sapere se riesci a risolvere ... poi vediamo come procedere 

  • Re: Problema con una query

    Per la combobox potresti usare un metodo abbastanza robusto e non si inceppa con possibili valori null...

    Esempio:

    If Me.YourComboBox.ListIndex <> -1 Then
    	Me.Filter = "YourField = " & Me.YourComboBox.Value
        Me.FilterOn = True
    Else
        Me.FilterOn = False
    End If

    Quindi letteralmente : 
    Se la combobox restituisce un Indice di selezione item valido, 
    allora
    assegna valore al Filter Form e attiva il Filter,
    altrimenti 
    disattiva il Filter Form

  • Re: Problema con una query

    15/03/2025 - By65Franco ha scritto:

    Per la combobox potresti usare un metodo abbastanza robusto e non si inceppa con possibili valori null...

    Esempio:

    If Me.YourComboBox.ListIndex <> -1 Then
    	Me.Filter = "YourField = " & Me.YourComboBox.Value
        Me.FilterOn = True
    Else
        Me.FilterOn = False
    End If

    Quindi letteralmente : 
    Se la combobox restituisce un Indice di selezione item valido, 
    allora
    assegna valore al Filter Form e attiva il Filter,
    altrimenti 
    disattiva il Filter Form

     grazie per il suggerimento, anche se il problema è tutt'altro, cioè quello del post iniziale che non ha nulla a che vedere di tutto ciò.

  • Re: Problema con una query

    17/03/2025 - AlbertoL ha scritto:

     grazie per il suggerimento, anche se il problema è tutt'altro, cioè quello del post iniziale che non ha nulla a che vedere di tutto ciò.

    Perché dici che il problema è tutt'altro... secondo me è esattamente la soluzione... mi sembra tu non abbia capito, l'esempio fatto da Franco e mono-condizione ma quel metodo con un minimo di logica, e ne abbiamo parlato spesso nel forum, consente di costruire una stringa contenente la WHERECONDITION costituirà da N criteri concatenati se questi non sono nulli... in questo caso c'è una listbox, se ci fosse una textbox conttolleresti il contenuto... etc...

    Dim sWhr As String
    If Len(Me!Txt1 & vbNullstring)>0 then sWhr=sWhr & "Campo1=" & Me!Txt1 & " AND " 			'CAMPO TIPO NUMERICO
    If Len(Me!Txt2 & vbNullstring)>0 then sWhr=sWhr & "Campo2='" & Me!Txt2 & "' AND " 			'CAMPO TIPO TESTO ESATTO
    If Len(Me!Txt3 & vbNullstring)>0 then sWhr=sWhr & "Campo3 Like '*" & Me!Txt3 & "*' AND " 	'CAMPO TESTO PARZIALE
    If Len(Me!Txt4 & vbNullstring)>0 then sWhr=sWhr & "Campo4=" & Clng(Me!Txt4) & " AND " 		'CAMPO DATA
    ' etc... altri 147 criteri se serve
    If Len(sWhr)>0 Then
       sWhr=MID$(sWhr,1,len(sWhr)-5)
       Me.Filter=sWhr
       Me.FilterOn=True
    Else
       Me.FilterOn=False
    End If

    Questo costruisce la stringa con i soli criteri valorizzati... e non tutti a prescindere.

    In cosa non ti sembra la soluzione al tuo quesito iniziale...?

    Puoi spiegare bene perché non la reputi tale.

  • Re: Problema con una query

    17/03/2025 - AlbertoL ha scritto:

     grazie per il suggerimento, anche se il problema è tutt'altro, cioè quello del post iniziale che non ha nulla a che vedere di tutto ciò.

    Ciao,

    Pare che Confucio un giorno disse: "Se dai un pesce a un uomo, lo nutrirai per un giorno. Se gli insegni a pescare, lo nutrirai per tutta la vita"

    Pertanto:

    • Ti ho postato i link per approfondire e per conoscere come si usano oggeti, metodi, eventi, etc etc....
      • Lì c'è proprio tutto tutto tutto tutto quello che si deve sapere per gli argomenti posti nel tuo Thread. Meglio della documentazione del Supporto Microsoft, cosa si vuole?... proprio non saprei cosa consigliare per un attento e approfondito studio al semplice fine di allargare le proprie conoscenze.
    • Ti ho fatto un esempio di come  :
      • Testare correttamente il valore restituito da una combobox
      • Come impostare un Filter
      • Come attivare e disattivare un Filter
    • @Alex ha fornito ulteriori validissimi esempi di approfondimento e spiegazioni

     .
    E se Confucio cognò la frase di cui sopra, in tal caso è stato proprio un grande ;-)

    Ma scherzi a parte le cose sono semplicemente TRE:

    1. Or non hai preso in considerazione i link proposti come studio/approfondimento e gli esempi propinati
    2. Or chiudi questo Thread e ne apri uno nuovo con un analisi dettagliata e precisa di quello che vuoi ottenere
    3. Or chiudi questo Thread e ne apri uno nuovo dove espliciti nel Titolo<:
      "AAA Cercasi 'pappa pronta' per impostare o una Where Condition o un Filter"

    .
    Però nel terzo caso, purtroppo per te, il regolamento del Forum lo vieta espressamente ...  ;-)   (vedi tu)

    Ultima cosa in riferimento al regolamento del Forum e come evidenziato anche da @Alex, siccome questo argomento è stato ampiamente e più volte trattato, prima di aprire un nuovo Thread, abbi pazienza, ma almeno una ricerca dell'argomento è doveroso.

    Tutto qua ;-)    "Se dai un pesce a un uomo, lo nutrirai per un giorno. Se gli insegni a pescare, lo nutrirai per tutta la vita"

  • Re: Problema con una query

    Ma se chiedi a qualcun altro di fare il lavoro e tu ti prendi i meriti, "che e' meglio", come dicono i Puffi

  • Re: Problema con una query

    17/03/2025 - @Alex ha scritto:

    17/03/2025 - AlbertoL ha scritto:

     grazie per il suggerimento, anche se il problema è tutt'altro, cioè quello del post iniziale che non ha nulla a che vedere di tutto ciò.

    Perché dici che il problema è tutt'altro... secondo me è esattamente la soluzione... mi sembra tu non abbia capito, l'esempio fatto da Franco e mono-condizione ma quel metodo con un minimo di logica, e ne abbiamo parlato spesso nel forum, consente di costruire una stringa contenente la WHERECONDITION costituirà da N criteri concatenati se questi non sono nulli... in questo caso c'è una listbox, se ci fosse una textbox conttolleresti il contenuto... etc...

    Dim sWhr As String
    If Len(Me!Txt1 & vbNullstring)>0 then sWhr=sWhr & "Campo1=" & Me!Txt1 & " AND " 'CAMPO TIPO NUMERICO
    If Len(Me!Txt2 & vbNullstring)>0 then sWhr=sWhr & "Campo2='" & Me!Txt2 & "' AND " 'CAMPO TIPO TESTO ESATTO
    If Len(Me!Txt3 & vbNullstring)>0 then sWhr=sWhr & "Campo3 Like '*" & Me!Txt3 & "*' AND " 'CAMPO TESTO PARZIALE
    If Len(Me!Txt4 & vbNullstring)>0 then sWhr=sWhr & "Campo4=" & Clng(Me!Txt4) & " AND " ' CAMPO DATA
    ' etc... altri 147 criteri se serve
    If Len(sWhr)>0 Then
       sWhr=MID$(sWhr,1,len(sWhr)-5)
       Me.Filter=sWhr
       Me.FilterOn=True
    Else
       Me.FilterOn=False
    End If

    Questo costruisce la stringa con i soli criteri valorizzati... e non tutti a prescindere.

    In cosa non ti sembra la soluzione al tuo quesito iniziale...?

    Puoi spiegare bene perché non la reputi 

    grazie Alex

  • Re: Problema con una query

    18/03/2025 - By65Franco ha scritto:

    17/03/2025 - AlbertoL ha scritto:

     grazie per il suggerimento, anche se il problema è tutt'altro, cioè quello del post iniziale che non ha nulla a che vedere di tutto ciò.

    Ciao,

    Pare che Confucio un giorno disse: "Se dai un pesce a un uomo, lo nutrirai per un giorno. Se gli insegni a pescare, lo nutrirai per tutta la vita"

    Pertanto:

    • Ti ho postato i link per approfondire e per conoscere come si usano oggeti, metodi, eventi, etc etc....
      • Lì c'è proprio tutto tutto tutto tutto quello che si deve sapere per gli argomenti posti nel tuo Thread. Meglio della documentazione del Supporto Microsoft, cosa si vuole?... proprio non saprei cosa consigliare per un attento e approfondito studio al semplice fine di allargare le proprie conoscenze.
    • Ti ho fatto un esempio di come  :
      • Testare correttamente il valore restituito da una combobox
      • Come impostare un Filter
      • Come attivare e disattivare un Filter
    • @Alex ha fornito ulteriori validissimi esempi di approfondimento e spiegazioni

     .
    E se Confucio cognò la frase di cui sopra, in tal caso è stato proprio un grande ;-)

    Ma scherzi a parte le cose sono semplicemente TRE:

    1. Or non hai preso in considerazione i link proposti come studio/approfondimento e gli esempi propinati
    2. Or chiudi questo Thread e ne apri uno nuovo con un analisi dettagliata e precisa di quello che vuoi ottenere
    3. Or chiudi questo Thread e ne apri uno nuovo dove espliciti nel Titolo<:
      "AAA Cercasi 'pappa pronta' per impostare o una Where Condition o un Filter"

    .
    Però nel terzo caso, purtroppo per te, il regolamento del Forum lo vieta espressamente ...  ;-)   (vedi tu)

    Ultima cosa in riferimento al regolamento del Forum e come evidenziato anche da @Alex, siccome questo argomento è stato ampiamente e più volte trattato, prima di aprire un nuovo Thread, abbi pazienza, ma almeno una ricerca dell'argomento è doveroso.

    Tutto qua ;-)    "Se dai un pesce a un uomo, lo nutrirai per un giorno. Se gli insegni a pescare, lo nutrirai per tutta la vita"

    grazie Franco

  • Re: Problema con una query

    18/03/2025 - migliorabile ha scritto:

    Ma se chiedi a qualcun altro di fare il lavoro e tu ti prendi i meriti, "che e' meglio", come dicono i Puffi

    ahahahahahahahahahhhhhhhhh    .... dai , in questo caso meglio Confucio  ;-)) 

    Se dai un pesce a un uomo, lo nutrirai per un giorno. Se gli insegni a pescare, lo nutrirai per tutta la vita

Devi accedere o registrarti per scrivere nel forum
14 risposte