INSERT INTO neemt recordgegevens niet over

Status
Niet open voor verdere reacties.

PJW

Nieuwe gebruiker
Lid geworden
14 sep 2016
Berichten
4
Hallo,
Ik heb een stukje programma achter een knop gezet, waarvan ik niet snap waarom het niet werkt.
Het is de bedoeling dat een paar velden uit een tabel overgenomen worden uit een andere tabel. Alles lijkt goed te werken, behalve het stukje van "& "(Me.[Titel],Me.[Beschrijving]);". Als ik daar een vaste waarde inzet (& "('titeltje','Beschr');") dan vult hij het wel netjes in.
Ik snap niet waarom.

Hier de code:

Private Sub Knop20_Click()
Dim db As Database
Dim rs As Recordset

'Initialisaties
Set db = CurrentDb()
Set rs = db.OpenRecordset("TBL_PO_modellen", dbOpenSnapshot)

rs.MoveFirst
Do While Not rs.EOF
If rs![Datum_laatstekeer] + [Frequentie_in_dagen] < Now Then

db.Execute " INSERT INTO Actie_items " _
& "(Titel,Beschrijving) VALUES " _
& "(Me.[Titel],Me.[Beschrijving]);"
'& "('titeltje','Beschr');"
Me.[Datum_laatstekeer] = Now()
End If

Me.[Datum_uitvoeren] = [Datum_laatstekeer] + [Frequentie_in_dagen]
rs.MoveNext
Loop
Me.Refresh
End Sub

Alvast bedankt.
Pieter Jan
 
Allereerst welkom bij HelpMij! Naast de foutjes (en dan heb ik het niet over de CODE knop die je nog niet gevonden hebt ;) ) in de code snap ik je procedure ook niet helemaal. Eerst maar de code zoals ik denk dat je die bedoelt:
Code:
    Set rs = CurrentDb.OpenRecordset("TBL_PO_modellen", dbOpenSnapshot)
    rs.MoveFirst
    Do While Not rs.EOF
        If rs![Datum_laatstekeer] + Me.Frequentie_in_dagen < Date Then
            db.Execute " INSERT INTO Actie_items (Titel, Beschrijving) VALUES (" & Me.Titel & "," & Me.Beschrijving & ");"
            Me.Datum_laatstekeer = Date
        End If
        Me.Datum_uitvoeren = rs![Datum_laatstekeer] + Me.Frequentie_in_dagen
        rs.MoveNext
    Loop
Je ziet dat je de gegevens die je van het formulier afhaalt op de verkeerde manier ophaalt. Je mag die namelijk nooit in de string zetten zoals je nu doet. Vandaar dat ik de string opknip, en de code daar uitbreid met de formuliervelden.
Die laatste haal je waarschijnlijk niet op met de IntelliSense, want anders hadden er nooit rechte haken omheen gestaan. Die heb je namelijk alleen nodig bij veldnamen met spaties, en die heb jij niet. Maak het jezelf makkelijk, en gebruik de IntelliSens daar waar mogelijk!
Wat ik in je code niet snap: je loopt dus door een tabel heen met de recordset, (TBL_PO_modellen) en voert vervolgens een toevoegquery uit. Waarom niet gelijk met 2 recordsets gewerkt? Je kent de techniek... Maar wat ik nog minder snap: voor elk gevonden record voer je dit commando uit:
Code:
             Me.Datum_laatstekeer = Date
...
        Me.Datum_uitvoeren = rs![Datum_laatstekeer] + Me.Frequentie_in_dagen
Als je 50 records doorloopt, wordt dus hetzelfde veld op je formuiler 50 keer bijgewerkt. Dat zet natuurlijk geen doden aan de zijk.... Die commando's kun je dan best als laatste één keer laten uitvoeren. Hooguit met een check op Datum_Laatstekeer, want die is afhankelijk van een voorwaarde.

Overigens vermoed ik dat je alsnog de teil ingaat als we het hier over tekstvelden hebben; de code heb ik aangepast voor numerieke velden. Als het alletwee tekstvelden zijn, moet je deze regel gebruiken:
Code:
            db.Execute " INSERT INTO Actie_items (Titel, Beschrijving) VALUES (""" & Me.Titel & """,""" & Me.Beschrijving & """);"
 
Dank je voor de snelle reactie.

De velden Titel en Beschrijving zijn inderdaad textvelden. Ik heb de code dus veranderd in jou onderste variant. Ik krijg nu de foutmelding: fout 91, Objectvariabele of blokvariabele With is niet ingesteld.
Groet,
Pieter Jan
 
Kun je de SQL even afvangen?
Code:
Dim strSQL as String, tmp As Variant
            strSQL = "INSERT INTO Actie_items (Titel, Beschrijving) VALUES (""" & Me.Titel & """,""" & Me.Beschrijving & """)"
            tmp = InputBox("","",strSQL)
            db.Execute strSQL, dbFailOnError
 
OK, gedaan. Nu komen we voor mij op onbekend terein, maar ik zie wel dat de tekst in de popup goed is. Blijkbaar leest hij de gegevens dus wel.

Tekst in popup:

INSERT INTO Actie_items (Titel, Beschrijving) VALUES ("PO: smeren KM1","Alle smeerpunten bijlangs")
 
Ja, dat zou zonder meer moeten werken. Een oorzaak zou kunnen zijn dat de tabel op dat moment gelocked is.
 
Ik krijg de foutmelding ook zo één-twee-drie niet weg; de query zelf is OK; als ik (daarom gebruik ik altijd een Inputbox) de gekopieerde SQL in een nieuwe query plak, draait hij als een zonnetje. Ik heb de code nu maar aangepast en er een recordset van gemaakt; die doet het ook prima.
Code:
    Set rs = CurrentDb.OpenRecordset("Actie_items", dbOpenDynaset)
    With rs
        .AddNew
        !Titel = Me.Titel
        !Beschrijving = Me.Beschrijving
        .Update
        .Close
    End With
Komt het niet uit de lengte, dan maar de breedte :D.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan