Update van een tabel via een combo box

Status
Niet open voor verdere reacties.

Marcel4831

Gebruiker
Lid geworden
25 mei 2021
Berichten
21
Geachte Mevrouw, Mijnheer,

Ik heb een tabel en een combo box aangemaakt met volgende gegevens:

Tabel Tijdstip:
Field name Data type
TijdstipID Autonumber
Uur Date/Time
IsInactive Yes/No

Combo110 SQL:
SELECT TblTijdstip.TijdstipID, TblTijdstip.Uur, TblTijdstip.IsInactive
FROM TblTijdstip
WHERE (((TblTijdstip.IsInactive)=False));


Ik wil na de selectie van een tijdstip in de combo box het veld 'IsInactive' van 'False' updaten naar 'True' zodat bij een volgend gebruik van de combo box de gebruikte tijdstippen niet meer zichtbaar zijn en er ook geen overlapping kan plaatsvinden.
Als ik handmatig het veld 'TblTijdstip.IsInactive' aanvink, dus 'True" verschijnen enkel de tijdstippen die nog wel vrij zijn.
Daartoe heb ik een Update query gemaakt met volgende SQL-gegevens:

UPDATE TblTijdstip SET TblTijdstip.IsInactive = Yes
WHERE (((TblTijdstip.TijdstipID) = (Combo110.TijdstipID))

Ik heb een [Event Procedure] aangemaakt met volgende gegevens:

Private Sub Combo110_AfterUpdate()
DoCmd.OpenQuery "UpdateQryTijdstip"
End Sub


Na selectie in de combo box krijg ik volgende Waarschuwing :

You are about to run an update query that will modify data in your table.

Antwoord: YES

Er volgt een Window:

Enter parameter value ?
Combo110.TijdstipID

Na het invullen van een willekeurig TijdstipID krijg ik nog een waarschuwing:

You are about to update 1 row(s)

Antwoord: YES

In de tabel wordt het gekozen Tijdstip.IsInactive geupdated van No naar Yes

Principieel werkt de update.
Het is echter de bedoeling dat het getal van het gekozen TijdstipID in de combo box rechtstreeks gebruikt wordt voor de update van de tabel Tijdstip.IsInactive.
Ik denk dat ik in de eventprocedure nog een of meerdere commands in VBA moet toevoegen maar heb geen idee hoe die er moeten uitzien.
Kunt U mij een oplossing aanrijken?

Hartelijk dank bij voorbaat,

M.v.g.
M.de Hauwere
 
Combo110.TijdstipID is geen correcte verwijzing.

als je wil verwijzen naar een veld op een formulier dan kan je forms![Naam formulier]![naam formulierveld] gebruiken.

Ik zou trouwens je combobox een meer gebruiksvriendelijke naam geven dan combo110.
 
De oplossing is niet zo moeilijk; je gebruikt in je huidige query één string, en daarbij ga je er vanuit dat dus alle componenten van die query binnen die string worden bepaald. En dat is niet zo: één parameter (het uur) komt uit je formulier. Je moet dat dus anders oplossen. En het kan (gelukkig) ook een heel stuk simpeler dan jij doet, met die aparte query; je kunt de hele procedure makkelijk onder de keuzelijst hangen. Ongeacht hoe die heet :).
Code:
Private Sub Combo110_Click()
    DoCmd.SetWarnings = False
    strSQL = "UPDATE TblTijdstip SET IsInactive = True WHERE TijdstipID = " & Me.Combo110.Value
    DoCmd.SetWarnings = True
End Sub

En gebruik _Click, niet _AfterUpdate.
 
Je moet de SQL string natuurlijk nog altijd uitvoeren. Daarvoor gebruik ik een command object, voorbeeld:

Code:
 Dim cmd As New adodb.Command
    
    cmd.ActiveConnection = CurrentProject.Connection
    cmd.CommandType = adCmdText
    cmd.CommandText = "UPDATE TblTijdstip SET IsInactive = True WHERE TijdstipID = " & Me.Combo110
    cmd.Execute
 
Klopt, die regelmaat ik vergeten. Maar het blijft nog steeds makkelijker als jouw oplossing :).
Code:
Private Sub Combo110_Click()
    DoCmd.SetWarnings = False
    CurrentDB.Execute ("UPDATE TblTijdstip SET IsInactive = True WHERE TijdstipID = " & Me.Combo110.Value)
    DoCmd.SetWarnings = True
End Sub
 
Ach, mij lijkt het simpel. Ook hier heb ik overigens een cursus voor :).
 
Sorry, maar ik hou het liever bij professionele cursussen.
 
Dat lijkt mij onwijs, gezien de kwaliteit van je antwoorden ;)
 
Geachte OctaFish,

Hartelijk dank voor de oplossing die U mij doorstuurde.
Er is echter een klein probleem:
Wanneer ik de keuze gemaakt heb in de combo box krijg ik een waarschuwing:

Compile error
Argument not optional

Bij het debuggen wordt Docmd.set Warnings = False als fout aangeduid.
Wanneer ik die lijn weglaat verloopt alles naar wens en ik krijg geen waarschuwingen.

M.v.g.
 
Het = teken is er teveel aan.

Docmd.SetWarnings false

en om de waarschuwingen terug aan te zetten

Docmd.SetWarnings true
 
Dat krijg je ervan als je code uit je hoofd inklopt :). De SetWarnings heb ik er alleen bijgezet om de bijwerkvraag uit te schakelen. Je kunt dat ook permanent doen door in de opties (zie plaatje) de vinkjes weg te halen bij de actie queries. Zelf heb ik dat zo ingericht:

Client settings.png

Als je de vinkjes uit zet, krijg je nooit meer een vraag, en is de code voor je keuzelijst dus heel simpel: één regel.
Code:
Private Sub Combo110_Click()
    CurrentDB.Execute ("UPDATE TblTijdstip SET IsInactive = True WHERE TijdstipID = " & Me.Combo110.Value)
End Sub

Ik zie eerlijk gezegd het nut niet van het bevestigen van actiequeries. Na 10 keer op Ja klikken (je wilt immers de query tóch uitvoeren) denk je niet meer na over de vraag, en klik je automatisch op Yes. Dan kun je het net zo goed standaard uitzetten. Ik heb er in ieder geval nog nooit problemen mee gehad dat ik de vinkjes uit heb gezet, en het is ook één van de eerste acties die ik doe als ik een nieuwe versie installeer, naast wat andere standaard instellingen die ik aanpas. Maar kijk maar eens of het voor jou handig is om deze vinkjes aan te hebben of niet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan