PDA

Bekijk Volledige Versie : De instructie INSERT bevat een syntaxisfout. (asp.net, vb, ms acces)



gandert
15/08/07, 17:35
Ik krijg volgende foutcode als ik op "btnInsert" heb geklikt om een formulier in te voegen in mijn database.


De instructie INSERT bevat een syntaxisfout.

code is ASP.NET, Vb en database is ms access

Hieronder de code voor de actie van btnInsert klik (INSERT).

Protected Sub btnInsert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnInsert.Click
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()


If id.Text <> "" Then
' Bestaand record => update
strSql = "UPDATE entries SET titel = @titel, " _
& "text = @text, " _
& "category = @category, " _
& "date = @date, " _
& "must = @must " _
& "WHERE id = @id; "
Else
' Nieuw record => Insert

strSql = "INSERT INTO entries(titel, text, category, date, must) " _
& "VALUES(@titel,@text,@category,@date,@must);"
End If

Dim objCmd As New System.Data.OleDb.OleDbCommand(strSql, objCn)
objCmd.Parameters.Clear()






objCmd.Parameters.Add("@titel", OleDbType.VarChar)
objCmd.Parameters("@titel").Value = titel.Text
objCmd.Parameters.Add("@text", OleDbType.VarChar)
objCmd.Parameters("@text").Value = FreeText.Text
objCmd.Parameters.Add("@category", OleDbType.VarChar)
If newCat.Text = "" Then
objCmd.Parameters("@category").Value = DropDownListCat.SelectedValue
Else
objCmd.Parameters("@category").Value = newCat.Text
End If

objCmd.Parameters.Add("@date", OleDbType.Date)
objCmd.Parameters("@date").Value = CType(lblDate.Text, Date)
objCmd.Parameters.Add("@must", OleDbType.Boolean)
objCmd.Parameters("@must").Value = CheckBoxMust.Checked

If id.Text <> "" Then
' parameter voor id aanmaken
objCmd.Parameters.Add("@id", OleDbType.Integer)
objCmd.Parameters("@id").Value = CType(id.Text, Integer)
End If



Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
boodschap.ForeColor = Drawing.Color.Red
boodschap.Text = "Er trad een fout op bij het bewaren van de gegevens.<br />" & ex.Message
Exit Sub
Finally
If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If
End Try

' Indioen nodig de nieuwe id ophalen voor verdere verwerking
If id.Text = "" Then
id.Text = GetHighestId().ToString


End If

boodschap.ForeColor = Drawing.Color.Green
boodschap.Text = "De gegevens zijn bewaard."

End Sub

ichosting
15/08/07, 17:43
Heb niet zoveel kaas gegeten van ASP, maar moet het niet zijn:


strSql = "INSERT INTO entries(titel, text, category, date, must) " _
& "VALUES(@titel,@text,@category,@date,@must)";

gandert
15/08/07, 17:51
neen dit is normaal juist. de ; moeten binnen de "" staan.

Heb dus nog steeds hetzelfde probleem.

Alvast bedankt.

ichosting
15/08/07, 17:58
Ok, probeer dan eens SINGLE QUOTES om de vars:




strSql = "INSERT INTO entries(titel, text, category, date, must) " _
& "VALUES('@titel','@text','@category','@date','@must ');"

Ramon Fincken
15/08/07, 18:01
laat de strSql query eens zien zoals hij m wil plaatsen ?

in php heet dat echo $queryinstructie;

heb je het ook met

`titel`,`text` etc.... geprobeerd ?

VDBAHosting
15/08/07, 18:17
Ok, probeer dan eens SINGLE QUOTES om de vars:




strSql = "INSERT INTO entries(titel, text, category, date, must) " _
& "VALUES('@titel','@text','@category','@date','@must ');"



Volgens mij moet je inderdaad alle string waardes tussen single quotes zetten, volgens mij hoeft dit niet met integers. Verder neem ik aan dat
er geen enge quotes of andere vreemde tekens in je invoer zitten.

Probeer overigens ook even de volgende stukjes te veranderen: "entries(titel," => "entries (titel," en "VALUES(@titel" => "VALUES ('@titel"

Succes!

gandert
15/08/07, 19:19
Hieronder volledige VB code:


Imports System.Data
Imports System.Data.OleDb

Partial Class insertentrie
Inherits System.Web.UI.Page

Dim strCn, strSql As String
Dim intId As Integer

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
strCn = ConfigurationManager.ConnectionStrings("databasename").ConnectionString






' Indien een bestaand record opgevraagd wordt zullen de gegevens uit de DB
' gehaald en getoont worden.
If Request.QueryString("id") <> "" Then
' Er werd een id doorgegeven
intId = CType(Request.QueryString("id"), Integer)
id.Text = intId.ToString

If Not Page.IsPostBack Then
entriesById(intId)
End If
End If



If Not Page.IsPostBack Then

DropDownListCat.DataTextField = "category"
DropDownListCat.DataValueField = "category"
DropDownListCat.DataSource = GetCode()
DropDownListCat.DataBind()

End If





If lblDate.Text = "" Then
lblDate.Text = Date.Now
End If


End Sub


Private Function GetCode() As Data.DataSet
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

strSql = "SELECT * FROM entries ORDER BY category ASC;"

Dim objCmd As New OleDbCommand(strSql, objCn)
Dim objDa As New OleDbDataAdapter(objCmd)
Dim objDs As New Data.DataSet

objDa.Fill(objDs, "entries")

If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If

Return objDs

End Function




Protected Sub btnInsert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnInsert.Click
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()


If id.Text <> "" Then
' Bestaand record => update
strSql = "UPDATE entries SET titel = @titel, " _
& "text = @text, " _
& "category = @category, " _
& "date = @date, " _
& "must = @must " _
& "WHERE id = @id; "
Else
' Nieuw record => Insert

strSql = "INSERT INTO entries(titel, text, category, date, must) " _
& "VALUES(@titel,@text,@category,@date,@must);"



End If

Dim objCmd As New System.Data.OleDb.OleDbCommand(strSql, objCn)
objCmd.Parameters.Clear()






objCmd.Parameters.Add("@titel", OleDbType.VarChar)
objCmd.Parameters("@titel").Value = titel.Text
objCmd.Parameters.Add("@text", OleDbType.VarChar)
objCmd.Parameters("@text").Value = FreeText.Text
objCmd.Parameters.Add("@category", OleDbType.VarChar)
If newCat.Text = "" Then
objCmd.Parameters("@category").Value = DropDownListCat.SelectedValue
Else
objCmd.Parameters("@category").Value = newCat.Text
End If

objCmd.Parameters.Add("@date", OleDbType.Date)
objCmd.Parameters("@date").Value = CType(lblDate.Text, Date)
objCmd.Parameters.Add("@must", OleDbType.Boolean)
objCmd.Parameters("@must").Value = CheckBoxMust.Checked

If id.Text <> "" Then
' parameter voor id aanmaken
objCmd.Parameters.Add("@id", OleDbType.Integer)
objCmd.Parameters("@id").Value = CType(id.Text, Integer)
End If



Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
boodschap.ForeColor = Drawing.Color.Red
boodschap.Text = "Er trad een fout op bij het bewaren van de gegevens.<br />" & ex.Message
Exit Sub
Finally
If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If
End Try

' Indioen nodig de nieuwe id ophalen voor verdere verwerking
If id.Text = "" Then
id.Text = GetHighestId().ToString


End If

boodschap.ForeColor = Drawing.Color.Green
boodschap.Text = "De gegevens zijn bewaard."

End Sub


Private Function GetHighestId() As Integer
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

strSql = "SELECT MAX(id) AS Hoogste FROM entries;"

Dim objCmd As New OleDbCommand(strSql, objCn)
Dim objDa As New OleDbDataAdapter(objCmd)
Dim objDs As New Data.DataSet

objDa.Fill(objDs, "max")

If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If

If objDs.Tables("max").Rows.Count <> 0 Then
Return objDs.Tables("max").Rows(0).Item("Hoogste")
Else
Return -1
End If

End Function

Private Sub entriesById(ByVal intLocalId As Integer)
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

strSql = "SELECT * FROM entries WHERE id = @id;"

Dim objCmd As New OleDbCommand(strSql, objCn)
objCmd.Parameters.Add("@id", OleDbType.Integer)
objCmd.Parameters("@id").Value = intLocalId

Dim objDa As New OleDbDataAdapter(objCmd)
Dim objDs As New Data.DataSet

objDa.Fill(objDs, "entries")

If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If

' Plaats de gegevens van het prospectrecord in de tekstvakken
If objDs.Tables("entries").Rows.Count > 0 Then
id.Text = objDs.Tables("entries").Rows(0).Item("id").ToString


titel.Text = objDs.Tables("entries").Rows(0).Item("titel").ToString
FreeText.Text = objDs.Tables("entries").Rows(0).Item("text").ToString
DropDownListCat.SelectedValue = objDs.Tables("entries").Rows(0).Item("category").ToString
lblDate.Text = objDs.Tables("entries").Rows(0).Item("date").ToString
CheckBoxMust.Checked = objDs.Tables("entries").Rows(0).Item("must")

Else
boodschap.ForeColor = Drawing.Color.Red
boodschap.Text = "De gevraagde gegevens werden niet gevonden."
End If

End Sub

Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDelete.Click
intId = CType(id.Text, Integer)

Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

strSql = "DELETE FROM entries WHERE id = @id;"

Dim objCmd As New System.Data.OleDb.OleDbCommand(strSql, objCn)
objCmd.Parameters.Clear()

' parameter voor id aanmaken
objCmd.Parameters.Add("@id", OleDbType.Integer)
objCmd.Parameters("@id").Value = intId

Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
boodschap.ForeColor = Drawing.Color.Red
boodschap.Text = "Er trad een fout op bij het verwijderen van de gegevens.<br />" & ex.Message
Exit Sub
Finally
If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If
End Try

Response.Redirect("index.aspx")
End Sub

Protected Sub btnRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRefresh.Click
Response.Redirect("insertentrie.aspx")
' Formulier in status voor nieuwe ingave brengen
id.Text = ""
titel.Text = ""
FreeText.Text = ""
DropDownListCat.DataTextField = ""
lblDate.Text = ""
CheckBoxMust.Checked = False
newCat.Text = ""






End Sub





End Class

ichosting
15/08/07, 19:39
Begrijp dat het dus nog steeds niet werkt met de aangedragen opties?
Al geprobeerd met die Quotes (' ') om de vars?

gandert
16/08/07, 09:34
Probleem is opgelost.

Het probleem was:
Had in de database een veld "date" en een vel "text". Dit mag je niet gebruiken ( toch zeker niet bij oleDb) omdat het gereserveerde woorden zijn voor SQL opdrachten.