Incrementare un valore in base ad un altro

di il
9 risposte

Incrementare un valore in base ad un altro

Ciao!
Cerco di spiegare come meglio posso il mio problema.
Ho un campo chiamato "numero ordine" che AMMETTE duplicati (come chiave primaria ho un ID a numerazione automatica) e un altro campo che si chiama "numero problematica".
Ho una maschera che permette l'inserimento dei dati e vorrei che ogni volta che viene inserito un "numero ordine" per la prima volta il "numero problematica" è 1, mentre se già il "numero ordine" inserito fosse già esistente vorrei che il contatore di "numero problematica" si incrementasse.

Grazie!

9 Risposte

  • Re: Incrementare un valore in base ad un altro

    NorinRadd ha scritto:


    ...
    Ho un campo chiamato "numero ordine" che AMMETTE duplicati (come chiave primaria ho un ID a numerazione automatica) e un altro campo che si chiama "numero problematica".
    Ho una maschera che permette l'inserimento dei dati e vorrei che ogni volta che viene inserito un "numero ordine" per la prima volta il "numero problematica" è 1, mentre se già il "numero ordine" inserito fosse già esistente vorrei che il contatore di "numero problematica" si incrementasse.
    Quello che chiedi è facilmente realizzabile con un DMax ma non funziona se si è in multiutenza. Prima di lanciarmi in link, però, esprimo un dubbio che mi è sorto: temo che le tabelle siano strutturate male. Puoi confermare che hai seguito i principi della normalizzazione o eventualmente, se non l'hai fatto, per quale motivo?
    La maschera dovrebbe essere strutturata con maschera principale (con le caratteristiche dell'ordine) e una sottomaschera (per le diverse "problematiche" legate a quell'ordine)
  • Re: Incrementare un valore in base ad un altro

    Quindi vuoi che si incrementi SEMPRE di 1...! Partendo da ZERO...
  • Re: Incrementare un valore in base ad un altro

    Philcattivocarattere ha scritto:


    NorinRadd ha scritto:


    ...
    Ho un campo chiamato "numero ordine" che AMMETTE duplicati (come chiave primaria ho un ID a numerazione automatica) e un altro campo che si chiama "numero problematica".
    Ho una maschera che permette l'inserimento dei dati e vorrei che ogni volta che viene inserito un "numero ordine" per la prima volta il "numero problematica" è 1, mentre se già il "numero ordine" inserito fosse già esistente vorrei che il contatore di "numero problematica" si incrementasse.
    Quello che chiedi è facilmente realizzabile con un DMax ma non funziona se si è in multiutenza. Prima di lanciarmi in link, però, esprimo un dubbio che mi è sorto: temo che le tabelle siano strutturate male. Puoi confermare che hai seguito i principi della normalizzazione o eventualmente, se non l'hai fatto, per quale motivo?
    La maschera dovrebbe essere strutturata con maschera principale (con le caratteristiche dell'ordine) e una sottomaschera (per le diverse "problematiche" legate a quell'ordine)
    Ciao FIL.
    La questione MultiUtenza... in realtà è critica più per le PK e di conseguenza quando al posto del Counter si pensa di usare l'assegnazione di una PK a priori usando il DMAX...!
    In tal caso, in Multiutenza, l'uso di DMAX rischia di essere pericoloso... in quanto non si ha la certezza sia veramente l'ultimo...
    Tuttavia per essere più chiari, il problema non è l'attribuzione della PK in fase di INSERIMENTO, questo con un COUNTER non accade, quanto appunto il RECUPERO della PK appena inserita... che con DMAX per quello che si diceva prima... potrebbe non essere coerente.
    A questo si può sopperire, ricavando il valore reale della PK salvata nel DB in tempo REALE usando:
    
    LastID = DbEngine(0)(0).OpenRecordset("SELECT @@IDENTITY")(0)
    Questo non si può fare con un campo che non sia PK, quindi a mio avviso si usa tranquillamente il solito
    
    NZ(DMAX(...))+1
    La cosa però da osservare è il MOMENTO in cui si attribuisce il Valore che non potrà essere come DEFAULT VALUE, ma piuttosto su BEFOREUPDATE.
  • Re: Incrementare un valore in base ad un altro

    @Alex ha scritto:


    ...
    Ciao FIL.
    La questione MultiUtenza... in realtà è critica più per le PK e di conseguenza quando al posto del Counter si pensa di usare l'assegnazione di una PK a priori usando il DMAX...!
    ...
    Eh, ma non v@Ale(x)! Queste cose le dovevi dire a Gibra qui: http://forum.masterdrive.it/access-79/creare-contatore-98877/#post360339
    Io non mi avventuro nella multiutenza neanche se mi pagano... anzi mi pagano proprio per fare tutt'altro.
    Con select @@Identity ho un rapporto conflittuale, che non deve essere risolto qui, ovviamente. Ho fatto qualche passo avanti proprio recentemente ma la strada è ancora lunga. Il problema principale è che è difficile trovare materiale specifico ed esclusivamente riferito ad Access "puro", non come FE di Server SQL. Basta basta, finisco OT.
  • Re: Incrementare un valore in base ad un altro

    Philcattivocarattere ha scritto:


    @Alex ha scritto:


    ...
    Ciao FIL.
    La questione MultiUtenza... in realtà è critica più per le PK e di conseguenza quando al posto del Counter si pensa di usare l'assegnazione di una PK a priori usando il DMAX...!
    ...
    Eh, ma non v@Ale(x)! Queste cose le dovevi dire a Gibra qui: http://forum.masterdrive.it/access-79/creare-contatore-98877/#post360339
    ma Gibra le conosce meglio di me... e credo intendesse la stessa cosa, infatti in quel caso è esattamente come dice... e come dico...

    Philcattivocarattere ha scritto:


    Io non mi avventuro nella multiutenza neanche se mi pagano... anzi mi pagano proprio per fare tutt'altro.
    Con select @@Identity ho un rapporto conflittuale, che non deve essere risolto qui, ovviamente. Ho fatto qualche passo avanti proprio recentemente ma la strada è ancora lunga. Il problema principale è che è difficile trovare materiale specifico ed esclusivamente riferito ad Access "puro", non come FE di Server SQL. Basta basta, finisco OT.
    Con calma chiudi tutti i buchi...!
  • Re: Incrementare un valore in base ad un altro

    1) In realtà c'è solo 1 maschera, e non sottomaschere. In pratica NON voglio che ci siano sottomaschere, nella visualizzazione della maschera ci devono essere UN ordine ed UNA problematica, scegliendole da un menu a tendina

    2) Ad accedere a questo database saranno più utenti, anche in contemporanea.

    Detto questo mi sono un pò perso ... quale codice posso/devo usare?
  • Re: Incrementare un valore in base ad un altro

    Cosa non ti è chiaro del mio messaggio delle 17.59...?
    Per questa specifica esigenza usi Nz(Dmax(....),0)+1 su evento BeforeUpdate...
  • Re: Incrementare un valore in base ad un altro

    @Alex ha scritto:


    Cosa non ti è chiaro del mio messaggio delle 17.59...?
    Per questa specifica esigenza usi Nz(Dmax(....),0)+1 su evento BeforeUpdate...
    Perdonami

    La mia variabile si chiama "Num problematica" e la mia text box "Num_problematica"
    So come creare il codice di evento su caricamento ma non ho capito di preciso il codice xD
  • Re: Incrementare un valore in base ad un altro

    NorinRadd ha scritto:


    @Alex ha scritto:


    Cosa non ti è chiaro del mio messaggio delle 17.59...?
    Per questa specifica esigenza usi Nz(Dmax(....),0)+1 su evento BeforeUpdate...
    Perdonami

    La mia variabile si chiama "Num problematica" e la mia text box "Num_problematica"
    Bene.

    NorinRadd ha scritto:


    So come creare il codice di evento su caricamento ma non ho capito di preciso il codice xD
    Non ti serve nulla l'evento su Caricamento... ti ho spiegato che l'evento da usare è BeforeUpdate O Prima di Aggiornare.
    Il codice da scrivere lo ho già indicato, devi aprire la guida e leggere le istruzioni e personalizzarlo con i tuoi Riferimenti.
    Giusto per chiarezza, non ti verrà fornito codice pronto da Incollare, come da Regolamento.
Devi accedere o registrarti per scrivere nel forum
9 risposte