Discussione:
Al salvataggio la maschera salta a un vecchio record (@@identity e scope_identity restituiscono valori diversi)
(troppo vecchio per rispondere)
Davide La Mantia
2021-10-14 08:42:21 UTC
Permalink
Ciao a tutti,
ho una maschera che ha come origine record una tabella collegata ODBC su SQL Server 2017.
Da ieri il cliente lamenta che all'inserimento di un nuovo record la maschera salta a un vecchio record, anche se magari quel vecchio record dovrebbe essere filtrato via dal filtro impostato sulla query di origine della maschera.
Dopo alcune ore di controlli ho verificato che in SQL server @@identity e scope_identity restituiscono valori diversi, SCOPE_IDENTITY restituisce l'indice corretto, @@IDENTITY restituisce l'indice sbagliato. Purtroppo Access si basa su @@IDENTITY creando il problema.

Adesso sto lavorando per capire come riallineare i due valori, quindi se qualcuno avesse suggerimenti sarebbe estremamente benaccetto.

Ciao
Davide La Mantia
2021-10-14 14:12:48 UTC
Permalink
Post by Davide La Mantia
Ciao a tutti,
ho una maschera che ha come origine record una tabella collegata ODBC su SQL Server 2017.
Da ieri il cliente lamenta che all'inserimento di un nuovo record la maschera salta a un vecchio record, anche se magari quel vecchio record dovrebbe essere filtrato via dal filtro impostato sulla query di origine della maschera.
Adesso sto lavorando per capire come riallineare i due valori, quindi se qualcuno avesse suggerimenti sarebbe estremamente benaccetto.
Ciao
Trovato l'inganno...
La tabella che dava il problema conteneva un trigger che creava un record in un'altra tabella.
A questo punto la funzione SCOPE_IDENTITY() restituiva correttamente l'ID della tabella originale, mentre @@IDENTITY restituiva l'ID della tabella su cui il trigger inseriva il record.

è da dire che normalmente le due funzioni non dovrebbero essere influenzate dal trigger, ma dovrebbero solo tenere conto della tabella originale.

Ad ogni modo, Access basa l'aggiornamento del record maschera sulla @@IDENTITY e quindi, ignorando qualsiasi filtro nella query, caricava il record corrispondente a @@IDENTITY come se fosse il record appena inserito.

Il problema non solo non si verifica ogni volta, anche se spesso, ma non si verifica su altre installazioni. La stessa installazione dove ora il problema si verifica, ha funzionato ininterrottamente per quasi due anni senza il minimo problema.

La soluzione che ho dovuto adottare è stata quella di eliminare il trigger e gestire le operazioni per cui il trigger era stato pensato con altri metodi, e meno male che dopo tutto il trigger non eseguiva operazioni complesse...

Ciao a tutti

Continua a leggere su narkive:
Loading...