Generatore di Espressioni Nelle Query, Espressione IIf

Anonimo
2012-02-16T10:58:44+00:00

Se in un campo di una query utilizzando il generatore di espressioni, faccio eseguire un calcolo e scrivo :

Espr1: IIf(AnagraficaBrogliaccio![4]="24/07";6;0)

Il valore che mi restituirà sarà 6 o 0.

Ma se invece di un solo parametro ne inserisco 2 e scrivo la seguente espressione

Espr1: IIf(AnagraficaBrogliaccio![4]="24/07";6;0) Or IIf(AnagraficaBrogliaccio![4]="00/07";6;0)

Il valore che mi restituisce è -1. 

Questo Perché?, .... Sbaglio a scrivere l’espressione? .... Ed in che modo dovrei scrivere l’espressione corretta?

Utilizzando sempre un solo campo della query però.

Grazie Paolo

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-05-17T13:50:18+00:00

Ciao Paolo,

la risposta alla prima domanda è SI

Per la seconda domanda, se per colpi in bersaglio intendi [colpi al centro] + [colpi in sagoma], puoi fare così:


Function fncRisultato(ByVal intColpiTot As Integer, _

    ByVal intColpiCentro As Integer, ByVal intColpiSagoma As Integer) _

    As String

    Select Case intColpiTot

        Case Is < (intColpiSagoma + intColpiCentro)

            fncRisultato = "Hai utilizzato più cartucce di quelle consentite!!!"

        Case 32 '-- LIVELLO DEI COLPI TOTALI DELLA LEZIONE

            Select Case intColpiCentro

                Case 28 To 32

                    fncRisultato = "Ottimo"

                Case 19 To 27

                    fncRisultato = "Buono"

                Case Is < 19

                    Select Case (intColpiCentro + intColpiSagoma)

                        Case Is < 11

                            fncRisultato = "Non Valutabile"

                        Case 11 To 18

                            fncRisultato = "Insufficiente"

                        Case 19 To 32

                            fncRisultato = "Sufficente"

                        Case Else

                            'Do Nothing

                    End Select

                Case Else

                    'Do Nothing

            End Select

        Case 60 '-- LIVELLO DEI COLPI TOTALI DELLA LEZIONE

        ...........................................

        Case XX '-- LIVELLO DEI COLPI TOTALI DELLA LEZIONE

            '.....................

        Case Else

            fncRisultato = "n/a"

    End Select

End Function


Per brevità ho omesso di riscrivere tutta la funzione.

David

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

25 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-05-17T11:16:43+00:00

    Guardando il file ho capito Ho provato con 32 cartucce e va tutto ok

    se devo valutare il tiro con 60 cartucce vado a cambiare i valori nel modulo aggiungendo a quello esistente in questo modo?

    Function fncRisultato(ByVal intColpiTot As Integer, _

        ByVal intColpiCentro As Integer, ByVal intColpiSagoma As Integer) _

        As String

        Select Case intColpiTot

            Case 32

                Select Case intColpiCentro

                    Case 28 To 32

                        fncRisultato = "Ottimo"

                    Case 19 To 27

                        fncRisultato = "Buono"

                    Case Is < 19

                        Select Case (intColpiCentro + intColpiSagoma)

                            Case Is < 11

                                fncRisultato = "Non Valutabile"

                            Case 11 To 18

                                fncRisultato = "Insufficiente"

                            Case 19 To 32

                                fncRisultato = "Sufficiente"

                            Case Else

                                'Do Nothing

                        End Select

                    Case Else

                        'Do Nothing

                End Select

            Case Else

                'Do Nothing

        End Select

    Select Case intColpiTot

            Case 60

                Select Case intColpiCentro

                    Case 54 To 60

                        fncRisultato = "Ottimo"

                    Case 36 To 53

                        fncRisultato = "Buono"

                    Case Is < 35

                        Select Case (intColpiCentro + intColpiSagoma)

                            Case Is < 19

                                fncRisultato = "Non Valutabile"

                            Case 19 To 35

                                fncRisultato = "Insufficiente"

                            Case 36 To 60

                                fncRisultato = "Sufficiente"

                            Case Else

                                'Do Nothing

                        End Select

                    Case Else

                        'Do Nothing

                End Select

            Case Else

                'Do Nothing

        End Select

    End Function

    Ho provato e sembra anche funzionare Bene, se ci sono errori che tu leggi fammi sapere

    Ciaooo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-05-17T10:36:44+00:00

    Maschera o Report i concetti sono gli stessi.

    In entrambi i casi hai un'origine dati che va impostata su una tabella/query/costrutto SQL.

    Nel tuo caso nell'origine dati del report hai una query.

    Modifica la query aggiungendo un nuovo campo fatto in questo modo:


    Risultato: fncRisultato([Cartucce Esplose],[Al Centro],[In Sagoma])


    Ora aggiungi al tuo report il nuovo campo che vedrai e lancia il report.

    Ovviamente devi anche importare la funzione altrimenti andrà in errore.

    Se proprio non riesci prova a guardare questo esempio (file Bersagli.mdb), oppure metti a disposizione il tuo file.

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-05-17T09:48:50+00:00

    ? ...... Molto difficile per me comprendere il tutto. Il risultato della query io lo vado  a stampare , non ho una query sulla maschera ma sul report .

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-05-17T08:35:22+00:00

    Per farlo si può fare,

    il problema è che l'espressione diventerà praticamente illeggibile ed anche una successiva manutenzione potrebbe diventare oltremodo gravosa oltre che, visto il numero di IIF, potresti avere un rallentamento vistoso nella visualizzazione del risultato rispetto al cambio di record (ovvero la casella di testo ti mostrerà il risultato dell'espressione con un certo ritardo rispetto al passaggio del record).

    Una possibile soluzione alternativa potrebbe passare per una funzione che restituisca il risultato accettando come parametri in ingresso il nr di colpi totali, quelli andati "al centro" e quelli andati "in sagoma"

    La funzione internamente valuterà il numero totale di colpi che gli passi e poi in base a quello valuterà le alternative in base al numero di colpi in sagoma e quelli al centro.

    Per scriverla devi però sapere preventivamente tutte le casistiche di cartucce previste per ogni tipo di lezione e di conseguenza per ogni casistica la ripartizione tra colpi al centro e colpi in sagoma con il relativo risultato.

    La funzione potrebbe essere utilizzata nella query che porrai a base della tua maschera restituendo più velocemente il risultato e risultando nel contempo di più facile manutenzione.

    Faccio un esempio con i dati che abbiamo fino ad ora: inserisci un nuovo modulo (non di classe) e copiaci dentro la seguente funzione:


    Function fncRisultato(ByVal intColpiTot As Integer, _

        ByVal intColpiCentro As Integer, ByVal intColpiSagoma As Integer) _

        As String

        Select Case intColpiTot

            Case 32

                Select Case intColpiCentro

                    Case 28 To 32

                        fncRisultato = "Ottimo"

                    Case 19 To 27

                        fncRisultato = "Buono"

                    Case Is < 19

                        Select Case (intColpiCentro + intColpiSagoma)

                            Case Is < 11

                                fncRisultato = "Non Valutabile"

                            Case 11 To 18

                                fncRisultato = "Insufficiente"

                            Case 19 To 32

                                fncRisultato = "Sufficiente"

                            Case Else

                                'Do Nothing

                        End Select

                    Case Else

                        'Do Nothing

                End Select

            Case Else

                'Do Nothing

        End Select

    End Function


    che utilizzerai nella query posta a base della maschera in questo modo:


    SELECT [Cartucce Esplose], [Al Centro], [In Sagoma], fncRisultato([Cartucce Esplose],[Al Centro],[In Sagoma]) AS Risultato

    FROM Bersagli;


    David

    La risposta è stata utile?

    0 commenti Nessun commento