Credo che il tuo problema sia dovuto al fatto che le righe di dettaglio non possiedono un campo chiave. In poche parole, la tabella dei dettagli non ha nemmeno un campo che possa identificare univocamente il singolo record, tranne IDMOVIMENTO che però ha lo stesso valore per tutti i record che appartengono ad un preciso movimento, cioè ad un record contenuto nella tabella primaria, quella con i dati di testata.Originariamente inviato da 123delphi321
nel momento in cui registro tali modifiche,...ottengo lo stesso numero di record con lo stesso contenuto.
Quando invii le modifiche al database server, Delphi cerca di ottenere i dati aggiornati usando un campo chiave, cioè un campo che identifica univocamente il singolo record, per implementare una SELECT e reperirne i dati.
Nel tuo caso, mancando totalmente una chiave primaria, Delphi evidentemente prova con IDMOVIMENTO, ma tutti i record che appartengono ad una certa riga di testata hanno lo stesso valore, perciò per ogni record che Delphi ha a disposizione lato client, reperisce i valori del primo record che viene restituito cercando con un determinato IDMOVIMENTO.
Soluzione: devi introdurre nella tabella secondaria un campo chiave, magari autoincrementale, per garantire che Delphi possa individuare con precisione un singolo record nella tabella.
Osservando la struttura che hai postato in un messaggio precedente, ogni campo può essere duplicato, cioè non esiste una chiave.
In generale, quando devi creare tabelle e metterle in relazione, ma anche in assenza di una relazione (che potrebbe essere costituita "a sorpresa" in un secondo momento), definisce sempre e comunque un campo autoincrementale (tramite generatore) ID che permetta di associare un valore numerico diverso per ogni record di quella tabella.
Poi, se nascono condizioni in cui devi anche impedire che, ad esempio, un documento abbia lo stesso ANNO e NUMERO, allora definisci un indice appropriato, ma non fare a meno di un campo ID autoincrementale che torna sempre utile, anche perchè usando un campo di quel tipo, per ciascuna tabella correlata ti basta usare un solo campo numerico intero per stabilire il legame; in caso contrario, invece, se la coppia di valori ANNO+NUMERO è la chiave primaria all'interno di una tabella, devi introdurre la stessa coppia di campi anche nella tabella secondaria per poter stabilire la relazione; un solo campo non sarebbe sufficiente, dato che un valore di ANNO nella tabella secondaria può legarsi a molti record nella tabella primaria, lo stesso avviene per il campo NUMERO.
Se usi la coppia di campi, allora stabilisci una relazione 1 a molti; se usi un campo ID puoi ottenere più facilmente questo processo e velocizzare i confronti per correlare i record provenienti dalle due tabelle che avverrebbero su un solo campo invece che su 2, magari alfanumerici (quindi ancora più lenti).
Spero di averti chiarito a sufficienza la problematica.
E' più difficile da spiegare che da capire, per la verità, ma posso garantirti che anche gli effetti più strani che a volte ottieni hanno una spiegazione, salvo qualche rara eccezione dove, purtroppo, si tratta di un vero e proprio bug...e anche Delphi ne ha parecchi!
Ciao!![]()