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-10T17:39:34+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.

    Ciao,

    Le maschere di un progetto ADP hanno come origine record un ADODB.recordset, conoscendo come si comportano gli oggetti della libreria ADODB conosci anche come si comportano gli  ADP di access.

    Le informazioni sul comportamento in presenza del campo RowVersion (ex TimeStamp) si trovano ad esempio qui

    http://msdn.microsoft.com/en-us/library/aa260830(v=vs.60).aspx

    dove dice:


    rs.Properties("Update Criteria") = adCriteriaTimeStamp

    If you're using SQL Server, MSDE, or another database that supports timestamp fields, you can achieve genuine optimistic locking without needing to include all of the fields in the WHERE clause. By setting the Update Criteria to adCriteriaTimeStamp, only the primary key and the timestamp field are included in the WHERE clause. This is the best approach to use if your database supports timestamp fields and you have one in your table. It's both safer and more efficient than the default.


    Comunque ti comprendo, attualmente non è semplice trovare la documentazione, 7/8 anni fa si trovavano più facilmente le informazioni e sui newsgroup in lingua inglese c'erano molti utenti che trattavano questo argomento. Ora Microsoft consiglia di usare i file accdb con tabelle allegate a Sql server via ODBC per sfruttare le nuove funzionalità, vedi http://blogs.office.com/b/microsoft-access/archive/2006/07/27/new-more-complete-access-overview.aspx

    sarà per questo che gli ADP sono rimasti un po' nell'oblio.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento