Come ripristinare ID corretto?

di Anonimizzato14109 il
14 risposte
Tempo fa convertii un DB di Access nella versione 2003 che uso attualmente, soltanto a distanza di tempo mi accorsi che il contenuto dei campi ID delle tabelle principali, e soltanto quelle, dalla data della conversione in poi non rispettava più la sequenza precedente ma aveva fatto un salto di decine di migliaia, centinaia di migliaia o addirittura milioni, da lì in poi tutto procedeva regolarmente incrementando di uno ogni nuovo record.

Questa nuova ed incomprensibile numerazione non ha avuto nessun effetto sulla procedura e tutto ha continuato a funzionare regolarmente come prima.

Mi sto chiedendo se è possibile e come ripristinare la numerazione originaria.
Tenendo ben presente che gli ID dovranno poi essere sostituiti anche nelle relative tabelle di collegamento uno-a-molti e molti-a-molti.

Grazie a chi saprà darmi indicazioni utili.

14 Risposte

  • Credo che non potrai ripristinare la stessa identica numerazione originale, ma, se ti danno fastidio quei vistosi salti, ti consiglio di leggere questo
  • Ciao Osvaldo, grazie del link, lo consulterò attentamente poi ti dirò.
  • OsvaldoLaviosa ha scritto:


    Credo che non potrai ripristinare la stessa identica numerazione originale, ma, se ti danno fastidio quei vistosi salti, ti consiglio di leggere questo
    Letto e riletto, dettagliato, preciso e sicuramente utile, ma per il momento il tuo "se" ha avuto il sopravvento.
  • In quelle note si parla di tabelle singole o di tabelle madre e figlia/e, partendo sempre dal presupposto che sia da sostituire l'ID della tabella madre e conseguentemente lo stesso ID presente nelle tabelle figlie.

    Come ci si deve comportare nel caso in cui l'ID da sostituire sia soltanto quello di una tabella figlia, si adotta la procedura 1?
  • Forse ti riferisci a una tabella che rappresenta l'ultimo ramo di una serie di relazioni. Tale tabella avrà un campo ID chiave primaria non legato ad altra tabella. Sì, vale la procedura 1.
  • Mi sembra proprio lo stesso problema... ma veramente molto molto simile...
  • In realtà è possibile, anche "reimpacchettare" (cioè senza buchi) i numeratori.
    Con Access non ti so dire, "senza" sicuramente sì.
    Ma la domanda (il "se") sorge spontanea.
    Posto che usare campi autoincrementanti in questo modo non è esattamente lungimirante, soprattutto nel caso della necessità di effettuare manutenzione, cosa ti turba, esattamente?
    Il mero aspetto "estetico" ?
  • +m2+ ha scritto:


    In realtà è possibile, anche "reimpacchettare" (cioè senza buchi) i numeratori.
    Con Access non ti so dire, "senza" sicuramente sì.
    Ma la domanda (il "se") sorge spontanea.
    Posto che usare campi autoincrementanti in questo modo non è esattamente lungimirante, soprattutto nel caso della necessità di effettuare manutenzione, cosa ti turba, esattamente?
    Il mero aspetto "estetico" ?
    Con Access gli AutoIncrementali si AUTORESETTANO se si Compatta il DB con Tabella VUOTA, quindi basta clonarla, vuotarla e di conseguenza fare un INSERT... ovviamente questo se la Tabella non ha Relazioni, altrimenti diventa un pochetto più complesso ma ovviamente fattibilissimo.
    La non conoscenza del FieldType, e forse di altro, sicuramente fa nascere la preoccupazione...
    In questi casi effettivamente si evidenzia ancora maggiormente il limite dell'autoincrementale... ma per DB casalinghi ha una comodità notevole.
  • @Alex ha scritto:


    Con Access gli AutoIncrementali si AUTORESETTANO se si Compatta il DB con Tabella VUOTA, quindi basta clonarla, vuotarla e di conseguenza fare un INSERT... ovviamente questo se la Tabella non ha Relazioni, altrimenti diventa un pochetto più complesso ma ovviamente fattibilissimo.
    La non conoscenza del FieldType, e forse di altro, sicuramente fa nascere la preoccupazione...
    In questi casi effettivamente si evidenzia ancora maggiormente il limite dell'autoincrementale... ma per DB casalinghi ha una comodità notevole.
    Intendevo ovviamente rinumerare la/le chiavi primarie con relazioni.
    Non so dire per Access; per SQLserver talvolta è difficile, quando non impossibile (in presenza di vincoli, soprattutto di quelli autogenerati dai vari case).
    Per un db "casalingo"... lascerei stare.
    Prima legge dell'informatica: finchè funziona, lascialo stare.
    Seconda legge: il meglio è nemico del bene
  • MTAccess ha scritto:


    Come ci si deve comportare nel caso in cui l'ID da sostituire sia soltanto quello di una tabella figlia, si adotta la procedura 1?

    OsvaldoLaviosa ha scritto:


    Forse ti riferisci a una tabella che rappresenta l'ultimo ramo di una serie di relazioni. Tale tabella avrà un campo ID chiave primaria non legato ad altra tabella. Sì, vale la procedura 1.
    Non necessariamente, può essere semplicemente una tabella figlia legata ad una tabella madre da un legame uno a molti, nella quale si pensa di ripristinare la numerazione sequenziale originaria.

    Grazie di nuovo per il tuo chiarimento.
  • @Alex ha scritto:


    Mi sembra proprio lo stesso problema... ma veramente molto molto simile...
    Verissimo, evidentemente non è successo soltanto a me.

    Interessante questo link http://allenbrowne.com/ser-40.htm riportato nella discussione.
  • +m2+ ha scritto:


    In realtà è possibile, anche "reimpacchettare" (cioè senza buchi) i numeratori.
    Con Access non ti so dire, "senza" sicuramente sì.
    Ma la domanda (il "se") sorge spontanea.
    Posto che usare campi autoincrementanti in questo modo non è esattamente lungimirante, soprattutto nel caso della necessità di effettuare manutenzione, cosa ti turba, esattamente?
    Il mero aspetto "estetico" ?
    Bella domanda!
    Da quello che ho letto, so che il DB può continuare a lavorare senza dare nessun problema, così come lo sta già facendo da anni.
    Purtroppo, conoscendomi, so che prima o poi farò anche questa manutenzione
  • @Alex ha scritto:


    In questi casi effettivamente si evidenzia ancora maggiormente il limite dell'autoincrementale... ma per DB casalinghi ha una comodità notevole.
    Questa non l'ho capita, vuoi provare a spiegarmela?
  • +m2+ ha scritto:


    Per un db "casalingo"... lascerei stare.
    Prima legge dell'informatica: finchè funziona, lascialo stare.
    Seconda legge: il meglio è nemico del bene
    M2, vedo che anche la saggezza ha il suo peso in un forum
Devi accedere o registrarti per scrivere nel forum
14 risposte