CONDIZIONE IIF SU QUERY ACCESS (SQL)

di il
7 risposte

CONDIZIONE IIF SU QUERY ACCESS (SQL)

Buonasera,
premetto che sono un autodidatta e non ho molta pratica di sibtassi di VBA.
Sto contiuando a implementare un vecchio database di gestione attrezzatura, mi sono arenato su qst codizione:
CasellaConbinata1 = Cbo_CodiceAttrezzo
CasellaConbinata2 = Cbo_PartNumber
le caselle prendono i valori da query di unione:
Cbo_CodiceAttrezzo da Q604-1_CodiceAttrezzoconTutto con qst codice:

SELECT [CodiceIdentificativoAttrezzo]
FROM [T001_RegistroAttrezzature]
UNION SELECT '(Tutto)' as [CodiceIdentificativoAttrezzo]
FROM [T001_RegistroAttrezzature];
mentre
Cbo_PartNumber da Q604-2_PartNumberTutto

SELECT [PartNumber]
FROM [T001_RegistroAttrezzature]
WHERE [CodiceIdentificativoAttrezzo] = (SELECT [CercaCodiceAttrezzo] FROM [T801_CercaAtrezzo])
UNION SELECT '(Tutto)' as [PartNumber]
FROM [T001_RegistroAttrezzature];
Ora vorrei che quanto seleziono (Tutto) sulla Cbo_CodiceAttrezzo la routine mi pemetta di vedere tutti i record e non solo quello filtrato dalla condizione WHERE (Tutto) .......
Ho provato a inserire una istruzione IIF, ma nella vergogna vi posto quello che ho scritto:

SELECT [PartNumber]
FROM [T001_RegistroAttrezzature]
IIF([CodiceIdentificativoAttrezzo] = ‘(Tutto)’;(UNION SELECT '(Tutto)' as [PartNumber] FROM [T001_RegistroAttrezzature]); (WHERE [CodiceIdentificativoAttrezzo] = (SELECT [CercaCodiceAttrezzo] FROM [T801_CercaAtrezzo])) UNION SELECT '(Tutto)' as [PartNumber] FROM [T001_RegistroAttrezzature];);
L'idea era quella di dire se viene selezionato (Tutto) nella Cbo_CodiceAttrezzo allora mostrami tutti ipart number e il valore (Tutto) altrimenti procedi e filtra i PartNumber in base alla sezione Cbo_CodiceAttrezzo

So di avere poche idee, vi chiedo un aiuto.

