Contatore "dinamico"

di il
15 risposte

Contatore "dinamico"

Buongiorno a tutti,
c'è modo di generare un id dinamico per le query in modo che cominci a contare da 1 (e relativa sequenza incrementale) ad ogni filtro che si applica/rimuove tramite parametro?
ci sto sbattendo la testa e cercando soluzioni da più di un giorno ma non riesco nel mio intento.
grazie a chi vorrà/potrà darmi un suggerimento

Nico

15 Risposte

  • Re: Contatore "dinamico"

    Nelle Queries, meglio di no, ma siccome immagino a te serva in Maschere o, in Report, la risposta è si...
    Nelle Maschere, ancorchè continue, basta inserire un Controllo TextBox NON ASSOCIATO a campi ma che richiama una funzione, quindi nell?origine COntrollo scriverai:
    
    =GetRecNum()
    Dove la Funzione sopra è questa:
    
    Public Function GetRecNum() As Long
        '============================================================
        'Name : GetRecNum()
        'Purpose :
        'Author : Maurizio Borrelli
        'Date : 01 febbraio 2002
        'Called by :
        'Calls :
        'Inputs :
        'Output : Posizione assoluta del record corrente+1
        '============================================================
    
        On Error GoTo erh
        With CodeContextObject.RecordsetClone
            If Not (.BOF And .EOF) Then
                .Bookmark = CodeContextObject.Bookmark
                GetRecNum = .AbsolutePosition + 1
            End If
        End With
    
    ext:
        Exit Function
    
    erh:
        GetRecNum = 0
    End Function
    Se ti serve in un report ancora più semplice in quanto basta impostare le proprietà:
    Origine controllo: =1
    Somma Parziale: Su tutto

    Saluti
  • Re: Contatore "dinamico"

    Solo con la query non ce la puoi fare. Devi servirti di una Funzione (Public Function) in VBA autoincrementale.

    P.S.: vedo che @Alex è stato più completo.
  • Re: Contatore "dinamico"

    Grazie per le risposte,
    il problema è che ho necessità dell'id di una query perchè sto sperimentando la fattibilità di una richiesta che mi è stata fatta, ovvero la visualizzazione di articoli in stile griglia 3x2 come fosse un visualizzatore di immagini.
    Quello che ho costruito fin'ora funziona ma sto avendo difficoltà nel momento in cui applico i filtri.

    In pratica ho creato una maschera (Maschera1) con 6 sottomaschere,
    ogni sottomaschera punta ad un id pedefinito della tabella articoli che è origine dati di maschera1

    la query di ogni relativa sottomaschera, nel campo indice contiene il criterio
    ([Forms]![Maschera1]![paginacorrente]*6)+1, (per la prima)
    ([Forms]![Maschera1]![paginacorrente]*6)+2, (per la seconda)
    ecc
    ([Forms]![Maschera1]![paginacorrente]*6)+6, (per la sesta)

    il numero pagine inizia da 0 per effettuare il calcolo esatto
    si suppone inoltre che l'indice parta sempre da 1

    Il numero di record e di pagine vengono calcolate sulla form1 a cui fanno riferimento le varie subform.

    Come dicevo, senza applicare i filtri funziona bene (anche se c'è quel fastidiosissimo refresh delle sottomaschere) ma come applico i filtri, non avendo un "riconteggio" degli id vedo le 9 foto sorrere intervallate da record vuoti anzichè i soli record interessati.

    L'obbiettivo è quindi quello di avere a filtro applicato un id che si rigenera volta per volta sul risultato ottenuto e che mi permetta di mantenere la funzionalità.

    Sarà che mi sarò ubriacato nei tentativi ma non riesco a uscirne...

    Nico
  • Re: Contatore "dinamico"

    nickbi78 ha scritto:


    In pratica ho creato una maschera (Maschera1) con 6 sottomaschere
    Che progettazione pazzesca! Come fai a gestire i dati così? Secondo me poi, tutto il tuo ragionamento a seguire va avanti in maniera pazzescamente esponenziale. Boh!
  • Re: Contatore "dinamico"

    Quindi quello che hai chiesto è una PAGINAZIONE... ad ogni cambio pagina vuoi che siano rinumerati e vuoi che ogni pagina abbia un numero fisso di Records...?

    Ti rimando a questo Articolo con relativo Esempio:
    forum.masterdrive.it/access-79/gestione-paginazione-maschere-continue-70896/
  • Re: Contatore "dinamico"

    OsvaldoLaviosa ha scritto:


    Che progettazione pazzesca!
    Sono consapevole che potrebbe essere (o è) una ca**ta pazzesca ma voglio capire con quali prestazioni posso far girare il tutto (ammesso che trovo o mi aiutiate a trovare una soluzione) e poter comunicare se conviene farlo o meno.
    diciamo che ora come ora, con quel poco che ci ho tirato su non è male e devo soprattutto vedere come si comporta con 20/30k record.
    comunque devo testarlo con i filtri per poter andare avanti...

    Nico
  • Re: Contatore "dinamico"

    @Alex ha scritto:


    Quindi quello che hai chiesto è una PAGINAZIONE... ad ogni cambio pagina vuoi che siano rinumerati e vuoi che ogni pagina abbia un numero fisso di Records...?
    Esattamante @Alex
    non nella classica visualizzazione continua ma in formato "griglia" n x m

    do subito un'occhiata al link!

    Nico
  • Re: Contatore "dinamico"

    Per la griglia, sempre io abbia inteso,... credo sia poco probabile...
  • Re: Contatore "dinamico"

    Ho appena visto l'esempio ma si tratta sempre di formato a maschere continue...
    il mio scopo è un altro, ovvero quello di ottenere una maschera con il risultato in foto:

    Cattura.PNG
    Cattura.PNG

    naturalmente si tratta di una bozza, una volta che funzonerà (se funzionerà) avrà un altro aspetto

    Nico
  • Re: Contatore "dinamico"

    Puoi farlo con SubForm non associate usando controlli da relazionare con le proprietà Campi Master/Secondari.

    Fattibile.
  • Re: Contatore "dinamico"

    Le subform non associate ci sono già, ogni riquadro che vedi in foto è una subform indipendente, non mi è chiaro quali campi dovrei usare per le relazioni di cui parli...

    Nico
  • Re: Contatore "dinamico"

    Che fossero 6 istanze di Form non associata era abbastanza evidente...
    Le sottomaschere sono/possono, ma nel tuoncaso devono avere la relazione tra un riferimento della maschera lati(1) ed il campo della sottomaschera lato(m) per fare in modonchenla singola istanza della subform filtri i dati che servono...
    Quale sia la logica ora devi trovarla tu perché devi generare 6 textbox non associate da valorizzare con le 6 chiavi esterne.

    Io farei così ad ogni record della maschera principale devi estrarre un recordset sula tabella lato M di solo 6 dati, ottenibile con TOO 6 ma con IdFk=idpk AND IdPk>Idpkold
    Dove IdPkOld è l'ultima visualizzata... in questo modo se scorri avanti prendi sempre i 6 record successivi... se scorri indietro invece di maggiore prenderai Minore della 1 visualizzata.

    Con le Pk che recuperi dei 6 record valorizzi le 6 textbox..
    Poi associ i campi master/secondari con PKMaster;PkDetail in modo da relazionare maschera sottomaschera conaccoppiatanPk/FI.

    Totale 5 righe di codice.

    Un esempio veloce è questo, non attinente ma sfrutta maschere non associate e textbox relazionali.
  • Re: Contatore "dinamico"

    Grazie @Alex per il suggerimento e l'esempio ma nella mia ricerca notturna ho risolto in modo decisamente più semplice grazie ad un tuo vecchio 3d su un caso simile...

    In pratica ho utilizzato le seguenti funzioni da te suggerite:
    ----------------------------------
    Private lngIndex As Long
    Public Sub ResetIndex()
    lngIndex = 0
    End Sub

    Public Function GetIndex(CampoQuery As Variant) As Long
    lngIndex = lngIndex + 1
    GetIndex = lngIndex
    End Function
    -----------------------------------

    Ho inserito nellatabella articoli un campo numerico ID2, all'apertura della maschera, azzero il contatore della funzione con RESETINDEX, svuoto il campo ID2 e lo popolo con una query di update con GETINDEX, in questo modo ho risolto anche con la questione che l'indice doveva partire sempre da 1 per il corretto funzionamento.
    Al filtro, ripeto esattamente la stessa procedura azzerando il contatore con RESETINDEX, svuotando il campo ID2 e dopo aver applicato il filtro lo popolo con GETINDEX ottenendo esattamente quello che mi serviva.

    I tempi di esecuzione sono più che trascurabili, devo solo capire come evitare il refresh delle maschere in fase di filtro o cambio pagina se è fattibile.

    Grazie ancora!

    Nico
  • Re: Contatore "dinamico"

    Se riesci ad aprirlo, è un File RAR, ma contiene un demo formato A97 credo che io non riesco più ad aprire.
    In sostanza è un esempio di come fare a ridurre il FLIKERING dovuto al Requery...

    mirror.masterdrive.it/alessandrobaraldi/DettaglioFaq.asp%3FIdFAQ=99.html
Devi accedere o registrarti per scrivere nel forum
15 risposte