Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195

    [.NET] Collisione ID in DataSet disconnesso

    Siate buoni : ho riscritto 4 volte il post perchè non so bene come spiegarmi...

    Scenario: Un applicativo multiutente che utilizza un DataSet disconnesso. La tabella del database contiene un campo "ID" contatore.

    La domanda è: Se inserisco una nuova Row e poi salvo i dati sul database, come faccio a sapere qual'è il valore del campo "ID" del mio record sul database?

    Esempio:
    Alle 14.32.00 inserisco una nuova Row nel mio DataSet con i valori per il nuovo record. Il campo ID della Row conterrà il valore successivo all'ultimo presente (es. 4324).

    Alle 14.31.30 un altro utente aveva effettuato la stessa operazione con altri dati ed anche in quel caso il campo ID nel DataSet ha ricevuto il valore 4324.

    Lui alle 14.32.10 effettua l'update e tutto funziona, inserendo nella tabella del db il record con ID 4324.
    Quando pochi secondi dopo lo faccio io mi restituisce un errore, perchè il valore 4324 del campo ID è già presente!

    Soluzione: Boh...
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  2. #2
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    :quote:
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  3. #3
    Utente di HTML.it L'avatar di erme2
    Registrato dal
    Oct 2002
    Messaggi
    177
    puoi provare ad assegnare il max+ 1 solo nell'attimo che stai salvando ma anche in questo caso non saresti sicuro...

    prova ad aggiungere un suffisso (anche numerico) in base all'utente che sta facendo l'insert.

    dim ls_1, ls_2 as string
    dim ll_1, ll_2 as long

    ls_1 = str(4324+1) & "1" 'primo utente
    ls_2 = str(4324+1) & "2" 'secondo utente
    ll_1 = val(ls_1) ' = 43251
    ll_2 = val(ls_2) ' = 43252
    eRMéS! RM98!
    "...è mai possibile oh porco di un cane, che le avventure in codesto reame, debban risolversi tutte con grandi puttane!..." - (Carlo Martello ritorna dalla battaglia di Poitiers -Fabrizio De Andrè/Paolo Villaggio)

  4. #4
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    Leggendo così al volo non ci ho capito niente, ma in questo momento sono un pò fuso... :quipy:

    Rileggo dopo con calma.

    GRAZIE!

    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  5. #5
    Utente di HTML.it L'avatar di erme2
    Registrato dal
    Oct 2002
    Messaggi
    177
    Originariamente inviato da erme2
    puoi provare ad assegnare il max+ 1 solo nell'attimo che stai salvando ma anche in questo caso non saresti sicuro...
    OPPURE

    prova ad aggiungere un suffisso (anche numerico) in base all'utente che sta facendo l'insert.

    dim ls_1, ls_2 as string
    dim ll_1, ll_2 as long

    ls_1 = str(4324+1) & "1" 'primo utente
    ls_2 = str(4324+1) & "2" 'secondo utente
    ll_1 = val(ls_1) ' = 43251
    ll_2 = val(ls_2) ' = 43252
    in effetti non sono stato molto chiaro...
    L'idea è di aggiungere un numero alla fine (o all'inizio) del nuovo id che hai gia calcolato (col max()) e stai per immettere...
    Ma è un'idea sbagliata perchè dopo dieci immissioni il prossimo id sarà di 16 cifre...

    l'unica solouzione è calcolare l'id l'attimo prima di fare la insert, quindi dopo avere raccolto i dati (sul click di conferma)
    eRMéS! RM98!
    "...è mai possibile oh porco di un cane, che le avventure in codesto reame, debban risolversi tutte con grandi puttane!..." - (Carlo Martello ritorna dalla battaglia di Poitiers -Fabrizio De Andrè/Paolo Villaggio)

  6. #6
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    Quindi non posso utilizzare un campo di tipo "Counter" ad incremento automatico, ma devo usare un campo di tipo Long per l'ID, giusto?
    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

  7. #7
    Utente di HTML.it L'avatar di erme2
    Registrato dal
    Oct 2002
    Messaggi
    177
    Io non uso mai il contatore automatico; uso sempre un campo di tipo numerico di grandezza variabile in base alle esigenze... e il problema non mi si è mai presentato perchè sono io a gestire la numerazione e non il db...

    Normalemte sull'evento click del button nuovo azzero solo i textbox,
    invece sul "conferma" decido e scrivo la chiave* in modo che l'intervallo di tempo tra la lettura e la insert sia minimo


    * nel caso specifico max+1
    eRMéS! RM98!
    "...è mai possibile oh porco di un cane, che le avventure in codesto reame, debban risolversi tutte con grandi puttane!..." - (Carlo Martello ritorna dalla battaglia di Poitiers -Fabrizio De Andrè/Paolo Villaggio)

  8. #8
    Utente di HTML.it L'avatar di Gammino
    Registrato dal
    Nov 2001
    Messaggi
    195
    Grazie, sei stato davvero gentilissimo!

    A buon rendere...

    Ci sono giornate in cui mi sembra che il mondo giri al contrario... poi mi sveglio e mi accorgo che purtroppo gira sempre nella stessa direzione: quella sbagliata!
    (Gammino)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.