Volledige versie bekijken : SQL syntax error in vb.net



Y-Ssin
21 April 2010, 20:07
Ik ben bezig met een programma te schrijven, met een database connectie waar je simpelweg gegevens kan toevoegen, bekijken, verwijderen en wijzigen. Ik gebruik daarvoor een acces(2003) database .mdb
Ik doe mijn data acces in aparte klassen.
In mijn klassen "Klanten" heb ik dus een sub om nieuwe klanten toe te voegen:

Dim connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & My.Settings.connstring & "'"
Dim comm As New OleDb.OleDbCommand
Dim dr As OleDb.OleDbDataReader


Public Sub saveklant()

Dim conn As New OleDb.OleDbConnection(connstring)

conn.Open()

comm.Connection = conn
comm.CommandText = "INSERT INTO tbl_klanten (aanspreking, naam, voornaam, bedrijf, maatschappelijke_zetel, gsm, e-mail_adres, gebruiker) VALUES ('" & _aanspreking & "','" & _naam & "','" & _voornaam & "','" & _bedrijf & "','" & _zetel & "','" & _GSM & "','" & _email & "', '" & _gebruiker & "')"
comm.ExecuteNonQuery()

conn.Close()

End SubDie property's zyn boven aangemaakt.
De code van mijn form om de gegevens toe te voegen:


Private Sub btnsaveclient_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsaveclient.Click


Dim k As New Klanten

k.aanspreking = cboAanspreking.Text
k.naam = txtnaam.Text
k.voornaam = txtvoornaam.Text
k.bedrijf = txtbedrijf.Text
k.zetel = txtzetel.Text
k.GSM = txtgsm.Text
k.email = txtemail.Text
k.gebruiker = My.Settings.ingelogd
k.saveklant()
MsgBox("U hebt een nieuwe klant aangemaakt: " & k.aanspreking & " " & k.naam & " " & k.voornaam & "", MessageBoxIcon.Information, "Taskbuddy - Klant aangemaakt")
Me.Close()
End Sub
Nu krijg ik elke keer als ik run, de gegevens invul en op de button klik een syntax error: "De instructie INSERT bevat een syntaxisfout."
Ik heb eindeloos zitten nakijken naar de namen van mijn tabel en van mijn kollommen, naar haakjes, aanhaaltekens, maar ik heb niets gevonden, dit zou moeten werken maar dat doet het niet. :S
Is er iemand die me hiermee kan helpen?

ultddave
21 April 2010, 20:29
Moet er geen puntkomma achter de SQL query?


"INSERT INTO tbl_klanten (aanspreking, naam, voornaam, bedrijf, maatschappelijke_zetel, gsm, e-mail_adres, gebruiker) VALUES ('" & _aanspreking & "','" & _naam & "','" & _voornaam & "','" & _bedrijf & "','" & _zetel & "','" & _GSM & "','" & _email & "', '" & _gebruiker & "');"

Als dat het niet oplost, moet je anders eens testen met simpele queries zoals "SELECT * FROM tbl_klanten". Of met korte INSERT queries met hardcoded waardes. Bijvoorbeeld;
"INSERT INTO tbl_klanten (aanspreking) VALUES ('meneer');"

Mvg,
Dave

Y-Ssin
21 April 2010, 23:27
ik heb dat voorbeelde geprobeerd met meneer, dat is gelukt, nu is er in mijn database alleen die meneer toegevoegd, voor de rest staat alles leeg, wat wil dit zeggen?
btw waarom die ; opt einde van mijn vorige code?
Ik heb die sql code letterlijk gekopiëerd van een ander stuk van de programma, daar werkt het, zonder die ;
en jouw voorbeeld lukt ook met en zonder die ;

ultddave
21 April 2010, 23:37
Ah ok. Ik doe het meestal met puntkomma, vandaar dat ik dacht dat het altijd moest. ;)

Probeer deze eens, kan misschien een probleem met die underscore of hyphen zijn in "e-mail_adres".


"INSERT INTO tbl_klanten (e-mail_adres) VALUES ('test@hotmail.com')"

En anders kan je dan deze proberen;


"INSERT INTO tbl_klanten (aanspreking) VALUES ('" & _aanspreking & "')"

Soms zijn het zo van die kleine details waar sommige programmeertalen problemen van maken :D.

Hopelijk zal hij seffes met zulke simpele queries ook die INSERT fout geven :P.


ik heb dat voorbeelde geprobeerd met meneer, dat is gelukt, nu is er in mijn database alleen die meneer toegevoegd, voor de rest staat alles leeg, wat wil dit zeggen?
Dat is goed. Die INSERT statement ging enkel iets toevoegen in de kolom "aanspreking". Dus die query is goed uitgevoerd om het zo te zeggen.
Alé, het is opzich niet echt perfect aangezien je eigenlijk SQL constraints/checks etc moet toevoegen die het toevoegen van zulke queries vermijd. Maar dat is niet echt aan de orde nu ;).

Mvg,
Dave

Y-Ssin
22 April 2010, 13:13
Er was blijkbaar niets verkeerd met de code, ik had overal breakpoints gedaan, nix tezien. Maar visual studio deed al efkes raar bij mij, dus heb ik het opnieuw geïnstalleerd, kheb ook ineens een nieuwe database gemaakt met minder underscores(kd8 ookal dat het daaraan kon liggen), dan lukt ineens alles wel... Tzal wel een "computerlijk" foutje zijn geweest :p
Toch bedankt voor alle reacties! ;)