Visualizzazione dei risultati da 1 a 10 su 23

Hybrid View

  1. #1
    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
    Nel dataset gli id li vedo e son correlati bene (il mio codice inserisce l'id corretto della riga padre in quella figlio ma è corretto per il dataset mentre differisce da quello del DB)
    E' proprio questo che mi preoccupa: non vorrei che l'update tentasse di usare l'ID che hai inserito nel record della tabella figlio, al posto di quello che dovrebbe realmente usare e che scopre solo e soltanto nel momento in cui viene inserito il record padre su DB.

    In breve, tu inserisci ID=1 per il record padre e lo correli con lo stesso valore sul record figlio... magari su DB il record padre finisce con l'avere ID=5, ma il record figlio continua a essere inserito facendo riferimento all'ID=1 per il padre, mentre dovrebbe usare il 5.

    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Non credo che lo scenario del tuo ultimo link sia simile al mio...
    Strano, mi sembrava un contesto master/detail come il tuo.
    Nell'esempio, gli ID non vengono inseriti, ma si usa come valore il -1.

    Un altro possibile errore potrebbe annidarsi nella configurazione della relazione.

    In breve, mi pare strano che il DataSet globalmente utilizzato abbia questi problemi insormontabili, ma forse il tuo scenario supera la complessità di base del sistema e sarebbe meglio implementato usando degli oggetti e un framework ORM alternativo, tipo Entity Framework o affini, che ti consentirebbe di lavorare (ed eseguire il "binding") direttamente su oggetto, prescindendo dalla rappresentazione su DB, e appoggiarti alle funzionalità offerte dal framework specifico per eseguire la persistenza su database, con la gestione automatica di autoincrementali e altri punti legati specificatamente allo storage nel suddetto database, tenendo questa parte slegata dalla logica applicativa vera e propria.

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

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

  2. #2
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Intanto grazie ancora per la tua infinita pazienza!

    Quote Originariamente inviata da alka Visualizza il messaggio
    E' proprio questo che mi preoccupa: non vorrei che l'update tentasse di usare l'ID che hai inserito nel record della tabella figlio, al posto di quello che dovrebbe realmente usare e che scopre solo e soltanto nel momento in cui viene inserito il record padre su DB.

    In breve, tu inserisci ID=1 per il record padre e lo correli con lo stesso valore sul record figlio... magari su DB il record padre finisce con l'avere ID=5, ma il record figlio continua a essere inserito facendo riferimento all'ID=1 per il padre, mentre dovrebbe usare il 5.
    No il mio problema era (uso il passato perchè oggi lo ho risolto finalmente ed ora ti dico come) che il primo update marcava come unchanged tutte le righe delle altre tabelle senza però prima spostarle sul databse. In sostanza eseguiva un acceptChanges() globale dopo l'effettivo trasferimento su DB dei dati della tab padre escludendo quindi dall'update tutto il resto!

    Ecco questo l'ho risolto oggi con:
    codice:
     miaTabAdapter.Adapter.AcceptChangesDuringUpdate = False
    Ed ora si che mi trovo nella situazione che hai descritto tu in questo quote!

    Ho letto 2 volte il tuo link ma sincermante non ho capito granchè
    Anche perchè con l'inglese ho qualche limite

    Ora però riprovo a mente più riposata e ti dico! Se nel frattempo trovi qualche cosa in italiano fammi un fischio!

  3. #3
    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
    Intanto grazie ancora per la tua infinita pazienza!
    Io direi complimenti a te per la tenacia.

    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Non mi pare faccia nulla di diverso da quello che faccio io nell'elenco che ti ho scritto nel messaggio di ieri.
    Anche io uso valori negativi in decremento nel dataset e valori positivi in incremento nel database....
    L'importante è questo. A volte potrebbe bastare un dettaglio errato o impercettibile con problemi devastanti.

    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Non posso ottenere un rollback sulla tab padre dove i dati verrebbero comunque salvati anche se ho problemi col salvataggio della tab figlio. Normalmente risolverei con una transazione ed un rollback ma con i datatableadapter non so se ci sono le transazioni!
    Capisco più che perfettamente il problema. A questo punto, anche per una questione di semplificazione, forse si potrebbe davvero pensare a una architettura basata su altro framework che magari lavora a oggetti, consentendo di fare il binding agli stessi, e aggiornare i dati su database usando un metodo differente rispetto a quello proposto dal DataSet.

    Magari ne emerge un codice e una impostazione più semplice da gestire rispetto a quella attuale, anche perché peggio di quello che fa il DataSet + DataAdapter direi che non c'è.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  4. #4
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Quote Originariamente inviata da alka Visualizza il messaggio
    Capisco più che perfettamente il problema. A questo punto, anche per una questione di semplificazione, forse si potrebbe davvero pensare a una architettura basata su altro framework che magari lavora a oggetti, consentendo di fare il binding agli stessi, e aggiornare i dati su database usando un metodo differente rispetto a quello proposto dal DataSet.
    A chi lo dici! Secondo te non ci ho provato? E' da quando ho scoperto che non si possono gestire i NULL nei campi diversi da string con dataset che ho provato a cambiare sugli entity frameworks...però (data anche la fretta che ho di concludere) ho trovato qualche difficoltà...dovrò studiarli con calma più in la però perchè non voglio più sentir parlare di datasets....
    Ultima modifica di Veronica80; 19-09-2018 a 08:45

  5. #5
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Ok ho riletto tutto e credo tradotto bene!
    Non mi pare faccia nulla di diverso da quello che faccio io nell'elenco che ti ho scritto nel messaggio di ieri.
    Anche io uso valori negativi in decremento nel dataset e valori positivi in incremento nel database....

    però mi crea comunque un conflitto di integrità...

    L'unico modo che mi viene in mente è:
    • Salvare i dati della tabella padre (dal Ds al DB)
    • Ricaricare i dati della tab padre con gli id aggiornati
    • Creare le nuove righe figlio

    questo però mi espone ad un problema in caso di eccezioni:

    Non posso ottenere un rollback sulla tab padre dove i dati verrebbero comunque salvati anche se ho problemi col salvataggio della tab figlio. Normalmente risolverei con una transazione ed un rollback ma con i datatableadapter non so se ci sono le transazioni!
    Ultima modifica di Veronica80; 12-09-2018 a 20:14

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.