Impossibile cancellare un record

Anonimo
2011-03-08T17:10:21+00:00

Ciao,

(Access 2007 sp2 + progetto ADP Sql server 2005)

Riscontro un comportamento anomalo durante la cancellazione di un record da una maschera in un progetto adp.

In maniera (casuale?) alcuni record si riesce a cancellarli mentre alcuni non vengono cancellati correttamente.

In primis access ritorna questo errore: "L'oggetto non contiene l'oggetto di automazione 'me' ... si è cercato di eseguire una routine VB per impostare una proprietà o un metodo.............'

Cosa che a me 'sembra' non vera in quanto anche mettendo i breack point su tutti i gestori di evento nessuno genera quell'errore ne tanto meno nessuno tenta di accedere ad una proprietà in 'me' (a meno che non ci siano problemi su gestori evento tipo current di alcune sottomaschere che effettivamente la maschera ha.....ma non credo che sia da ricercare qui il problema.....

infatti...

La maschera è collegata ad una origine dati vista che contiene molti campi una 30° circa

Nonostante l'origine dati sia una vista, le aggiunte, modifiche e cancellazioni vengono eseguite sempre correttamente,

tranne alcune volte in cui fallisce la DELETE.

Con sql server profiler esamino la chiamata che fallisce e noto che la delete viene effettivamente richiesta a SQL Server.

Se provo a fare copia ed incolla su Management Studio e provo ad eseguire la chiamata a delete ritorna il seguente messaggio:

(0 row(s) affected)

cioè non trova il record da eliminare secondo i parametri passati per argomenti.

Questo è l'esempio di una chiamata che fallisce.

exec sp_executesql N'DELETE FROM "Produzione"."Sales"."tbl_PreventiviDetails" WHERE "IDPreventivoDetails"=@P1 AND "PreventivoID"=@P2 AND "TipologiaLavoroID"=@P3 AND "FonderiaID"=@P4 AND "MaterialeDaFonderiaID"=@P5 AND "Denominazione"=@P6 AND "NumeroModelliPrevisti"=@P7 AND "EstrattoriPrevisti"=@P8 AND "NumeroCasseAnima"=@P9 AND "CasseAnimaPreviste"=@P10 AND "MaterialeModelli"=@P11 AND "MaterialeCasseAnima"=@P12 AND "TipoPlacche"=@P13 AND "CodiceDisegno"=@P14 AND "CodiceModello"=@P15 AND "NoteAmministrazione" IS NULL AND "Ritiro"=@P16 AND "OreProgettazionePreviste"=@P17 AND "OreMacchinaPreviste"=@P18 AND "OreRifinizionePreviste"=@P19 AND "CreationUser"=@P20 AND "CostoOraProgettazione"=@P21 AND "CostoOraMacchina"=@P22 AND "CostoOraRifinizione"=@P23 AND "CostoMateriale"=@P24 AND "CostiEsterni"=@P25 AND "CostoPlacche"=@P26 AND "CostoPropostoCliente"=@P27 AND "DataAccettazione" IS NULL AND "DataPrevistaConsegna" IS NULL AND "DataCreazioneRecord"=@P28 AND "Accettato"=@P29',N'@P1 int,@P2 int,@P3 int,@P4 int,@P5 int,@P6 nvarchar(6),@P7 int,@P8 bit,@P9 int,@P10 bit,@P11 nvarchar(27),@P12 nvarchar(1),@P13 nvarchar(6),@P14 nvarchar(2),@P15 nvarchar(3),@P16 real,@P17 int,@P18 int,@P19 int,@P20 nvarchar(256),@P21 money,@P22 money,@P23 money,@P24 money,@P25 money,@P26 money,@P27 money,@P28 datetime,@P29 bit',4657,2703,21,217,1,N'test 1',1,0,0,1,N'esecuzione a piacere vostro',N'1',N'123321',N'23',N'321',0,0,0,0,N'MAP\marcobosco                                                                                                                                                                                                                                                  ',$45.0000,$45.0000,$45.0000,$0.0000,$0.0000,$0.0000,$0.0000,'2011-03-08 02:25:08',0

Cosa posso tentare?

grazie.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2011-03-09T10:47:36+00:00

Ciao,

>>devo aggiungere un nuovo campo di tipo rowversion alle tabelle.

>>Che nome gli do al campo?

be, magari non a tutte le tabelle, io lo aggiungo solo a quelle con più di 5-6 campi o a quelle con campi di tipo approssimato.

Non ha importanza il nome del campo, puoi dargli quello che vuoi, io lo chiamo VersioneRiga.

>>Da access come faccio poi a fargli capire che deve usare questa >>nuova tecnica di reinvio delle modifiche.?

non devi fare nulla, ci pensa ado comporre la nuova where nel caso esista il campo ti tipo rowversion.

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-03-10T13:46:16+00:00

    ciao Giorgio,

    sto "lottando" talmente su tanti fronti che mi era sfuggita.

    Appena posso tento di implementarla.

    Comunque grazie per queste informazioni.

    Dove trovo informazioni sugli internal di access per questa caratteristica?

    E comunque sui metodi con cui access dialoga dietro le quinte con Sql server?

    Per esempio come l'hai imparata tu?

    Non l'avevo mai letta ne sulla guida ne sui libri su access.

    Fino ad oggi mi studiavo le chiamate tramite SQL server agent.

    Ma possibile che non ci sia un manuale una guida che spiega dettagliatamente tutte queste cose?

    Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-03-10T13:00:01+00:00

    Ciao Marco,

    hai letto la risposta ?

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-03-09T10:31:15+00:00

    Giorgio Grazie,

    devo aggiungere un nuovo campo di tipo rowversion alle tabelle.

    Che nome gli do al campo?

    Da access come faccio poi a fargli capire che deve usare questa nuova tecnica di reinvio delle modifiche.?

    grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2011-03-09T09:43:17+00:00

    Ciao,

    probabilmente il problema è dato dal campo Ritiro che è di tipo approssimato, quindi il suo valore  potrebbe non corrispondere esattamente in fase di verifica.

    Per risolvere aggiungi alla tabella un campo ti tipo rowversion, permetterà al recordset ado di ridurre quella lunga WHERE in fase di Delete e Update creandone una che sarà composta dal solo valore della chiave univoca e dal valore di rowversion, in questo modo si evita il problema di non corrispondenza in presenza di campi di tipo approssimato.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento