Visualizzazione dei risultati da 1 a 10 su 23

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    AGGIORNAMENTO IMPORTANTE:

    Scusate se aggiungo a rate ma sto continuando a fare test!
    Ho capito cosa succede (ma non so come evitare che succeda).

    Come saprete il metodo UPDATE di una datatable lancia in automatico un acceptChanges() il che è anche utile direi.
    Io pensavo che l'acceptChanges() però riguardasse solo la tabella in oggetto di UPDATE mentre così non è...

    In sostanza nel momento in cui lancio il primo UPDATE l'acceptChange() silente rende anche tutte le altre righe delle altre tabelle marcate come "unchanged" e quindi non sottoposte al successivo UPDATE...

    Come si può ovviare a questo problema? Qualcuno ci si è mai scontrato?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,482
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Come saprete il metodo UPDATE di una datatable lancia in automatico un acceptChanges() il che è anche utile direi.
    Io pensavo che l'acceptChanges() però riguardasse solo la tabella in oggetto di UPDATE mentre così non è...
    [...]
    Come si può ovviare a questo problema? Qualcuno ci si è mai scontrato?
    Direi che rientra perfettamente nel funzionamento del meccanismo. Il DataSet è progettato per contenere più tabelle replicando all'occorrenza i legami (foreign keys) presenti tra le stesse, scaricando una copia dei dati e disconnettendosi completamente dal database.

    A questo punto, questa copia di dati può essere modificata in tutti i modi, aggiungendo/modificando/eliminando righe da tutte le tabelle, in pratica modificando la fotografia scaricata in precedenza dal database.

    L'uso dell'Adapter e del metodo Update() consentono di aggiornare il database con tutte le modifiche apportate all'insieme dei dati che sono contenuti nel DataSet, in modo da portarle su DB e considerarle "accettate" nella copia locale in memoria rappresentata dal DataSet.

    Utilizzando lo stesso DataSet, o applicando un Fill() a un nuovo DataSet, teoricamente è possibile ripartire da capo con il ciclo.

    Questo è almeno quello che conosco del modello "briefcase" e di come è implementato in .NET, così come è presente in altri linguaggi (es. Delphi) con componenti similari (ClientDataSet, MemTable, ecc.).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Quote Originariamente inviata da alka Visualizza il messaggio
    L'uso dell'Adapter e del metodo Update() consentono di aggiornare il database con tutte le modifiche apportate all'insieme dei dati che sono contenuti nel DataSet, in modo da portarle su DB e considerarle "accettate" nella copia locale in memoria rappresentata dal DataSet.
    Si ma applicando l'update in realtà non mi porta tutte le modifiche su database...

    Se io ho 10 tabelle e ne modifico 2 lancio l'UPDATE solo per i tableAdapter di quelle tabelle giusto? Se no ogni mi risposta tutto e in caso di mole di dati cospiqua ruba tempo.

    Il problema è che qui devo fare UPDATE di 2 tabelle ma della seconda non me la fa perchè quando lancio il primo Update lui segna tutto il dataset come acceptChanges() e di conseguenza non trova più nulla da spostare!

    Non so se mi sto spiegando bene...

    In sostanza mi starebbe anche bene che mi sposti tutto il dataset ogni volta (anche se in realtà preferirei di no) però se lo facesse...invece qui non sposta ma marca comunque come accettato...

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,482
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Se io ho 10 tabelle e ne modifico 2 lancio l'UPDATE solo per i tableAdapter di quelle tabelle giusto? Se no ogni mi risposta tutto e in caso di mole di dati cospiqua ruba tempo.
    Se tu modifichi i dati di due tabelle, nell'oggetto DataSet vengono memorizzate le due operazioni eseguite, e se lanci un Update, il DataAdapter lancerà i comandi SQL per riflettere queste modifiche sul database.

    Per quanto concerne le tabelle e i record che non sono stati modificati, il DataAdapter non fa nulla.

    Secondo me, l'idea migliore sarebbe quella di creare un POC (Proof of Concept), cioè un prototipo di progetto che effettua solo le operazioni problematiche, senza coinvolgere nient'altro, e partendo da questo ragionare su quello che ci si aspetta di ottenere e quello che invece viene fatto di diverso.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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