Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Access vba] Azzerare una costante tramite query

    Buondì a tutti,
    ho una query che esegue un ranking tramite VBA.

    Sto cercando una soluzione per far capire al VBA quando la query si trova nell'ultimo record in modo da porter azzerare la costante per un successivo utilizzo.

    Riporto in sintesi quello che sto utilizzando

    La query funziona così:
    Ranking: Conteggia([campo])

    La funzione è fatta così:
    codice:
    Public Indicizza As Long
    Function Conteggia(testo As String) As Long
        Indicizza = Indicizza + 1
        Conteggia = Indicizza
    End Function
    La costante da azzerare a fine query è Indicizza, vanno bene anche suggerimenti.. se vi passa qualcosa per la testa che potrebbe funzionare sparate che nel caso poi approfondisco e faccio qualche test.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333

    Re: [Access vba] Azzerare una costante tramite query

    Originariamente inviato da ibernet

    Ranking: Conteggia([campo])
    codice:
    Public Indicizza As Long
    Function Conteggia(testo  As String) As Long
        Indicizza = Indicizza + 1
        Conteggia = Indicizza
    End Function
    Forse sono io che non ci arrivo ma non capisco la domanda !

    Cosi come la vedo io quella funzione ogni volta che viene
    lanciata incrementa il valore di "Indicizza" di 1 unita

    Ma cosa lancia la tua funzione ???

    La variabile testo da dove viene presa ????

    Ancora la variabile testo a cosa serve nella funzione ? a nulla ??


    Scusami se ho fatto solo domande

    .

  3. #3
    Ciao nessun problema, errata corrige:

    Query: Ranking: Conteggia()

    codice:
    Public Indicizza As Long
    Function Conteggia() As Long
        Indicizza = Indicizza + 1
        Conteggia = Indicizza
    End Function



    In riferimento alla domanda che pongo sopra ogni volta che la query apre la funzione come dici incrementa il valore di 1.
    La query termina correttamente e fin qui tutto bene.

    Successivamente senza chiudere il db rilancio la query, il problema è che la costante indicizza è rimasto con il valore xxx di conseguenza non riparte più da 1.

    Sto cercando di trovare un modo per azzerare la costante tra un lancio e un altro senza dover chiudere e riaprire il db

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    non ho capito tutto ma !!!
    codice:
    Function Azzera()
        Indicizza = 0
    End Function
    questa ti riporta a zero il valore di "Indicizza"

    Devi beccarti un evento che avvenga con certezza prima di lanciare la tua query Ranking ??
    Questa viene lanciata da un pulsante?
    allora il pulsante potrebbe fare:

    codice:
    Public Indicizza As Long
    
    Function ClikPulasante()
        Call Azzera
        Call Conteggia
    End Function
    
    Function Azzera()
        Indicizza = 0
    End Function
    
    Function Conteggia() As Long
        Indicizza = Indicizza + 1
        Conteggia = Indicizza
    End Function
    Ripeto non ho capito tutto, ci ho messo TANTA di fantasia
    Quale evento ti lancia la funzione "Conteggia" ???

    Facci sapere

    .

  5. #5
    Dalla prima riga si capisce che la funzione viene lanciata da una query:
    ho una query che esegue un ranking tramite VBA.
    Non esistono pulsanti semplicemente doppio click sulla query

    Purtroppo il tuo suggerimento non è applicabile appunto perché non mi trovo in una maschera, è semplice come l'ho spiegata tutto quello che non ho aggiunto è appunto perché non c'è, non serve fantasia.

    Lancio a mano una semplice query con incorporato in un campo la funzione che fa il Ranking
    il problema sta quando rilancio di nuovo la query (a mano..)
    La costante parte da un indice che non è uguale a 1 ma parte col conteggio da dove era arrivata nell'esecuzione precedente.

    Io stavo pensando di intercettare in qualche modo quando la query legge l'ultimo record così posso azzerare la costante.. il problema è come intercettare che sta leggendo l'ultimo record..

    Altre idee per risolvere al momento non mi vengono in mente

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Adesso ho capito anch'io
    e in effetti sono arrivato a simulare il tuo problema,


    Noto anche che il contatore si incrementa con dei semplici ridimensionamemti della finestra della query


    Stasera ci penso un po su,
    mi sembra un problema di difficile soluzione ( sono i piu belli )


    Due domande
    - Nella tabella hai una chiave primaria univoca
    - Hai pensato ad usare una normale query con contatore progressivo


    .

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Ci sono ancora dei problemi ma sembra che comincia a funzionare,

    Fatti questa demo

    Crea una tabella di Nome "Tab"
    - C1 --- Testo --- NON Null ------- Ammette Duplicati --- Non Indicizzato
    - C2 --- Testo --- Ammette Null --- Ammette Duplicati --- Non Indicizzato
    - C3 --- Testo --- Ammette Null --- Ammette Duplicati --- Non Indicizzato
    NB: Mi sono messo quasi nel caso peggiore, Senza nessun indice

    Crea una query di nome "Que1"
    codice:
    SELECT Tab.C1, Tab.C2, Tab.C3, Conteggia([C1]) AS Ranking FROM Tab;
    Crea un Modulo e ci metti questa funzione
    codice:
    Public Indicizza As Long
    
    Function Conteggia(testo As String) As Long
    
    Dim X As Long
    X = DCount("*", "Tab")
    
        Indicizza = Indicizza + 1
        Conteggia = Indicizza
        
    If Conteggia >= X Then Indicizza = 0
        
    End Function
    Pero se poi lavori un po sulla query noterai i problemi
    vale a dire il campo "Ranking" si riaggiorna

    se invece la tua query è in sola lettura dovrebbe andare

    Facci sapere

    NB: Hai un qualunque campo univoco nella tabella ??


    .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.