modifica contemporanea di record

xyz.net

Nuovo Utente
3 Mag 2016
5
0
0
ciao a tutti,
sono un novellino di access e mi è successo questo:
ho la versione 2013 e mi hanno dato un programma con un db da migrare a sql.
prima della migrazione non dava errori, da quando l'ho collegato al db sql ,in una sottomaschera esce l'errore di cui parlate e cioè :
durante la corrente sessione di modifica il record è stato modificato da un altro utente. salvando le proprie modifiche si sovrascriveranno i cambiamenti dell'altro utente
nello specifico succede che io seleziono dalla combo box una stringa e fin qui tutto ok, poi vado a mettere la spunta su una check box ed esce l'errore.

il "codice" che trovo in "dopo aggiornamento" di propietà\evento della combo box è :

Private Sub DescrizioneCiclo_AfterUpdate()
Me.Form.Requery
End Sub

mentre quello che trovo nella ceck box che va in errore è :
Private Sub Preferenziale_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunMacro "EliminaFlagPreferenzialeneiCicli"
End Sub

la macro esegue un comando aggiorna
e questa query:

UPDATE Tab002ElencoCicli SET Tab002ElencoCicli.Preferenziale = No
WHERE (((Tab002ElencoCicli.IDciclo)<>[Forms]![Tab001AnagraficaArticoli1]![Sottomaschera Tab002ElencoCicli].[Form]![IDciclo]) AND ((Tab002ElencoCicli.CodiceArticolo)=[forms]![Tab001AnagraficaArticoli]![CodiceArticolo]));

se serve e mi spiegate come fare inserisco anche degli screenshot

Vi prego potete aiutarmi?
grazie a tutti in anticipo!

Ps. mi scuso per eventuali errori, ma come dicevo sono un novellino.
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
ho la versione 2013 e mi hanno dato un programma con un db da migrare a sql.
provo a capire,

hai un db in access 2013 che hai migrato su sql (Mssql, Oracle o qualche altro ?)

poi hai collegato Mssql (suppongo) ad access 2013 ed hai usato l'applicazione scritta in vba per gestire il database

usando l'applicazione ti ritrovi con un messaggio che ti avverte che stanno avvenendo modifiche concorrenti sugli stessi record, se è vero, l'applicazione è scritta perché sia usata da un utente alla volta, non gestisce la multiutenza con la "lock" dei record in modifica

verifica se all'interno dell'applicazione vi sia una gestione delle "lock" e forse in quel punto non sono applicate

se hai fatto un copia/incolla, non capisco
Codice:
UPDATE Tab002ElencoCicli SET Tab002ElencoCicli.Preferenziale = No
il valore No dovrebbe essere tra apici

ciao
Marino
 

xyz.net

Nuovo Utente
3 Mag 2016
5
0
0
verifica se all'interno dell'applicazione vi sia una gestione delle "lock" e forse in quel punto non sono applicate

se hai fatto un copia/incolla, non capisco

il valore No dovrebbe essere tra apici
QUOTE]

ciao Marino e Grazie per la risposta!
si,ho migrato il db di access 2013 in mssql e l'ho ricollegato ad access, esattamente come hai spiegato tu.
ho provato a mettere No fra apici, ma esce sempre lo stesso errore.
Ho controllato e nell'applicazione non c'è una gestione delle "lock" mentre ho notato un'altra cosa.
nella maschera dell'errore ci sono anche 3 pulsanti: salva il record (disabilitato), copia negli appunti e non salvare le modifiche.

cliccando su 'copia negli appunti' e incollando in notepad esce questo :
DescrizioneCiclo Preferenziale IDcicloCopia Testo13
Produzione 1 -1 128

io scelgo solo la 'descrizioneciclo' mentre sembra in effetti che impegni anche le altre colonne fra le quali "preferenziale" che è quella che va in errore quando dopo provo a modificarla .
in pratica sembra quasi che impegni l'intero record e non lo "liberi" e così quando provo a modificare 'preferenziale' lo trova già occupato.

Cercando in rete ho letto che in tanti hanno avuto lo stesso problema dopo aver migrato il db da access ad sql, come faccio io insomma, ma le soluzioni che descrivono (refresh, in vb e aggiungere la colonna timestamp in sql) a me non risolvono il problema.

Riesci ad aiutarmi?
Grazie!!!
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
hai aggiunto la colonna "timestamp" alla tabella in mssql ?
hai cancellato la connessione alla tabella e ricreata in access ?
se non lo hai fatto, fai i due passi in successione e riprova l'applicazione

lascia l'update come l' hai trovata nel codice (senza apici)
 

xyz.net

Nuovo Utente
3 Mag 2016
5
0
0
hai aggiunto la colonna "timestamp" alla tabella in mssql ?
hai cancellato la connessione alla tabella e ricreata in access ?
se non lo hai fatto, fai i due passi in successione e riprova l'applicazione

lascia l'update come l' hai trovata nel codice (senza apici)
si, ho già fatto queste prove
ho tolto gli apici

grazie
 

xyz.net

Nuovo Utente
3 Mag 2016
5
0
0
mi viene un dubbio,
mi scuso ancora perchè come dicevo sono nuovo di access.
a me hanno fatto vedere quei due pezzi di codice corrispondenti agli'eventi dei due campi, ma il codice della sottomaschera è molto di più.
ora mi rendo conto che probabilmente avrei dovuto mandare tutto il codice che riporto di seguito :


Option Compare Database

Private Sub DescrizioneCiclo_AfterUpdate()
Me.Form.Requery
End Sub

Private Sub DescrizioneCiclo_Change()
Me.Refresh
End Sub

Private Sub DescrizioneCiclo_DblClick(Cancel As Integer)
DoCmd.OpenTable "Tab015TipoCiclo"
End Sub

Private Sub DescrizioneCiclo_GotFocus()
Me.DescrizioneCiclo.Requery
End Sub

Private Sub Form_AfterUpdate()
Me.Refresh
End Sub

Private Sub Form_Current()
Me.Parent![Sottomaschera Tab003FasiCiclo].Requery
If Me.DescrizioneCiclo <> False Then
Forms![Tab001AnagraficaArticoli1]![Sottomaschera Tab003FasiCiclo].Visible = True
Else
Forms![Tab001AnagraficaArticoli1]![Sottomaschera Tab003FasiCiclo].Visible = False
End If
If DLookup("[IDciclo]", "Tab003FasiCiclo", "[IDciclo]=forms![Tab001AnagraficaArticoli1]![Sottomaschera Tab002ElencoCicli].form![IDciclo]") Then
Me.Comando12.Enabled = False
Else
Me.Comando12.Enabled = True
End If
End Sub


Private Sub Comando12_Click()
DoCmd.SetWarnings False
DoCmd.RunMacro "CopiaCicloda"
Me.Parent![Sottomaschera Tab002ElencoCicli].Requery
Forms![Tab001AnagraficaArticoli1].Requery
End Sub

Private Sub Preferenziale_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunMacro "EliminaFlagPreferenzialeneiCicli"
Me.Refresh
End Sub
 

xyz.net

Nuovo Utente
3 Mag 2016
5
0
0
ho fatto questa prova:
nel codice
Private Sub Preferenziale_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunMacro "EliminaFlagPreferenzialeneiCicli"
Me.Refresh
End Sub

ho inserito :
Me.Parent![Sottomaschera Tab002ElencoCicli].Requery
che credo voglia dire di ricaricare (chiedo conferma) la sottomaschera in questione. quindi è diventato :

Private Sub Preferenziale_AfterUpdate()
Me.Parent![Sottomaschera Tab002ElencoCicli].Requery
DoCmd.SetWarnings False
DoCmd.RunMacro "EliminaFlagPreferenzialeneiCicli"
Me.Refresh
End Sub

quando provo a mettere il flag nella check box 'preferenziale' ( momento in cui mi andava in errore col messaggio : -modifica contemporanea di record - )

ora esce il messaggio :
errore di runtime 2118
è necessario salvare il campo corrente prima di eseguire l'azione
rieseguiquery

io credo sia sempre per lo stesso problema , immagino sia da salvare il campo 'descrizioneciclo' .

tu cosa ne pensi?
sai dirmi qual'è l'istruzione che mi permette di salvare il campo?
grazie infinite