Assegnazione range di valori a variabile temporanea

di il
50 risposte

Assegnazione range di valori a variabile temporanea

Buongiorno

Ho una query che mi seleziona i campi di una tabella (Ente, Codice fiscale, idformagiuridica, indirizzo etc.) e che vorrei filtrare sulla base dei valori del campo idformagiuridica che è un campo di tipo numerico.

Ho poi un menù con due pulsanti di comando, dei quali il primo mi dovrebbe selezionare gli enti che sono costituiti in forma societaria (idforma giuridica da 1 a 10) e il secondo gli altri enti  (idformagiuridica da 11 a 16).

Se tra i criteri della query nel campo idformagiuridica inserisco : beetween 1 and 10 , ovvero beetween 11 and 16, a seconda dei casi, ottengo il risultato desiderato.

Ho provato ha impostare una variabile temporanea (VarTempidFormaGiuridica) nei pulsanti di comando, ma non riesco a individuare la sintassi da utilizzare in una routine VBA per assegnare nei pulsanti di comando i criteri che mi consentano di ottenere tramite codice VBA gli stessi risultati che ottengo inserendo i criteri direttamente nella query. Ho provato in tutti i modi possibili senza successo. Qui di seguito solo alcuni esempi.

TempVars.Add "VarTempidFormaGiuridica", beetween 1 and 10
TempVars.Add "VarTempidFormaGiuridica", >=10
TempVars.Add "VarTempidFormaGiuridica",  “>=10”

Probabilmente mi sto perdendo in un bicchiere d'acqua, ma vi sarei grato se qualcuno mi potesse aiutare. 

Grazie mille ….. 

50 Risposte

  • Re: Assegnazione range di valori a variabile temporanea

    Ciao,

    non mi sono chiare alcune cose che vado a chiederti

    1. Hai un menù con due pulsanti … è un menù sulla barra dei comandi access oppure su una Form ?
    2. Hai due pulsanti … perchè non sostituisci i due pulsanti con una ComboBox popolata con le forme giuridiche da ricercare ?
    3. La query che destinazione ha ? … è un recordset per una Sub form oppure la usi a modo foglio excel per visualizzare i risultati ?

    Secondo gli scenari possibili ci sono diverse soluzioni possibili, ma un chiarimento occorre averlo per capire il flusso di queste operazioni ed individuare il metodo più consono.

  • Re: Assegnazione range di valori a variabile temporanea

    Un flag personagiuridica (si/no) era troppo esoso di risorse? Magari se domani inventano la srlsff srls fisica e la srlsgg giuridica devi aggiungere altri pulsanti e altro codice (between a b and between b c)

    Usare where flag=si non ti vincola al codice della tabella forme giuridiche.

    Qual è l'errore che riscontri?

    O usi between o usi 

    Where (campo=>a and campo <=b)

    Dove a e b sono i valori.

  • Re: Assegnazione range di valori a variabile temporanea

    Sempre che abbia compreso il problema… Sono d'accordo con Franco. Perché vincolarsi alle tempvars quando puoi gestire la cosa ricorrendo a combobox. Ad ogni modo può tornarti utile una discussione già trattata circa le tempvars:

     https://www.iprogrammatori.it/forum-programmazione/access/comportamento-tempvars-t51132.html

  • Re: Assegnazione range di valori a variabile temporanea

    Scusate….

    https://www.iprogrammatori.it/forum-programmazione/access/comportamento-tempvars-t51132.html

  • Re: Assegnazione range di valori a variabile temporanea

    07/07/2023 - BarLudwig ha scritto:


    TempVars.Add "VarTempidFormaGiuridica", beetween 1 and 10
    TempVars.Add "VarTempidFormaGiuridica", >=10
    TempVars.Add "VarTempidFormaGiuridica",  “>=10”

    Probabilmente mi sto perdendo in un bicchiere d'acqua, ma vi sarei grato se qualcuno mi potesse aiutare. 

    In questo caso devi correggere il tuo approccio con gli operatori

    Pr esempio potresti fare una cosa di questo tipo:

    in Vba imposti due tempvars

    TempVars.Add "Criteria01", 1 
    TempVars.Add "Criteria02", 10

    e sulla query nei criteri inserirai gli operati per filtrare i tuoi elementi:


    Se devo dirti la mia, il metodo non mi piace affatto… ecco perchè ti chiedevo in quale scenario viene usata la query, in modo da definire meglio come filtrare i dati.

  • Re: Assegnazione range di valori a variabile temporanea

    Ma come ti accennavo… 

    se al posto dei Pulsanti crei una combobox, oppure una casella di riepilogo, e la popoli con i due valori da filtrare, allora potresti fare una cosa di questo tipo:

    Dove caricherai i valori da filtrare, rispettivamente per le due forme, in questo modo:

    per esempio poniamo che la combo si chiami cmbSelect


    A questo punto avrai solo un evento da gestire su ComboBox Click
    Per esempio :

    Private Sub cmbSelect_Click()
    TempVars.Add "Criteria01", Me.cmbSelect.Column(0)
    TempVars.Add "Criteria02", Me.cmbSelect.Column(1)
    DoCmd.OpenQuery "TuaQuery", acViewNormal
    End Sub

    Ma ripeto… il metodo non mi piace affatto. ;-))

  • Re: Assegnazione range di valori a variabile temporanea

    Buonasera a tutti e grazie per la vostra disponibilità.

    Rispondo a Franco By65

    1. Il Menu è su una Form

    2. I due comandi con la variabile temporanea mi servono proprio per popolare  la combobox presente in una maschera.

    3. La query alla base della combobox, sulla base dei criteri inseriti nel campo idFormaGiuridica , mostra le società oppure gli enti. La maschera che accoglie i dati è infatti unica per società ed enti.

    4. La query la utilizzo esclusivamente per popolare la combobox. 

    Rispondo a sihsandrea

    Se domani inventano un altro tipo di società procedo a inserire un nuovo record in una tabella che ho creato che contiene idFormaGiuridica e DescrizioneFormaGiuridica.

    L'errore che riscontro è che nella combobox non compare niente, al contrario di quanto succede se inserisco i criteri direttamente nella query alla base della combo box.

    Aggiungo una ulteriore informazione.

    Precedentemente la query filtrava i dati sul campo DescrizioneFormaGiuridica (campo di tipo testo) e nei due pulsanti di comando avevo assegnato le variabili temporanee come segue.

    TempVars.Add "vartempSceltaEnteSocietà", "s*" (per il pulsdante "Mostra Società)

    TempVars.Add "vartempSceltaEnteSocietà", "[abcdefgilmnopqrtuvz]*"

    Il tutto funzionava perfettamente. Poi ho ristrutturato il Dbase anche sulla base di vostri precedenti consigli e ho ritenuto più opportuno servirmi dell'id piuttosto che della descrizione della forma giuridica.

    P.S. il DataBase attuale è qualitativamente molto migliore del precedente e di questo ancora ringrazio tutti voi

  • Re: Assegnazione range di valori a variabile temporanea

    07/07/2023 - BarLudwig ha scritto:


    4. La query la utilizzo esclusivamente per popolare la combobox. 

    Allora cambia approccio del tutto, ti conviene ed è più semplice.

    Quando popoli la combobox usa la Where Condition e basta … non ti serve altro

    07/07/2023 - BarLudwig ha scritto:


    2. I due comandi con la variabile temporanea mi servono proprio per popolare  la combobox presente in una maschera.

    Ok … allora imposta un Filtro da passare come parametro alla seconda Form che poi passerai a Origine riga della ComboBox dove implementerai la Where con tale stringa.

    e in questo modo popoli la combo box con il filtro che vuoi.


    Edit:

    ma se vuoi continuare con il metodo che hai adottato … allora vale il discorso e l'esempio fatto in precedenza dove per ogni pulsante scriverai in Vba :

    TempVars.Add "Criteria01", 1 
    TempVars.Add "Criteria02", 10
    
    etc etc...

    e gli operatori li metterai nella query che popola la combobox nella forma che ti ho descritto sopra


  • Re: Assegnazione range di valori a variabile temporanea

    Adesso non so in che contesto, ma sicuramente l'id è sempre indicato per filtrare un valore.

    In questo caso hai (accorciando)

    1 snc (persone)

    2 libero professionista (persona)

    3 sas (metà di oersone e metà giuridica)

    A seguire le giuridiche sa 4 a n

    Poi vuoi inserire la soc. Coop 

    Sarà la n+1

    Devi ogni volta fare

    Id>0 and < 4 and id= n+1 and id = n+m ecc…

    O riscrivi la tabella e diventa da 1 a 5 fisica (tipo di società) e da 6 a n giuridica ma in questo caso tutto ciò che hai fatto orima cambia perché se la srl l'avevi con id 5 oggi l'hai con id 6.

    La logica vuole che inserisci un campo tipo società e puoi usare si/no o assegnare tu un valore che accomuna più record tipo 1 persone 2 terzo settore 3 capitali ecc… scoppiasse il mondo sarai sempre in grado di filtrare in modo giusto. L'alternativa al campo testo vale se usi una combo in quanto passi il valore contenuto in quella combo non un semplice testo. Come ti ha suggerito by65franco.

    A volte si risponde brancolando nel buio, senza che chi chiede aiuto riesca ad esporre il problema.

    Se mi chiedi se per legare più tabelle è meglio l'id ti risponderemo sempre di sì perché è univoco, nel tuo caso hai bisogno di un filtro su più record ma con determinati criteri.

  • Re: Assegnazione range di valori a variabile temporanea

    Vi ringrazio tutti per la disponibilità e i suggerimenti sui quali devo riflettere un pò perché non mi sono chiarissimi, con l'eccezione di quello di sihSandrea che in effetti taglia la testa al toro e mi evita qualsiasi problema futuro.  Mi resta la curiosità di capire perché se uilizzavo un campo testo riuscivo ad assegnare alla variabile temporanea criteri plurimi

  • Re: Assegnazione range di valori a variabile temporanea

    Mi resta la curiosità di capire perché se uilizzavo un campo testo riuscivo ad assegnare alla variabile temporanea criteri plurimi

    Tieni presente che nessuno sa come hai valorizzato il campo, non puoi avere una risposta certa.

    Non sappiamo ne le tabelle che usi, ne i campi, ma soprattutto non sappiamo cosa devi realizzare.

  • Re: Assegnazione range di valori a variabile temporanea

    Gentile siHsandrea,

    mi rendo conto della correttezza della tua osservazione. Quello che sto cercando di realizzare per una pubblica amministrazione, è un database  che consenta la memorizzazione di informazioni e lo sviluppo di report, che possano costituire uno strumento utile per adempiere all'obbligo annuale di aggiornamento della banca dati delle società partecipate dalle PA, gestita dal Ministero Economia e Finanze .

  • Re: Assegnazione range di valori a variabile temporanea

    Forse se posti un file di esempio, tramite un sito di condivisione tipo Dropbox ecc…, si riesce a capire meglio e aiutarti in quanto la soluzione teoricamente dovrebbe essere abbastanza semplice.

  • Re: Assegnazione range di valori a variabile temporanea

    Quello che sto cercando di realizzare per una pubblica amministrazione, è un database  che consenta la memorizzazione di informazioni e lo sviluppo di report.

    Dal tipo di tabelle e richiesta avevo intuito che c'era un errore nel trattare le tabelle.

    Qui puoi trovare aiuto per realizzarlo.

    Prima cosa da fare è ragionare su questo report che deve venire fuori. Prima ancora di creare tabelle e form.

    Non so se e in quale sezione dovresti aprire un nuovo 3D.

    Osserva quel report. Avrà dei dati identificativi tipo report nr. Del… addetto alla compilazione ecc…

    Questi sono dati di testata.

    Poi hai un corpo. Il messaggio che comunica il report.

    Se fosse una fattura il messaggio sarebbe:

    Hai preso 5 mele a 1 euro per un totale di 5 euro

    Ogni riga ti informa sul contenuto del documento. Nel tuo caso saranno le informazioni che devi passare alle società partecipate.

    Infine hai un riepilogo (piede).

    Sai tu che informazioni inserite. A volte piede e testa vengono accorpati tutti sulla testata, te lo ricordo perche non conosco il report con cui invii i dati.

    Es. Appalto nr. Del tot. Gara di appalto, scadenza presentazione inizio e fine ecc…

    Poi segue un elenco di ditte appaltatrici.

    Questo è un esempio di come il piede può essere messo subito a seguire della testata, ma ciò non significa che non sia un riepilogo.

    Quindi il problema lo suddividi in tre parti.

    Testa, corpo e piede.

    Per ogni parte identifica le tabelle e i campi che ti servono. Piede di solito sono totali, puoi recuperarli tramite query dei dati relativi al report stesso.

    Appena hai inquadrato come e dove prendere i dati (archivi) per ogni sezione puoi cominciare a creare il progetto grafico.

    Per quelli che saranno i dati (ripetitivi) detti archivi, del report dovrai avere una form di inserimento, modifica, cancellazione, ricerca, e eventuale stampa. Questo è il minimo sindacale che deve poter fare un form.

    Considera che hanno la stessa logica strutturale, ergo fatto il primo cambiano solo i nomi e la fonte dei dati.

    Avrai operai, lavori, ecc… dati a se stanti, cioè che non dipendono da altre tabelle. Es.posso creare un cliente anche se non gli faccio fatture ma non posso emettere fattura se non ho almeno un cliente. Fatture dipende da cliente, quindi cliente è un archivio, se ho il cliente lo prelevo altrimenti lo inserisco.

    Considera che un archivio è ad esempio lavoratori, non vai ad inserire ogni volta nome, cognome, matricola ecc… ma ti apri il firm operai che gestisce la tabella operai, fai la ricerca e alla chiusura col pulsante “ok” ti riporti l'id del record e lo andrai ad inserire sull'idoperaio(fk) della tabella rapporti (o come vuoi chiamarla)

    Altro consiglio, usa nomi brevi e fai eventuale uso di sinonimi. Non tabella rapporolavoro e tabella rapportolavorosvolto. Usa lavoro per identificare il tipo di lavoro, e se fatto da più persone usa mansioni, per identificare la categoria che racchiude mansioni e lavori usa commessa. È un esempio ma almeno non rischi di impazzire con nomi apparentemente simili.

    Inizia a creare gli archivi. Considera che il form che ti tira fuori il report non è un archivio ma un diario (non so che parole usare) in quanto per la sua compilazione attinge alle tabelle archivio.

    Chiudo qui. Buon lavoro.

Devi accedere o registrarti per scrivere nel forum
50 risposte