Contare le occorrenze di un recordset

di il
9 risposte

Contare le occorrenze di un recordset

Salve a tutti.
Ho un recordset locale su cui l'utente può fare varie modifiche (add new, delete, update)
Quando alla fine preme un pulsante per salvare le modifiche nel DB, devo controllare se ci sono dei record ripetuti.
In particolare devo verificare se ci sono 2 o più record con lo stesso valore nella coppia di campi TipoFase e CodFase

Es
Interna - Fase1
Esterna - Fase1
Interna - Fase2
Interna - Fase2

Dovrei avvisare l'utente che Fase2 ti tipo Interna è stata inserita 2 volte.

Come posso fare?

Avevo pensato di scorrere il mio recordset e creare una collection delle fasi che trovo, ma poi non saprei come contare le occorrenze.
Cosa mi consigliate?

Grazie

9 Risposte

  • Re: Contare le occorrenze di un recordset

    Salve.

    Parliamo di VB6 o di uno dei VB.Net ?
    Dimmi se ho capito bene:
    All'inserimento/modifica di un record, vorresti la segnalazione se esiste già un record contenente la coppia dei campi da te descritti...?
    Vorresti solo la segnalazione o anche NON permettere la duplicazione di record di quel tipo...?
    Saluti.
  • Re: Contare le occorrenze di un recordset

    Per queste cose di norma si dovrebbero sfruttare gli ERRORI derivanti dal tentativo di DUPLICAZIONE CHIAVI, nel tuo caso non è chiaro se è tuo intento solo SEGNALARE o ANNULLARE...!

    Non è chiaro oltre tutto come gestisci l'inserimento, se con un UpdateBatch o con singoli Update... il che renderebbe anomala la richiesta.

    Di solito, se devi verificare ma NON ANNULLARE l'inserimento, devi fare un COUNT dei Record sull'origine dati prima dell'inserimento...

    Insomma ci mancano troppi elementi per capire il contesto.
  • Re: Contare le occorrenze di un recordset

    Scusatemi per la mancanza di specifiche.
    Lavoro in VB6 (pensavo non servisse specificare il linguaggio visto che sono nell'area Visual Basic del forum)

    Le varie modifiche vengono gestite tramite un UpdateBatch.
    Sono riuscita a mostrare un messaggio di "errore" se l'utente cerca di inserire dati duplicati.
    Il problema è che utilizzo delle griglie particolari. Si basano sulle griglie della ComponentOne, ma sono dei controlli sviluppati da terze parti. Diciamo che ho a disposizione le principali proprietà e metodi delle griglie suddette.
    Se l'utente inserisce un codice duplicato, io mostro un messaggio e cancello la fase inserita. Se però l'utente preme il tasto ESC e poi si sposta sul record precedente della griglia, l'aggiornamento avviene ugualmente (cioè vedo comparire nella griglia il codice duplicato). Per questo, oltre al messaggio di errore su ogni singolo update o addnew, ho bisogno di fare un controllo finale prima dell'updatebatch.

    Vorrei quindi sia segnalare sia NON permettere la duplicazione di record già esistenti.

    Spero di essere stata un po' più chiara.

    Grazie
  • Re: Contare le occorrenze di un recordset

    Salve.
    Chiede venia per la domanda inutile, visto che esiste la sezione apposita per il 'VB.Net' - avevo la testa chissà dove...!.
    Immagino che il bravo Alex potrà darti una mano...
    Come 'input', personalmente posso dirti che in passato, anche se non ho mai usato grid di terze parti o similari, per gestire i record di una Tabella (perchè comunque i tuoi controlli, alla fine vanno ad inserire/modificare record in una o più Tabelle, vero...? Come anche ha consigliato Alex, lo facevo gestendo l'errore che Access fornisce alla tentata duplicazione di campi, dichiarati 'univoci'.
    Quindi, se i tuoi 2 campi 'TipoFase' e 'CodFase' devono essere 'irripetibili' nei record della Tabella, li potresti fare chiave primaria... Oppure, se la chiave primaria dovesse essere obbligatoriamente un'altro campo/i, potresti creare un ulteriore 'Campo' che fosse la somma dei 2 interessati e dichiararlo 'Indicizzato (duplicati NON ammessi) e usare l'errore di Access... Che è gerarchicamente, credo Alex poi chiarirà il tutto, più rilevante delle griglie che hai menzionato...e non dovrebbe permettere l'inserimento del record.
    Saluti.
  • Re: Contare le occorrenze di un recordset

    Prima di eseguire l'UpdateBatch, devi verificare le fasi da aggiornare, eliminando dal recordset,o dalla griglia, quelle duplicate.
    Solo alla fine eseguirai l'UpdateBatch.
  • Re: Contare le occorrenze di un recordset

    Io solitamente preferisco fare un controllo prima di inserire un nuovo record.
    In questo caso metterei un filter su TipoFase e CodFase e farei l'addnew solo per EOF e BOF = True
  • Re: Contare le occorrenze di un recordset

    Basta controllare EOF...
    Se un RS aperto ha EOF=True è vuoto anche senza testare in AND il BOF, ovviamente non è vero il contrario in quanto BOF è vero se il BOOKMARK è sul 1° Record.
  • Re: Contare le occorrenze di un recordset

    Sulle griglie che uso io ho un Evento BeforeUpdate che mi dà la possibilità di fare controlli prima della scrittura ed eventualmente mettere un Cancel =true per abortire l'update, la tua griglia ha qualcosa di simile?
  • Re: Contare le occorrenze di un recordset

    Chissà perchè, ma ho l'impressione che a patapatty non gliene freghi più niente di questo post ...


    Abbiamo due problemi diversi:

    patapatty ha scritto:


    Se però l'utente preme il tasto ESC e poi si sposta sul record precedente della griglia, l'aggiornamento avviene ugualmente (cioè vedo comparire nella griglia il codice duplicato).
    Evidentemente manca la gestione in uscita, quando l'utente preme ESC.
    Ma se continui a parlare di teoria e non ti decidi a mostrare il codice imputato non se ne verrà mai a capo.
    Infatti il post è pieno di suggerimenti che però su questo problema non hanno a che vedere con questo problema.

    patapatty ha scritto:



    Per questo, oltre al messaggio di errore su ogni singolo update o addnew, ho bisogno di fare un controllo finale prima dell'updatebatch.
    Anche qui occorre vedere il codice, altrimenti (come è già accaduto) ognuno spiega la sua soluzione (più o meno corretta).
Devi accedere o registrarti per scrivere nel forum
9 risposte