[Access/VBA] - Gegevens zijn gewijzigd foutmelding

Pagina: 1
Acties:
  • 388 views sinds 30-01-2008
  • Reageer

  • krietjur
  • Registratie: Februari 2001
  • Laatst online: 23:09

krietjur

Where am I?

Topicstarter
Ik ben bezig met het maken van een applicatie in Access XP. Ik heb nu een hoofdformulier, en een subformulier die allebei dezelfde tabel als recordsource hebben. Op het hoofdformulier staat een keuzelijst, waar ik het gewenste item kan selecteren. Wanneer ik dat doe, springt zowel het hoofdformulier als het subformulier naar het gewenste record.

Tot zover werkt het. Wanneer ik nou op het subformulier gegevens wijzig en vervolgens op het hoofdformulier op een ander item klik, krijg ik van Access de foutmelding: "De gegevens zijn gewijzigd. Een andere gebruiker heeft deze record en de wijzigingen opgeslagen voordat u de wijzigingen probeerde op te slaan. Bewerk de record opnieuw."

Nu snap ik de foutmelding wel, maar hoe kan ik deze nou wegkrijgen? Heb al een aantal dingen geprobeerd. De fout gewoon negeren (niets meer uitdoen op error 7878). Ik krijg dan geen foutmelding meer, maar moet twee keer in de keuzelijst klikken voordat hij het gewenste item selecteerd. In het lost_focus event van het vakje heb ik Me.Dirty=false gezet. Dit werkt, mits ik op het subformulier eerst even naar een ander veld navigeer. Wanneer ik direct in het hoofdformulier klik, raakt het veld de focus niet kwijt en wordt de code dus niet uitgevoerd. Heb verder al allerlei events van de keuzelijst geprobeerd (on_enter, on_focus, on_click etc), en dan van het subformulier dirty=false setten.

Dit wil allemaal niet werken :( Iemand een idee hoe ik deze toch wel irritante melding weg kan krijgen?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Waarom een hoofd/sub constructie als ze dezelfde gegevensbron gebruiken? Als het gaat om een lijst/detail weergave kun je overwegen om niet access de koppeling hoofd/sub te laten verzorgen maar de synchronisatie van de formulieren zelf te verzorgen met een stukje vba in het on_current event van het 'hoofd' formulier. Ik krijg dan in ieder geval niet meer dit soort foutmeldingen.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • krietjur
  • Registratie: Februari 2001
  • Laatst online: 23:09

krietjur

Where am I?

Topicstarter
Sorry voor de erg late reactie, maar ik ben een tijdje niet meer met dit probleem bezig geweest.

Het gaat inderdaad om een lijst/detail weergave. Om precies te zijn heb ik een hoofdformulier met daarop een keuzelijst. Op dit hoofdformulier staan tabbladen, en op elk tabblad staat een subformulier. Bij de eigenschappen van elk subform heb ik subvelden en hoofdvelden gekoppeld.

Ik heb net geprobeerd wat je verteld, maar dat lijkt ook niet te werken. Ik heb de hoofdvelden en subvelden niet meer gekoppeld. Wanneer ik, om even te testen, het volgende doe in het hoofdformulier:

code:
1
2
3
Private Sub Form_Current()
    MsgBox ("form_current")
End Sub


dan krijg ik een message box wanneer ik het formulier opstart. Als ik echter waardes wijzig op het subformulier en dan weer naar het hoofdformulier ga (door op de keuzelijst te klikken) dan komt hij helemaal niet in die sub, ik weet dus niet hoe ik dan de synchronisatie tussen de formulieren zelf moet verzorgen in dat current event ? Daar komt dan nog bij dat de fout zelf niks met de koppeling te maken heeft, want ook wanneer ik de hoofd en subvelden niet gekoppeld heb krijg ik de foutmelding bij wijzigingen op het subformulier.

Ik heb nog wel iets anders geprobeerd wat wel aardig leek te werken, namelijk in de change event van een invoerveld:
code:
1
Me.Dirty = false

aanroepen.

Dit werkt voor alle textvelden. Wanneer ik echter ditzelfde doe voor numerieke velden, dan krijg ik twee andere problemen:
- Telkens als ik iets invoer komt de cursor vooraan in het invoervak te staan. Wanneer ik dus "123" intik op m'n toetsenbord, dan krijg ik "321" in het invoervak te staan.
- Wanneer ik een niet-numerieke waarde intik krijg ik direct een foutmelding, omdat de waarde niet geldig is.

Nou zou ik misschien wel het volgende kunnen doen bij het change event voor numerieke velden:
code:
1
2
3
- check of invoer numeriek is.
- Me.Dirty = false
- cursor achter in tekstvak plaatsen.


Dan zou het volgens mij wel goed moeten gaan, maar een mooie oplossing kan ik het ook weer niet noemen.. zijn hier geen betere oplossingen voor ?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Subformulieren zijn bedoeld voor informatie die via een relatie aan je data hangt. IMHO gebruik je het ding voor iets waarvoor het niet bedoeld is.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • krietjur
  • Registratie: Februari 2001
  • Laatst online: 23:09

krietjur

Where am I?

Topicstarter
farlane schreef op 16 juni 2004 @ 14:54:
Subformulieren zijn bedoeld voor informatie die via een relatie aan je data hangt. IMHO gebruik je het ding voor iets waarvoor het niet bedoeld is.
Weet ik. Maar de opbouw van de applicatie is nou eenmaal niet anders, en ik zie niet hoe ik dat anders/beter zou kunnen doen. De bedoeling is nou eenmaal dat er een keuzelijst is, en dat de informatie over een aantal tabbladen verspreid wordt weergegeven. Probleem is echter dat het om vrij veel informatie gaat, waardoor ik niet de benodigde spullen op 1 tabblad kwijt kan. Dus ik wil binnen het tabblad kunnen scrollen. Ik heb hier ook wel dingen voor geprobeerd, maar het enige wat ik werkend kon krijgen was door een "Microsoft Forms 2.0 Frame" component te gebruiken. En die werkte waardeloos. Vandaar dat ik er destijds voor heb gekozen om de verschillende delen op subformulieren te zetten.