INSERT INTO, gaat verkeerd

Status
Niet open voor verdere reacties.

baszer

Gebruiker
Lid geworden
3 mrt 2013
Berichten
96
Hallo,

korte vraag. Ik heb de volgende VBA code

Code:
Private Sub cmdAddChip_Click()

CurrentDb.Execute "INSERT INTO tblChips (ChipID, Active, DateOfEntry, Number) " & _
"VALUES(' & Me.ChipID & ', 'False', ' & Now() & ', '" & Me.Number & "')"

End Sub

ChipID is autonumber, active is een boolean, dateofentry een datum (moet de datum zijn van invoer), en number is een text veld.

Helaas krijg ik steeds een run tim error 3134. Iemand een idee wat ik verkeerd doe?
 
Zal ik alle fouten in één keer behandelen? Ach waarom niet :).
1. Een autonummer hoef je nooit zelf toe te voegen. (OK, er is een uitzondering maar die is hier niet van toepassing)
2. Een datumveld moet je altijd als een datum toevoegen, nooit als tekst
3. Een boolean veld moet je altijd een boolean geven, of de waarden 0 of -1. Zeker niet een tekst.
En een veld [Number] dat een tekstveld is? Weird maar mag natuurlijk wel...
 
Bedankt voor je antwoord. Ik heb de insert verkort, helaas zonder gewenst resultaat, wat doe ik verkeerd?

(current date heb ik als default value aangegeven in de database)

Code:
Private Sub cmdAddChip_Click()

CurrentDb.Execute "INSERT INTO tblChips (Active, Number) " & _
"VALUES( '-1', '" & Me.Number & "')"

End Sub

ps Number is een code die ook bestaat uit letters ;)
 
Heb je 'm al uitgetest? Denk 't wel, want je geeft al aan dat hij nog steeds geen resultaat geeft :). Dat verklaart mij (nog steeds) niks. Om te beginnen: je boolean veld [Active] geef je nog steeds een tekst als waarde. 'TRUE' en '-1' is alletwee tekst, en alletwee fout. Ik vraag me overigens af of je dat veld "uberhaupt wel mee moet nemen, omdat de standaardwaarde van een boolean veld FALSE is, en dan hoef je dat veld dus alleen een waarde te geven bij een Insert query als je het veld op TRUE wilt instellen. Overigens wilde je in de eerste query het veld op FALSE hebben, en nu blijkbaar op TRUE. Voortschrijdend inzicht? En volgens mij blijft het datumveld ook leeg als je op deze manier records toevoegt; de tabel komt namelijk nooit in bewerkingsmodus te staan, en dan wordt de standaardwaarde niet geactiveerd. Maar wellicht bij jou wel... Ik zou je query dus zo doen: (met datumveld erbij)
Code:
    CurrentDb.Execute "INSERT INTO tblChips (Active, DateOfEntry, Number) VALUES(TRUE, CDate(" & CDbl(Date) & "), """ & Me.Number & """)"
 
bedankt voor je antwoord Octa. Ik krijg helaas nog steeds dezelde foutmelding (3134).

Mag ik vragen waarom je
Code:
& Me.Number &
tussen drie aanhalingstekens zet?
 
Dat staat nu juist niet tussen aanhalingstekens :). Tenzij je bedoelt dat het resultaat tussen aanhalingstekens staat. Dat heb ik aangepast omdat jij enkele aanhalingstekens gebruikte en dubbele veiliger zijn.
 
Ik vermoed dat je een ongelukkige veldnaam hebt genomen die door Access herkend wordt als interne naam. Moet je proberen te vermijden, want je kunt daar mee in de problemen komen. Zo werkt hij wel:
Code:
    strSQL = "INSERT INTO tblChips ( [Number] ) VALUES (""" & Me.txtChipNumber & """)"
 
Nice! Je had gelijk. Ik heb veld Number veranderd naar ChipNumber en het werkt!

Number mag dus niet...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan