Aggiornare indice in tabella Access

di il
29 risposte

29 Risposte - Pagina 2

  • Re: Aggiornare indice in tabella Access

    15/03/2024 - SempreFresco ha scritto:


    13/03/2024 - max.riservo ha scritto:


    ALTER TABLE [TableThatIncrements] ALTER COLUMN [Id] COUNTER (NewSeed,1)

    Nel caso non funzionasse la query precedente prova con questa …

    P.S. - Prima di fare danni fai il backup!

    Avevo già provato con ALTER TABLE e non funziona per le tabelle relazionate, come specificato da Microsoft, occorrerebbe prima eliminare tutte le relazioni.

    Ho fatto una verifica ed effettivamente il predicato SQL funziona SOLO in caso di tabella NON relazionata … per me, un'ulteriore conferma che una chiave di tipo Autoincrement DEVE essere gestita dal RDBMS (e che mi devo assolutamente disinteressare del suo valore e dei buchi che ci possono essere) … ovviamente per me.

  • Re: Aggiornare indice in tabella Access

    15/03/2024 - max.riservo ha scritto:


    15/03/2024 - SempreFresco ha scritto:


    13/03/2024 - max.riservo ha scritto:


    ALTER TABLE [TableThatIncrements] ALTER COLUMN [Id] COUNTER (NewSeed,1)

    Nel caso non funzionasse la query precedente prova con questa …

    P.S. - Prima di fare danni fai il backup!

    Avevo già provato con ALTER TABLE e non funziona per le tabelle relazionate, come specificato da Microsoft, occorrerebbe prima eliminare tutte le relazioni.

    Bene che hai risolto e che hai informato il forum, meno bene che tu non abbia segnalato prima che avevi già provato l'Alter table e che non funziona nel tuo caso (magari la prossima volta che scriverai in un forum ‘tecnico’ fornirai maggiori dettagli). Saluti

    Non solo avevo già provato ALTER TABLE; avevo anche provato DROP INDEX, CREATE INDEX, UPDATE, ecc. ecc. con risultati diversi ma non quello desiderato. 

    13/03/2024 - SempreFresco ha scritto:


    Ho una tabella relazionata, con il campo “ID” impos

    Nel primo post ho spiegato chiaramente il tipo di tabella coinvolta, ovvero che era di tipo “relazionata”, evitando di elencare tutte le prove eseguite. Ho anche fornito tutti gli indici della tabella e il codice completo. Pensavo fosse abbastanza dettagliato per un forum “tecnico”… . Se così non lo è stato ne prendo atto.

    Inoltre penso che sia del tutto normale condividere come ho risolto il problema. Anche se ci sono opinioni diverse e contrastanti, penso che sia bello confrontarsi e condividere le esperienze.

    Saluti.

  • Re: Aggiornare indice in tabella Access

    Hai risolto per quello che serve a te, quindi tutto a posto.

    Ti segnalo che, nelle applicazioni dove viene registrato chi fa che cosa (ovvero chi modifica il record e quando) la tua soluzione non sarebbe comunque accettabile (di fatto tu riscrivi l'ultimo record su se stesso e questa scrittura cambia sicuramente il momento di modifica del record e quasi sicuramente anche chi lo modifica rispetto al prima della riscrittura) ma probabilmente tu non hai questo problema/esigenza.

    Saluti. 

  • Re: Aggiornare indice in tabella Access

    16/03/2024 - max.riservo ha scritto:


    Hai risolto per quello che serve a te, quindi tutto a posto.

    Ti segnalo che, nelle applicazioni dove viene registrato chi fa che cosa (ovvero chi modifica il record e quando) la tua soluzione non sarebbe comunque accettabile (di fatto tu riscrivi l'ultimo record su se stesso e questa scrittura cambia sicuramente il momento di modifica del record e quasi sicuramente anche chi lo modifica rispetto al prima della riscrittura) ma probabilmente tu non hai questo problema/esigenza.

    Saluti. 

    Premetto che io mi occupo di altro e non sono affatto un programmatore, sicuramente si era capito.

    Avendo il DB spacchettato su FE e BE, gestisco chi fa cosa e quando lo modifica, attraverso i Forms, del tipo:

    Private Sub Form_BeforeInsert(Cancel As Integer)
    Me!Utentecreazione = Forms![Menù principale].txtLogin
    Me!Datacreazione = Now
    End Sub
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me!Utentemodifica = Forms![Menù principale].txtLogin
    Me!Datamodifica = Now
    End Sub

    Sicuramente ci saranno altre soluzioni migliori delle mia per gestire quanto sopra,  ma nel mio caso questa è sufficiente.

    Quindi andando a riscrivere il record questi dati nella tabella restano inalterati come gli altri.

    Certo, sarebbe invece da implementare la funzione di “InserimentoID”, passandogli eventualmente i dati di chi fa cosa e altro ancora, ma non è attinente al post che ho aperto, in quanto il richiedevo un metodo per reimpostare l'indice.

    Saluti.

  • Re: Aggiornare indice in tabella Access

    18/03/2024 - SempreFresco ha scritto:


    Sicuramente ci saranno altre soluzioni migliori delle mia per gestire quanto sopra,  ma nel mio caso questa è sufficiente.

    Nell'ecosistema Access generalmente si utilizza il tuo approccio (e quindi difficilmente potresti avere il problema da me segnalato). Nelle ultime versioni di Access (dalla 2010 o dalla 2013) dovrebbero aver implementato i trigger (credo tramite macro), ma penso gli utilizzatori tendano a zero.

    Quando utilizzi RDBMS più strutturati normalmente deleghi il tutto ai trigger (gestiti direttamente dal motore del RDBMS) : in questi contesti l'approccio ‘Access-style’ non è più applicabile …

    Saluti

  • Re: Aggiornare indice in tabella Access

    18/03/2024 - SempreFresco ha scritto:


    Premetto che io mi occupo di altro e non sono affatto un programmatore, sicuramente si era capito.

    Avendo il DB spacchettato su FE e BE, gestisco chi fa cosa e quando lo modifica, attraverso i Forms, del tipo:

    Ciao, 
    purtroppo l'approccio è errato o non è consono.
    Le Pk delle tabelle dei database relazionali è bene non toccarle mai per ovvi motivi già elencati nei post precedenti.

    Se hai bisogno di interagire con un progressivo per un certo tipo di manipolazione, è bene crearsi una colonna, nella/e tabella/e, che potrai gestire per scopi e fini diversi da quello che le PK rappresentano in un db relazionale.

    Pertanto dovrai sempre mantenere ben strutturato il database e gestire con info separate le eventuali casistiche di gestione dei records.

    Uscire dallo standard non è consigliabile, alle volte sembra la strada migliore da percorrere solo per il fatto di risparmiare tempo e operatività, ma alla fine non ripaga perchè rende meno stabile il database e più dificoltose le sue implementazioni future.

    Ovviamente solo un consiglio e niente di più… perchè agire sulle PK non è mai cosa buona e giusta tranne nei casi di inizializzazione e installazione dei prodotti e poche altre occasioni di riorganizzazione del database prima della distribuzione.

    Personalmente opterei per una nuova colonna dove gestire la tua casistica di operatività.

  • Re: Aggiornare indice in tabella Access

    18/03/2024 - By65Franco ha scritto:


    18/03/2024 - SempreFresco ha scritto:


    Premetto che io mi occupo di altro e non sono affatto un programmatore, sicuramente si era capito.

    Avendo il DB spacchettato su FE e BE, gestisco chi fa cosa e quando lo modifica, attraverso i Forms, del tipo:

    Ciao, 
    purtroppo l'approccio è errato o non è consono.
    Le Pk delle tabelle dei database relazionali è bene non toccarle mai per ovvi motivi già elencati nei post precedenti.

    Se hai bisogno di interagire con un progressivo per un certo tipo di manipolazione, è bene crearsi una colonna, nella/e tabella/e, che potrai gestire per scopi e fini diversi da quello che le PK rappresentano in un db relazionale.

    Pertanto dovrai sempre mantenere ben strutturato il database e gestire con info separate le eventuali casistiche di gestione dei records.

    Uscire dallo standard non è consigliabile, alle volte sembra la strada migliore da percorrere solo per il fatto di risparmiare tempo e operatività, ma alla fine non ripaga perchè rende meno stabile il database e più dificoltose le sue implementazioni future.

    Ovviamente solo un consiglio e niente di più… perchè agire sulle PK non è mai cosa buona e giusta tranne nei casi di inizializzazione e installazione dei prodotti e poche altre occasioni di riorganizzazione del database prima della distribuzione.

    Personalmente opterei per una nuova colonna dove gestire la tua casistica di operatività.

    Ciao,

    Credo che il focus della questione sia un altro. Nei post precedenti ho abbastanza evidenziato il fatto che richiedevo un metodo per il reimpostare il contatore autonumber.

    Indipendentemente da come questo si sposti, o con l'utilizzo che ne farei io, ovvero inserisco un ID (PrimaryKey), o altro motivo come evidenziato in questo articolo, https://learn.microsoft.com/it-IT/office/troubleshoot/access/error-inserting-table-record-autonumber#resolution, se vi era la possibilità di reimpostarlo. L'articolo sopra menzionato suggerisce 3 metodi, che immagino funzionino per rispristinare l'incremento autonumber senza che questi alterino l'integrità referenziale della tabella, se poi così non fosse lo imparo con voi.

    Sempre nell'articolo sopra purtroppo, non specifica il fatto che per le tabelle “relazionate” il metodo 2 e 3 non funziona (non ho provato il primo metodo), in quanto occorrerebbe togliere le relazioni dalla tabella. Vedi https://learn.microsoft.com/it-it/office/troubleshoot/access/reset-autonumber-value  

    La soluzione che ho intrapreso io, invece, funziona sia per le tabelle relazionate e sia per quelle non relazionate.

    La domanda a cui magari occorrerebbe dare risposta, e su questo che punterei il focus, è se il reimpostare  l'incremento autonumber su una tabella, con qualunque metodo esso sia, ovvero sia quelli suggeriti negli articoli della Microsoft e sia quello proposto da me, possa alterarne la sua integrità, ovviamente a seguito di prove eseguite, ripetibili, e non per consuetudine o per sentito dire. 

    Per ciò che mi riguarda, dai test eseguiti fin ora, tutte le relazioni sono a cui sottopongo sia la scrittura e sia la riscrittura dei records, mantengono la loro referenzialità con le altre tabelle collegate. 

    p.s. 

    18/03/2024 - By65Franco ha scritto:


    è bene non toccarle mai per ovvi motivi già elencati nei post precedenti.

    Forse me li sono persi gli ovvii motivi.

    Saluti.

  • Re: Aggiornare indice in tabella Access

    A mio avviso non sei una persona che accetta consigli anche se chi te lo offre ha maturato esperienza nel campo e per alcuni utenti anche molto consolidata. Credo che la discussione non offra più margini di sviluppo.

  • Re: Aggiornare indice in tabella Access

    A questo punto sarebbe il caso di inserire sempre manualmente (da codice) l'id.

    Gli ovvi motivi?

    Pippo inserisce un id vuoto (4) l'ultimo id è 20.

    Pluto inserisce immediatamente dopo un record (non vuole recuperare il vuoto o non ci sono vuoti) e inserisce il 5.

    Nel frattempo piopo ripristina l'ultimo id a 20, pluto cerca di risolvere la violazione di chiave, mentre clarabella sta inserendo un record e blocca il 21 e così via…

    Essendo l'id solo un codice necessario per non creare duplicati e/o creare relazioni, non ha molto senso recuperare un id.

    Quanto alla spocchia “un sito tecnico bla bla”, i tecnici ti hanno spiegato che per esperienza non serve andare a toccare un id, e, sempre tra tecnici, un ingegnere non si pone il problema di come far prendere il gesso in fondo al mare perché non avrebbe senso un pilone in gesso.

    Si esistono 1000 modi per fare qualcosa ma spesso sono 900 sbagliati. Il recupero dell'id trova la sua applicazione quando devi forzare per recuperare relazioni corrotte (ove possibile).

    Ciò non toglie che puoi tranquillamente, come diciamo in sicilia, "ammuttari u fumu cu vastuni" (spingere il fumo con il bastone).

    Io al tuo posto farei tesoro dei consigli perché vengono da “iprogrammatori.it” non da “glismanettoni.it”.

  • Re: Aggiornare indice in tabella Access

    18/03/2024 - SempreFresco ha scritto:


    Credo che il focus della questione sia un altro. Nei post precedenti ho abbastanza evidenziato il fatto che richiedevo un metodo per il reimpostare il contatore autonumber.

    Ciao,

    il focus è proprio quello che ti ho scritto sopra… e l'alternativa corretta, come detto in precedenza, è gestire una colonna nelle tabelle dove manipolare un proprio contatore e non toccare le PK o FK (per gli ovvi motivi)

    Come acennato in precedenza e come suggerito anche dagli altri negli ultimi post, manipolare le Primary Key è un esercizio che si può fare, ma solo in casi di manutenzione del database che per qualche motivo si è corrotto o è da riorganizzare in particolari condizioni.

    Nello sviluppo dell'applicazione non è consigliato manipolare tali chiavi che devono solo garantire l'affidabilità del database e delle relazioni.

    Se si arriva a dover gestire queste chiavi, allora vuol dire che l'analisi del progetto non è corretta, oppure lo sviluppo del progetto, sulla base dell'analisi, non risulta corretto.

    Comunque a riguardo del “focus” ti ho risposto dandoti un consiglio che rispecchia i principi “ovvi” di creazione e manutenzione di un database.

    Ora sta a te accettare o meno i consigli e procedere per la strada che ritieni più opportuna.

    N.B. In qualsiasi possibile scenario non è mai previsto la realizzazione di applicazioni che prevedono la manipolazione delle PK. Come già accennato, questa pratica non è mai cosa buona e giusta ;))

     Buon lavoro, alla prox…

  • Re: Aggiornare indice in tabella Access

    18/03/2024 - sihsandrea ha scritto:


    Pippo inserisce un id vuoto (4) l'ultimo id è 20.

    Pluto inserisce immediatamente dopo un record (non vuole recuperare il vuoto o non ci sono vuoti) e inserisce il 5.

    Nel frattempo piopo ripristina l'ultimo id a 20, pluto cerca di risolvere la violazione di chiave, mentre clarabella sta inserendo un record e blocca il 21 e così via…

    e già… ;))
    (semplicemente un ottimo esempio)

    un Saluto

    ciao

  • Re: Aggiornare indice in tabella Access

    Quello che stai facendo e che vorresti fare non ha alcun senso e nessuna utilità, anzi….

    E mi fermo solo a questo commento. 

  • Re: Aggiornare indice in tabella Access

    18/03/2024 - sihsandrea ha scritto:


    Si esistono 1000 modi per fare qualcosa ma spesso sono 900 sbagliati. Il recupero dell'id trova la sua applicazione quando devi forzare per recuperare relazioni corrotte (ove possibile).

    Perfetto!!! 

    Hai finalmente colto lo scopo del mio recuperare ID, che è sporadico, “controllato”, e serve non tanto a recuperare relazioni interne al DB, ma esterne con file e cartelle come già accennato nei primi post. Che esistano altri modi per gestire le relazioni esterne è chiaro, chiarissimo, ancor prima che iniziassi questa discussione, ma purtroppo il DB ha una struttura e dati di circa 15 anni, ed alcune funzioni sono state implementate assegnando l'ID a file e cartelle. Certo sarebbe bello ristrutturare il DB, ma questa è un'altra storia.

    Ma ribadisco per l'ennesima volta, la discussione era aperta sul reimpostare l'ID (autonumber) dopo che questi si era spostato. Adesso se questo non è possibile, accetto la discussione, ma nessuno finora mi ha detto che non sia possibile o evitarlo se non perché è una pratica non corretta. Anche nei messaggi che ho postato della Microsoft, non sconsigliano affatto di farlo o lo vietano, anzi danno dei suggerimenti su come eseguirlo.

    La mia esperienza con questa discussione sarebbe simile come aprire una discussione su un altro forum, magari di medicina, con il seguente quesito:

    “Dottore, ho sbattuto la testa e ho mal di testa. Andando in bici sono caduto.”

    Ed  il dottore vi risponderebbe:

    “Quando si va in bici occorre mettere il casco, andare a velocità moderata, rispettare le distanze, ecc. ecc. ecc.” senza che il dottore vi dia una risposta per dare sollievo al vostro dolore. Di questo tono sono state la maggior parte delle risposte, ad eccezione di alcuni utenti.

    Credo che ci siamo chiariti abbastanza, io la termino qui. Ho trovato la mia soluzione, l'ho condivisa, sarò pure uno smanettone, ma era quello che serviva a me. 

    Per i moderatori, se la discussione con la soluzione per reimpostare l'autonumber non sia degna di  “iprogrammatori.it”, cancellatela pure.

    Saluti.

    p.s.

    18/03/2024 - Antony73 ha scritto:


    A mio avviso non sei una persona che accetta consigli anche se chi te lo offre ha maturato esperienza nel campo e per alcuni utenti anche molto consolidata. Credo che la discussione non offra più margini di sviluppo.

    I tuoi avvisi te li puoi risparmiare, né tu né altri possono giudicarmi sul tipo di persona che sono.  Il tuo moralismo lo fai su persone che magari conosci bene…  

  • Re: Aggiornare indice in tabella Access

    19/03/2024 - SempreFresco ha scritto:


    “Dottore, ho sbattuto la testa e ho mal di testa. Andando in bici sono caduto.”

    Ed  il dottore vi risponderebbe:

    “Quando si va in bici occorre mettere il casco, andare a velocità moderata, rispettare le distanze, ecc. ecc. ecc.” senza che il dottore vi dia una risposta per dare sollievo al vostro dolore. Di questo tono sono state la maggior parte delle risposte, ad eccezione di alcuni utenti.

    In effetti un dottore risponde così…

    Se hai il “polistirolo” alto (battuta per farti capire che non sei in un sito di nemici), il dottore ti dice di limitare o evitare i grassi saturi (e anche la prevenzione è una cura), poi ti prescrive le medicine.

    Il tuo quesito non è “ragà ho gli indici corrotti come faccio?” Ma “voglio recuperare un di vuoto a seguito di eliminazione record” almeno questo è quanto si è capito e la cura è: fregatene tanto è un id, dando per ovbio che sai che l'id non è un dato utente ma un dato da programmazione. Certo 30 anni fa' veniva usato per ricordare un fornitore o un cliente ma anche la società telefonica non ricorda mai il tuo id ma la tua utenza.

    Per trovare mario rossi non vado a tentoni scrivendo “1256” "23567" ecc.. ma %mar%ssi% ed ho l'elenco sei nominativi che contengono mar e ssi.

    Per la senescenza del programma, se riesci, aggiornalo, come avvenuto per la fiat 1.100 che monta le cinture di sicurezza anche se la macchina ha più di 50 anni (meno del programma di 15 anni). Anche il s.o. non è più il dos.

  • Re: Aggiornare indice in tabella Access

    E si , bisogna essere chiari nell'esporre un quesito. 

    A mio avviso l'unica cura che può darti il dottore è quello di vietarti di andare in Bicicletta. ;)) se non si sa pedalare è inutile insistere a farsi del male e dover ricorrere in continuazione al dottore … ahahahahaha

    Ma a parte le battute, personalmente trovo tutte le risposte corrrette e con una logica, magari con o senza soluzioni a fronte comunque di una logica.

    Tutti hanno interpretato l'argomento per le info che sono state passate e tutti hanno indicato una strada da percorrere. 

    Alla fine sono tutti consigli/metodi da seguire oppure no, sta a te scegliere cosa fare.

    (non vedo nessun motivo di polemizzare nei confronti di chi ha dedicato gratuitamente il proprio tempo per risponderti. Poi sai, ognuno esercita la propria libertà come meglio crede e gli altri liberamente ne traggono le conclusioni… mi sembra del tutto normale)  

Devi accedere o registrarti per scrivere nel forum
29 risposte