Page 1 of 1

Update database VB .NET

Posted: Tue Nov 23, 2004 7:29 pm
by Dimitris
Για άλλη μια φορά έχω κόλλημα με την VB :cry: .Έχω μια βάση σε access με 2 πεδία.Έστω ότι έχω μια φόρμα με δυο textboxes στα οποία εισάγω τιμές,και όταν πατάω ένα κουμπί εισάγει τις τιμές αυτές στην βάση.Ο κώδικας είναι πολύ απλός αλλά μου πετάει λάθος.Αν μπορέσει κάποιος να με βοηθήσει θα με σώσει!!!!!!!!

Code: Select all

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim con As New OleDbConnection()
            con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\My Documents\db.mdb;"
            Dim com As New OleDbCommand("select * from login", con)
            Dim adapter As New OleDbDataAdapter(com)
            Dim builder As New OleDbCommandBuilder(adapter)
            con.Open()
            Dim data As New DataSet()
            adapter.Fill(data, "login")
            Dim orow As DataRow = data.Tables(0).NewRow
            orow.Item(0) = txtname.Text
            orow.Item(1) = txtpwd.Text
            data.Tables(0).Rows.Add(orow)
            adapter.Update(data, "login")
            MsgBox("User " & txtname.Text & " added in the database.", MsgBoxStyle.Information, "User addition completed succesfully.")
            txtname.Text = ""
            txtpwd.Text = ""
            Exit Sub
            con.Close()
        Catch e1 As Exception
            MsgBox(e1.ToString)
        End Try
    End Sub
Το λάθος που πετάει είναι:

Code: Select all

System.Data.OleDb.OleDbException: Syntax error in INSERT INTO statement.
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
   at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
   at WindowsApplication19.Form1.Button1_Click(Object sender, EventArgs e) 
   in D:\My Documents\Visual Studio Projects\WindowsApplication19\Form1.vb:line 105

Posted: Sat Mar 05, 2005 1:57 pm
by Skeftomilos
Μη χρησιμοποιείς CommandBuilder, είναι buggy. Για παράδειγμα εάν ο πίνακας έχει ένα πεδίο με όνομα Date, ο CommandBuilder δε θα βάλει αγκύλες γύρω από το [Date] το οποίο είναι δεσμευμένη λέξη στην Access, και έτσι αντί για update θα πάρεις μία exception σαν την παραπάνω. Χρησιμοποίησε χειροποίητα αντικείμενα Command για το Insert, Update και Delete για να ξέρεις τι σου γίνεται.
:smile:

Posted: Sat Mar 05, 2005 2:51 pm
by Dimitris
Στο συγκεκριμένο πρόβλημα το λάθος ήταν αλλού. Μέσα στην βάση db.mdb είχα ένα πεδίο που ονομαζόταν password.Αυτό δημιουργούσε το πρόβλημα διότι η access έχει κάποιες δεσμευμένες λέξεις τις οποίες δεν επιτρέπει να τις χρησιμοποιείς σαν ονόματα πεδίων. Εκτός από την λέξη password υπάρχουν και κάποιες άλλες λέξεις τις οποίες όμως δεν τις θυμάμαι (έχει περάσει αρκετός καιρός από τότε που έκανα αυτή την εργασία......)

Posted: Sat Mar 05, 2005 2:55 pm
by Dimitris
Τώρα που διάβασα καλύτερα την απάντησή σου κατάλαβα ότι μιλάμε για το ίδιο πράγμα :lol: .Αυτό που έκανα πάντως ήταν να χρησιμοποιώ greeklish για ονόματα πεδίων και έτσι το έλυσα το πρόβλημα