Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19

Discussione: INSERIRE RIGA VUOTA IN MEZZO AD ALTRE RIGHE modificando indice

  1. #11
    Moderatore di XHTML e HTML L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    18,649
    ipotesi di lavoro: visto che la numerazione delle ricevute è arbitraria, puoi usare un codice diverso?
    tipo:
    1A
    2A
    3A
    3B <--- RICEVUTA DIMENTICATA
    4A

    non ho capito il problema che si genera "quando vengono inseriti due incassi": se salta la numerazione in questo contesto sembra ci sia un errore di logica nel programma che genera (o ottiene) la numerazione.
    Ultima modifica di Vincent.Zeno; 02-11-2018 a 12:21

  2. #12
    una volta che ha aggiunto un nuovo campo per la numerazione può davvero fare come vuole

  3. #13
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,278
    Quote Originariamente inviata da victor8872 Visualizza il messaggio
    ....... Il problema si pone quando proprio ci si dimentica di inserire una ricevuta. E te ne accorgi dopo tanti giorni.

    Allora succede che tutte le numerazioni sono corrette, pero' di fatto manca una ricevuta. .......
    Non bisognerebbe mai usare un Id autoincrementale per gli ordinamenti proprio perche non lo puoi più (in teoria) modificare

    Potresti ordinarle semplicemente per data, ma la cosa è troppo elementare, sicuramente ci hai gia pensato prima di me .......

    Se proprio proprio devi fare quello che chiedi (ma è una bruttissima cosa) allora allora con una routine
    - ti fissi un numero di Id (immaginiamo 1527) da aggiungere
    - ti generi un nuovo record farlocco (immaginiamo Id 1642)
    - ti copi a ritroso dal 1642 al 1527 tutti i record scalandoli con un numero superiore
    - hai ottenuto il record 1527 libero per scriverci quello che vuoi

    Attento perche se la tua tabella contiene in altre tabelle dei record dipendenti si complica ulteriormente ........

    .

  4. #14
    Quote Originariamente inviata da nman Visualizza il messaggio
    Non bisognerebbe mai usare un Id autoincrementale per gli ordinamenti proprio perche non lo puoi più (in teoria) modificare.
    parole sante

  5. #15
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,558
    confermo quanto detto dall'oPtimo optime
    io userei 2 nuovi campi: mi farei una funzione che quando devo inserirne uno in mezzo somma 1 ai successivi.
    Il secondo campo aggiuntivo lo userei per le ricevute che non devono cambiare numero, ad esempio pagate appunto con il bancomat e che quindi hanno data e orario precise, anche se non so se nel tuo caso sia necessario.
    Avevo fatto una cosa simile per un maneggio e gli era andato bene
    In più c'era una lista con tutti i pagamenti con i numeri di ricevuta e dove non era corretta la numerazione lo segnava in rosso e grande e si poteva correggere al volo

    edit: scusate non avevo letto la seconda pagina della discussione
    Ultima modifica di telegio; 06-11-2018 a 11:19

  6. #16
    La via piu' semplice penso sia creare una nuova tabella in cui riscrivere tutte tutte le righe della vecchia tabella piu' quelle nuove.

  7. #17
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,558
    Quote Originariamente inviata da S&rgio Visualizza il messaggio
    La via piu' semplice penso sia creare una nuova tabella in cui riscrivere tutte tutte le righe della vecchia tabella piu' quelle nuove.
    più semplice in che senso?!?

  8. #18
    Quote Originariamente inviata da S&rgio Visualizza il messaggio
    La via piu' semplice penso sia creare una nuova tabella in cui riscrivere tutte tutte le righe della vecchia tabella piu' quelle nuove.
    metodo UCAS

  9. #19
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,380
    Quote Originariamente inviata da victor8872 Visualizza il messaggio
    ...
    Fino ad oggi sono riuscito a risolvere il problema che si verifica quando salta il numero corretto delle ricevuta.
    E ti assicuro che succede quando vengono inseriti contemporaneamente 2 incassi (anche usando un bel database come mssql)
    ...
    Questo perché evidentemente non gestisci gli accessi concorrenti, cosa che devi fare tu programmatore, il db per fatti suoi non lo fa.
    Quando fai un inserimento devi eseguire una lock sulla tabella, eseguire tutte le operazioni all'interno di una transazione, terminare la transazione e liberare la tabella.
    In questo modo stai sicuro che viene inserita una ricevuta alla volta e non due insieme, chi arriva secondo, anche per un microsecondo, aspetta che il primo abbia finito le operazioni sul db.

    A questo però aggiungerei una nuova colonna contenente il numero della ricevuta e sarai tu ad inserirlo giusto leggendo il valore più alto esistente ed incrementandolo di 1, chiaramente sempre tutto all'interno di una transazione.
    NON affidarti ad un campo auto_increment per queste cose.
    Initiative Q: un possibile futuro sistema di pagamenti online. Chi aderisce in questa fase ottine crediti bonus. Mancano 8 giorni e 4 inviti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.