Assegnare valore di una variabile ai criteri di una query

di il
13 risposte

Assegnare valore di una variabile ai criteri di una query

Buongiorno.
Devo assegnare un criterio ad una query di selezione utilizzando i valori di una casella combinata.
Ho proceduto a dichiarare la variabile pubblica

Public variabile as integer

poi ho assegnato il valore della casella combinata alla variabile nell'evento routine click

Variabile=casellacombinata

ho assegnato il valore della variabile al criterio della query nel seguente modo
SELECT DatePart("yyyy",[campo) AS anno
FROM Movimenti
WHERE (((DatePart("yyyy",[campo]))="& variabile &"));

ma il risultato è un valore nullo

Ditemi dove sbaglio.
Grazie

13 Risposte

  • Re: Assegnare valore di una variabile ai criteri di una query

    Margua ha scritto:


    WHERE (((DatePart("yyyy",[campo]))="& variabile &"));
    Dove è quella query? in VBA? ci apri un recordset?
  • Re: Assegnare valore di una variabile ai criteri di una query

    Ci apre un recorset ma è tra gli oggetti. Ovviamente la variabile mi serve per altre elaborazioni in altre form
  • Re: Assegnare valore di una variabile ai criteri di una query

    Margua ha scritto:


    ...è tra gli oggetti.
    Che vuol dire? che non l'hai perso? meglio così.
    Comunque, se vuoi aprire il recordset con già il valore della variabile esplicitata nella stringa SQL che poi usi per aprire il recordset, devi tenerla "fuori" dalla stringa.
    strSQL = "...[campo]))=" & variabile & "))"
    Debug.Print strSQL
    
    nella finestra immediata dovrai vedere qualcosa che finisce con
    [campo])) = 1234))
    Se poi non è un numero... se poi ci sono i doppiapici da mettere in una stringa ... (non ho tagliato un bel pezzo della Select per caso, altrimenti è pappa prontissima)
  • Re: Assegnare valore di una variabile ai criteri di una query

    Ho eseguito la verifica e la variabile mi ha dato il valore attribuito dalla casella combinata
    Quindi ho assegnato il criterio alla query con la seguente espressione:
    WHERE (((DatePart("yyyy",[valuta]))="variabile"));
    ma il risultato è lo stesso (valore nullo)
    Ho provato anche a eliminare gli apici
    WHERE (((DatePart("yyyy",[valuta]))= variabile));
    e anche in questo caso il valore e nullo.
    Scusa se ripropongo il quesito ma non riesco a comprendere dov'è l'errore.
  • Re: Assegnare valore di una variabile ai criteri di una query

    Margua ha scritto:


    Scusa se ripropongo il quesito ma non riesco a comprendere dov'è l'errore.
    Manca .

    Anche se personalmente non capisco a cosa possa servire quella query strutturata così... È solo un esempio, vero?
  • Re: Assegnare valore di una variabile ai criteri di una query

    Si è un esempio per un progetto che ho in mente
  • Re: Assegnare valore di una variabile ai criteri di una query

    Approfitto per fare didattica:
    essendo un numero l'espressione dovrebbe appunto essere = variabile
    l'operatore & serve per le concatenazioni. Nel caso specifico l'espressione &=variabile dovrebbe darmi il risultato del valore della variabile.
    Ho provato e anche in questo caso il valore è nullo.
    Perdonami se ripropongo ma spero serva a tutti noi neofiti.
  • Re: Assegnare valore di una variabile ai criteri di una query

    Non ho capito tutto il discorso. Se si tratta di problemi di sintassi, suggerisco di leggere qui
    http://www.baldyweb.com/BuildSQL.ht
  • Re: Assegnare valore di una variabile ai criteri di una query

    Margua ha scritto:


    Approfitto per fare didattica:
    Perdonami ma la didattica non si fa sui forum... Bisogna studiare gli argomenti partendo dalle basi e poi sui forum si chiariscono i problemi. La concatenazione di stringhe è un argomento fondamentale.

    Margua ha scritto:


    essendo un numero l'espressione dovrebbe appunto essere = variabile
    l'operatore & serve per le concatenazioni. Nel caso specifico l'espressione &=variabile dovrebbe darmi il risultato del valore della variabile.
    Ho provato e anche in questo caso il valore è nullo.
    Se fai quanto detto da Phil, funziona perché il cast a String è implicito. Puoi, proprio volendo, esplicitarlo tu con la
  • Re: Assegnare valore di una variabile ai criteri di una query

    Si hai ragione. Sul forum si trattano argomenti e non si fa didattica. Tuttavia il confronto con voi esperti mi ha messo nelle condizioni di migliorare le conoscenze sull'argomento Public Function e devo dire che ho risolto facendo questi passaggi:
    1) ho dichiarato la variabile pubblica: Public Variabile As Integer
    2) nella routine ho assegnato alla casellacombinata il valore della variabile:
    Private Sub CasellaCombinata_Click()
    Variabile = CasellaCombinata
    3) ho dichiatato la public Function D_anno() As String
    Associando D_anno = Variabile
    4) Ho assegnato al criterio dell'oggetto Query la funzione creata e tutto funziona bene.
    Grazie per i preziosi suggerimenti.
  • Re: Assegnare valore di una variabile ai criteri di una query

    Perdona la franchezza, ma puoi aver migliorato le conoscenze sulle funzioni, ma da come descrivi l'utilizzo che ne hai fatto probabilmente non hai colto l'utilizzo delle stesse.
    Certo sarebbe meglio se postassi il codice completo che hai scritto, ma se la tua funzione è strutturata tipo: [Code]Public Function D_anno() As String Variabile = CasellaCombinata End Function avrai modificato la WHERE probabilmente così: [Code]WHERE (((DatePart("yyyy",[campo]))=D_anno)); Tutto questo accrocchio per evitare un semplice

    Philcattivocarattere ha scritto:


    strSQL = "...[campo]))=" & variabile & "))"
    
    O, ancora più sinteticamente un [Code]strSQL = "...[campo]))=" & CasellaCombinata & "))"
  • Re: Assegnare valore di una variabile ai criteri di una query

    Si posono fare molte considerazioni... sicuramente scrivere una Public Function così, è poco pratica anzi è rigida e francamente... questa proprio non funzionerà
    Public Function D_anno() As String
        Variabile = CasellaCombinata
    End Function
    Eventualmente:
    Public Function D_anno() As String
        D_anno= CasellaCombinata
    End Function
    Rigida perchè richiede la Maschera che ospita il controllo aperta.
    Rigida perchè se si volesse eseguire la Query da altre fonti... obbliga a scrivere un'altra funzione.

    Quando si operano queste scelte sarebbe bene pensare sempre a come rendere accessibili da qualsiasi punto, sempre a prescindere.
    Faccio un esempio che rende l'idea di come modificare quella Funzione:
    
    Private sValue	As String
    Public Function D_anno(Optional Value as Variant) As String
        If Not isMissing(Value) Then sValue=Value
        D_anno=sValue
    End Function
    Questa funzione consente di valorizzare il "parametro" prima dell'esecuzione della query da qualsiasi parte del codice..., consente sia di scriverlo che di leggerlo, se si omette il Value diventa in lettura del valore precedente, se si passa il parametro si aggiorna il valore a quello passato...!
    Prima di chiamare la Query:
    
    Call D_Anno(25) ' questo aggiorna il valore che verrà poi usato nella Query a 25
    Nella Query
    
    SELECT * FROM T1 WHERE Anno=D_Anno()
    e verranno filtrati i dati con D_Anno=25

    Ovviamente è facile capire che una funzione scritta così può essere usata non solo per Anno ma per qualsiasi parametro... quindi magari invece di averne 150, D_anno/D_Mese/D_Nome/D_Cognome... si può ottimizzare...

    Ecc... ci sono mille esempi...
  • Re: Assegnare valore di una variabile ai criteri di una query

    Ho riprovato secondo il vostro suggerimento e funziona bene.
    In effetti era un problema nella dichiarazione della variabile.
    Grazie nuovamente
Devi accedere o registrarti per scrivere nel forum
13 risposte