Waarde in control verandert record in vba

Status
Niet open voor verdere reacties.

muufley

Gebruiker
Lid geworden
23 sep 2010
Berichten
47
Ik wil in een formulier met multiple items wanneer een waarde van een control op 0 komt dat verschillende andere waarden van die record ook veranderen.

Ik gebruik daarvoor dit in de before update event van de control:

Code:
Private Sub Gewicht_BeforeUpdate(Cancel As Integer)
If Me!Gewicht = 0 Then
Dim LResponse As Integer

 LResponse = MsgBox("Product Uit Stock?", vbYesNo, "Continue")
 
  If LResponse = vbYes Then
        Dim mySQL As String
mySQL = "Update tblamaltheehoofd"
mySQL = mySQL & " SET tblamaltheehoofd.[Stock Y/N] = No, tblamaltheehoofd.Positie = Null, tblamaltheehoofd.[Date Modified] = Date(), tblamaltheehoofd.[Time Modified] = Time()"
DoCmd.SetWarnings False
DoCmd.RunSQL mySQL
DoCmd.Beep
DoCmd.SetWarnings True
Else
        End If
Else
        End If
    
    Exit Sub
End Sub

Het probleem hier is dat wanneer ik het gewicht van één record naar 0 breng, alle records in de gehele tabel tblamaltheehoofd veranderen en niet alleen die ene specifiek record die ik wil veranderen.
 
Kun je er een voorbeeldje van maken? Ik mis namelijk een WHERE stuk in je Update regel. En die heb je nodig om de betreffende records te filteren. Nu pas je inderdaad alle records aan; je kijkt weliswaar naar het antwoord uit de messagebox, maar je doet dus niks aan selectie...
 
Oorspronkelijk had ik nog dit erbij:

Code:
mySQL = mySQL & " WHERE (((tblamaltheehoofd.[Stock Y/N])=Yes)

Maar ik achtte dit overbodig aangezien de query van het formulier al dit criteria stelt. Ik weet niet hoe ik bij "WHERE" kan aanduiden om enkel de specifieke record aan te passen.

In bijlage de database (access 2003). De betreffende code zit op het control "Aantal" van het formulier "frminstock".Bekijk bijlage Database180311.rar
 
Je hebt je criterium alleen gebruikt om te bepalen wanneer je de query moet uitvoeren; niet wat er moet worden bijgewerkt. Het moment is uiteraard belangrijk, maar de voorwaarde ook... Ik kijk wel even naar je voorbeeeld.
 
Michel, heb je nog de kans gehad om mijn probleem van naderbij te bekijken? Heb zelf nog wat zitten zoeken en de oplossing dat ik op een ander forum aangereikt kreeg bevatte een ton code waar ik niet omheen kon.
 
Ik kan nog niet zoveel chocola maken van je db; je hebt maar weinig voorbeeldrecords die aangepast kunnen worden. Ik snap dus eigenlijk niet wat er moet gebeuren...
 
Je hebt gelijk er waren inderdaad weinig voorbeelden om mee te werken, volgende is beter: Bekijk bijlage Database180311(2).rar
De bedoeling is eigenlijk dat de db gebruikt wordt voor orderpicking. Op het formulier frminstock maakt de gebruiker in het vak "Artikelnr" een selectie van welk product hij wil orderpicken. Eén record stelt een pallet voor met het aantal van het desbetreffend product. Indien de gebruiker het aantal op 0 zet dan dient voor deze record (pallet) volgende sql uitgevoerd te worden enkel voor die bepaalde record.

Code:
SET tblamaltheehoofd.[Stock Y/N] = No, tblamaltheehoofd.Positie = Null, tblamaltheehoofd.[Date Modified] = Date(), tblamaltheehoofd.[Time Modified] = Time()

Voorlopig worden alle records van de gehele tabel aangepast door dit lijntje sql, dit is niet de bedoeling.
 
Nu heb je inderdaad wat meer records, maar ik snap toch de layout van je formulier niet helemaal... Kijk maar eens naar het plaatje, waar nogal wat data dubbelop in zit. Wat is de bedoeling van dat subformulier? En waarom zitten daar zoveel nodeloze velden in de onderliggende query (en waarom een query, niet gewoon de subtabel?)
 

Bijlagen

  • Data vorbeeld.jpg
    Data vorbeeld.jpg
    108,1 KB · Weergaven: 39
En hoe zet je het aantal op 0? Ik zie daar geen knop voor, noch een tekstveld...
 
In de tabel van het formulier in het control zelf, de gebruiker typt gewoon "0". Zo heb ik het voorlopig, ik ben nog naar andere methodes op zoek maar dat is nu niet zo belangrijk.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan