VBA Edit naar tabel lukt niet

Status
Niet open voor verdere reacties.

LauravT

Gebruiker
Lid geworden
14 jun 2012
Berichten
156
Hallo,..

Via VBA dienen er gegevens weggeschreven te worden in een bestaand record.
Hiervoor heb ik onderstaande code,..

Code:
Private Sub knop11_click()

'Jouw NAAM + DATUM wegzetten datbase
Me.KeyPreview = True

Dim Db As Database
Dim RST As DAO.Recordset
Dim SQL As String
Dim lData As String

'open database
Set Db = CurrentDb()

'SQL om bij juiste record te pakken
SQL = "Select WV_Id from WV where WV_Id = " & Me!Id

Set RST = Db.OpenRecordset(SQL)

'schrijf data weg
With RST
    .Edit
    .Fields("NAAM") = Environ
    .Fields("DATUM") = Now
    .Update
    .Close
End With

'bestand opslaan
'DoCmd.RunCommand acCmdSaveRecord
DoCmd.RunCommand acCmdSave

'bestand afsluiten
DoCmd.Close acForm, Me.Form.Name, acSaveYes

End Sub

Echter krijg ik nu telkens een foutmelding nl:

Fout 3061 tijdens uitvoering:
Er zijn te weinig parameters. Het verwachte aantal is: 1.


Als ik foutopsporing doe geeft hij deze foutmelding bij Set RST = Db.OpenRecordset(SQL).

Weet iemand misschien wat ik fout doe?!

MVG
 
Aan je code zie ik niet zo veel (echte) fouten, hooguit wat zaken die makkelijker/korter kunnen. Maar dat mag de werking niet in de weg zitten. Vang de SQL eens af met:
Code:
    SQL = "SELECT WV_Id FROM WV WHERE WV_Id = " & Me.Id
MsgBox SQL
En ik zou de KeyPreview weghalen; die hoort daar volgens mij helemaal niet.
 
Moet dit
Code:
.Fields("NAAM") = Environ
niet dit zijn?

Code:
.Fields("NAAM") = Environ("Username")
 
@ VenA: Dat is (vermoedelijk) sowieso fout, en had ik in de code bij mij al verbeterd, maar daar krijgt Laura de foutmelding niet op, dus daarom hield ik die kaart nog even achter de hand :)
 
Bedankt voor de reactie,.. echter krijg ik nu de foutmelding:

Compileerfout:
Kan de methode of het gegevenslid niet vinden


Dit geeft ie aan bij Me.Id
 
Dan zit daar het probleem: hij kan geen ID uitlezen. Weet je zeker dat het veld bestaat? Je had zelf een uitroepteken gebruikt (mag best trouwens); zelf gebruik ik dit soort constructies altijd met de punt omdat je dan IntelliSense hebt. Als je Me.i intypt, krijg je een lijst met alle objecten die met "i" beginnen, waaronder dus ook ID. Tenzij die niet bestaat, dan staat hij natuurlijk niet in de lijst :).
 
Daar lag het inderdaad aan (vergeten om het veld te hernoemen)!
Thanks!

Nu geeft ie echter een volgende fout:

Compileerfout:
Onjuist aantal argumenten of ongeldige eigenschappentoewijzing


Dit geeft ie aan bij Environ (heb hier nu wel ("Username") achterstaan)!
 
Probeer 'm eens zo:
Code:
     .Fields("NAAM") = VBA.Environ("Username")
 
Denk dat Access mijn code gewoon niet leuk vindt,.. want nu geeft ie weer een fout aan mbt Me.Id:

Fout 2447 tijdens uitvoering:

Ongeldig gebruik van de operator. (punt) of !, of ongeldige haakjes.
 
D'r zit iets vreemds, inderdaad. Deze code heeft in ieder geval géén fouten...
Code:
Private Sub knop11_click()
Dim RST As DAO.Recordset
Dim SQL As String, lData As String

    SQL = "SELECT WV_Id FROM WV WHERE WV_Id = " & Me.ID
    Set RST = CurrentDb.OpenRecordset(SQL)
    With RST
        .Edit
        .Fields("NAAM") = VBA.Environ("Username")
        .Fields("DATUM") = Now
        .Update
        .Close
    End With
    DoCmd.Close acForm, Me.Form.Name, acSaveYes

End Sub
 
Heb nu deze overgenomen en krijg wederom dezelfde melding als waar ik mee begonnen ben,.. :(!
 
Misschien moet je eerst uitleggen wat je eigenlijk aan het doen bent, want er gaat dus duidelijk iets fout. Beter nog is natuurlijk een voorbeeldje :).
 
Het idee is dat Access dadelijk op start met een formulier!
Dat formulier heeft 1 knop om een taak op te pakken,.. zodra je op deze knop dient jouw NAAM en DATUM weggezet te worden bij het juiste record in de database. Vervolgens dient ie een ander formulier te geven met de TAAK en KLANTNR van het record waar zojuist jouw NAAM is weggezet!

Dit 2e formulier heeft verder alleen een knop om het formulier te sluiten!

Zal kijken of ik er een variant van kan maken zonder gevoelige gegevens!
 
Ik heb zelf overigens ook lopen slapen, want jouw constructie zoals je hem nu hebt gaat nooit werken. Je wilt velden aanpassen die niet in de SQL zitten, en dat kan natuurlijk niet. Dus op zijn minst moet je deze code hebben:
Code:
    SQL = "SELECT [B]WV_Id, [COLOR="#FF0000"]NAAM, DATUM [/COLOR][/B]FROM WV WHERE WV_Id = " & Me.ID
    Set rst = CurrentDb.OpenRecordset(SQL)
    With rst
        .Edit
        .Fields("NAAM") = VBA.Environ("Username")
        .Fields("DATUM") = Now
        .Update
        .Close
    End With
En ik vind de constructie buitengewoon ingewikkeld :).
 
Super!!!

Hij doet het nu! (hoe simpel kan het zijn)

Hartstikke bedankt voor je hulp!
 
Maar dan had je de vraag niet hoeven te stellen :). Je stelt hem juist omdat je het niet ziet, en aan ons om het dus wél te zien... En wel zo snel mogelijk :D.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan