Due condizioni where nell'apertura di una maschera.

di il
7 risposte

Due condizioni where nell'apertura di una maschera.

Ciao a tutti, spero di riuscire a spiegare il mio problema, che forse a voi farà ridere.
Cliccando su un campo di una maschera io devo passare a un'altra maschera che abbia lo stesso valore nel campo [Codice], e ho risolto così:

Private Sub ID_Click()
DoCmd.OpenForm "Contratti sottomaschera", acNormal, "", "[Codice]=" & "'" & [Codice] & "'"
End Sub

Ora mi serve di aggiungere che, oltre ad avere lo stesso codice, il campo [Importi] deve essere diverso da zero.
Ho provato in tutti i modi utilizzando "AND" ma non ci sono riuscito: per favore mi date una mano?
Grazie a tutti.
Francesco.

7 Risposte

  • Re: Due condizioni where nell'apertura di una maschera.

    Ciccio_54 ha scritto:


    ...
    Ora mi serve di aggiungere che, oltre ad avere lo stesso codice, il campo [Importi] deve essere diverso da zero.
    Ho provato in tutti i modi utilizzando "AND" ma non ci sono riuscito...
    Non dico di vederle proprio tutti i tentativi fatti ma qualcuno lo devi pubblicare... giusto per capire dove sta l'errore.
  • Re: Due condizioni where nell'apertura di una maschera.

    Ne ho fatti tanti sconclusionati, fra cui (mi vergogno a pubblicarlo)

    DoCmd.OpenForm "Contratti sottomaschera", acNormal, "", "[Codice]=" & "'" & [Codice] & "'" AND "[Importi]>" & "" & 0 & ""
  • Re: Due condizioni where nell'apertura di una maschera.

    Aggiungo io i tag code, così è leggibile agevolmente

    Ciccio_54 ha scritto:


    fra cui (mi vergogno a pubblicarlo)
    DoCmd.OpenForm "Contratti sottomaschera", acNormal, "", "[Codice]=" & "'" & [Codice] & "'" AND "[Importi]>" & "" & 0 & ""
    Come da definizione, la WHERE condition è una stringa che ha la stessa struttura di una WHERE condition, senza la parola WHERE.
    Non ottieni quello che ti interessa perché non concateni correttamente le parti costanti della stringa con la parti variabili, cosa resa più difficile, poi, dall'uso inutile di alcune operazioni di concatenazione, cioè alcune stringhe costanti concatenate con & possono diventare una sola. Ad esempio
    "[Codice]=" & "'" & ...
    diventa
    "[Codice]='" & ...
    Partendo dal risultato che vuoi ottenere, agisci a ritroso.
    Devi ottenere una stringa come questa:
    [Codice]='123456' AND [Importi]>0
    Ricordando che per qualificarla come stringa deve avere all'inizio e alla fine un doppioapice, individua quali parti della stringa sono "fisse", che saranno scritte per esteso, e quali invece quelle "variabili", che devi concatenare con &. Non confondere la e commerciale & con l'AND della WHERE condition.
    Tante parole per farti capire la "logica", perché poi la soluzione è veramente banale e sarebbe stato molto più facile indicarla ma così non avresti capito dove sbagliavi e come fare perché questo non accada più, visto che capire come si concatenano parti fisse e variabili in una stringa è fondamentale in molte altre situazioni
  • Re: Due condizioni where nell'apertura di una maschera.

    Anche se fuori tema, direi che il 3° argomento di DoCmd.OpenForm va lasciato vuoto (senza "").
  • Re: Due condizioni where nell'apertura di una maschera.

    Ce l'ho fatta!

    DoCmd.OpenForm "Contratti sottomaschera", acNormal, "", "[Codice]='" & [Codice] & "'" & "And [Importi]>'" & 1 & "'"

    Grazie mille, finalmente credo di aver capito l'uso di &. La prima routine l'avevo copiata, e non l'avevo studiata.
    Grazie ancora e alla prossima.
    Francesco.
  • Re: Due condizioni where nell'apertura di una maschera.

    Ciccio_54 ha scritto:


    Ce l'ho fatta!
    ...
    Grazie ancora e alla prossima.
    Ricorda l'uso dei tag code però, perché leggere il codice altrimenti fa impazzire gli occhi
    ... "[Codice]='" & [Codice] & "'" & "And [Importi]>'" & 1 & "'"
    Mumble mumble...
    1) anche il primo apice singolo può essere messo dentro la stessa stringa di AND, non serve separarlo;
    2) perché usi l'apice singolo anche per il filtro da applicare sul campo [Importi]? avrei detto che è di tipo numerico. Perché poi se all'inizio dicevi che doveva essere diverso da zero (o superiore, non so se può assumere valori negativi) ora invece usi 1 come termine di paragone?

    In base alla tua prima bozza di codice, avrei detto che dovevi scrivere
    "[Codice]='" & [Codice] & "' AND [Importi]>0"
  • Re: Due condizioni where nell'apertura di una maschera.

    Non avevo capito che l'apice indica una stringa, e ho dovuto mettere 1 al posto di 0 perché nei calcoli degli importi a volte escono valori tipo 0,00001, piccolissimi ma comunque superiori a zero, e non posso applicare correzioni e arrotondamenti.
    Ora provo a togliere gli apici singoli a [Importi] e vedo che succede.
    Ancora grazie.
Devi accedere o registrarti per scrivere nel forum
7 risposte