7 Risposte

  • Re: CONDIZIONE IIF SU QUERY ACCESS (SQL)

    Lordpedro76 ha scritto:


    premetto che sono un autodidatta e non ho molta pratica di sibtassi di VBA
    Le sintassi che hai mostrato poi sono in SQL (linguaggio tipico delle query).

    Lordpedro76 ha scritto:


    Ora vorrei che quanto seleziono (Tutto) sulla Cbo_CodiceAttrezzo la routine mi pemetta di vedere tutti i record e non solo quello filtrato dalla condizione WHERE (Tutto) .......
    Credo che dovresti gestire una Private Sub (penso sull'evento "Dopo aggiornamento" della casella combinata) in VBA tale che:
    Se è Tutto deve impostare la proprietà Filter="", quindi poi FilterOn=True.
    ...non sono sicurissimo, fai qualche prova...oppure direttamente FilterOn=False...sempre fai prove...
  • Re: CONDIZIONE IIF SU QUERY ACCESS (SQL)

    Buongiorno,
    non ho risolto con il codice SQL ma ho utilizzato una PrivateSub con più condizioni, alla fine nella secondo combobox non si nota pìu la mancanza delle scelte
  • Re: CONDIZIONE IIF SU QUERY ACCESS (SQL)

    Se posti il codice VBA utilizzato, magari può essere utile per il forum ad altri utenti.
  • Re: CONDIZIONE IIF SU QUERY ACCESS (SQL)

    Lordpedro76 ha scritto:


    Ora vorrei che quanto seleziono (Tutto) sulla Cbo_CodiceAttrezzo la routine mi pemetta di vedere tutti i record e non solo quello filtrato dalla condizione WHERE (Tutto) .......
    Ho provato a inserire una istruzione IIF
    Non credo che servano macro. Proverei così:

    La IIF li, scritta in quel modo, non ha senso. L'idea è buona ma l'istruzione non fa quel che pensi. A quanto ne so io non si può costruire dinamicamente il predicato di una query all'interno della query stessa.
    Devi fare in modo che la WHERE non venga considerata nel caso in cui è vera la condizione di [CodiceIdentificativoAttrezzo] = ‘(Tutto)’ quindi diventa:
    
    SELECT [PartNumber]
    FROM [T001_RegistroAttrezzature]
    WHERE [CodiceIdentificativoAttrezzo] = (SELECT [CercaCodiceAttrezzo] FROM [T801_CercaAtrezzo])
        OR [CodiceIdentificativoAttrezzo] = '(Tutto)'
    UNION SELECT '(Tutto)' as [PartNumber]
    FROM [T001_RegistroAttrezzature];
    In questo caso:
    1) o [CodiceIdentificativoAttrezzo] è valorizzato a (Tutto), quindi restituisce VERO e quindi la OR restituirà sempre VERO alla WHERE facendo valere tutti i record;
    2) oppure restituirà FALSO che in OR con [CodiceIdentificativoAttrezzo] = (SELECT [CercaCodiceAttrezzo] FROM [T801_CercaAtrezzo]) restituirà alla WHERE il valore VERO solo quando la seconda condizione è verificata.
  • Re: CONDIZIONE IIF SU QUERY ACCESS (SQL)

    OsvaldoLaviosa ha scritto:


    Se posti il codice VBA utilizzato, magari può essere utile per il forum ad altri utenti.
    Si, certo, di segutio parte del codice che ho utlizzato bypassando il problema "IIF",
    
    Dim varCodice As String
    Dim VarPartN As String
    
    varCodice = Me.Cbo_CodiceAttrezzo.Value
    VarPartN = Me.Cbo_PartNumber.Value
    
    '       FILTRO CONDIZIONE 1
    If varCodice = "(Tutto)" And VarPartN = "(Tutto)" Then
        'MsgBox "Condizione 1: " & "(Filtro impostato su Codice: " & varCodice & " e Part Numeber : " & VarPartN & ")"
        Me.FilterOn = False
        Me.Requery
    End If
    
    '       FILTRO CONDIZIONE 2
    If varCodice <> "(Tutto)" And VarPartN = "(Tutto)" Then
        'MsgBox "Condizione 2: " & "(Filtro impostato su Codice: " & varCodice & " e Part Numeber : " & VarPartN & ")"
        Me.Filter = "CodiceIdentificativoAttrezzo = '" & varCodice & "'"
        Me.FilterOn = True
    End If
    
    '       FILTRO CONDIZIONE 3
    If varCodice <> "(Tutto)" And VarPartN <> "(Tutto)" Then
        'MsgBox "Condizione 3: " & "(Filtro impostato su Codice: " & varCodice & " e Part Numeber : " & VarPartN & ")"
        Me.Filter = "CodiceIdentificativoAttrezzo = '" & varCodice & "'" & "And PartNumber Like '*" & VarPartN & "*'"
        Me.FilterOn = True
    End If
    
    '       FILTRO CONDIZIONE 4
    If varCodice = "(Tutto)" And VarPartN <> "(Tutto)" Then
        'MsgBox "Condizione 4: " & "(Filtro impostato su Codice: " & varCodice & " e Part Numeber : " & VarPartN & ")"
        Me.Filter = "PartNumber Like '*" & VarPartN & "*'"
        Me.FilterOn = True
    End If
    
  • Re: CONDIZIONE IIF SU QUERY ACCESS (SQL)

    Sgrubak ha scritto:


    Lordpedro76 ha scritto:


    Ora vorrei che quanto seleziono (Tutto) sulla Cbo_CodiceAttrezzo la routine mi pemetta di vedere tutti i record e non solo quello filtrato dalla condizione WHERE (Tutto) .......
    Ho provato a inserire una istruzione IIF
    Non credo che servano macro. Proverei così:

    La IIF li, scritta in quel modo, non ha senso. L'idea è buona ma l'istruzione non fa quel che pensi. A quanto ne so io non si può costruire dinamicamente il predicato di una query all'interno della query stessa.
    Devi fare in modo che la WHERE non venga considerata nel caso in cui è vera la condizione di [CodiceIdentificativoAttrezzo] = ‘(Tutto)’ quindi diventa:
    
    SELECT [PartNumber]
    FROM [T001_RegistroAttrezzature]
    WHERE [CodiceIdentificativoAttrezzo] = (SELECT [CercaCodiceAttrezzo] FROM [T801_CercaAtrezzo])
        OR [CodiceIdentificativoAttrezzo] = '(Tutto)'
    UNION SELECT '(Tutto)' as [PartNumber]
    FROM [T001_RegistroAttrezzature];
    In questo caso:
    1) o [CodiceIdentificativoAttrezzo] è valorizzato a (Tutto), quindi restituisce VERO e quindi la OR restituirà sempre VERO alla WHERE facendo valere tutti i record;
    2) oppure restituirà FALSO che in OR con [CodiceIdentificativoAttrezzo] = (SELECT [CercaCodiceAttrezzo] FROM [T801_CercaAtrezzo]) restituirà alla WHERE il valore VERO solo quando la seconda condizione è verificata.
    Ho provato a inserire il codice all'interno della query, ma sicuramente sto facendo confusione con altre condizioni perchò continua a restituirmi solo (Tutto), ci lavoro sopra.
  • Re: CONDIZIONE IIF SU QUERY ACCESS (SQL)

    Adesso mi sono arenato su un altra cosa che mi piacerebbe fare in automatico:
    selezionare parte del testo di una casella di testo e senza fare CTRL+C e CTRL+V vorrei inserirla in automatico nella Cbo che uso per fare la ricerca.
    E' possibile?
Devi accedere o registrarti per scrivere nel forum
7 risposte