Σου γράφω παρακάτω τον κώδικα αλλά πιστεύω πως το προσεγγίζεις προγραμματιστικά λάθος.
Το τηλέφωνο που κάνεις χρήση για να βρείς τον πελάτη δεν είναι μοναδικό.
Θα μπορούσες να έχεις 2 πελάτες που καλούν από το ίδιο κτίριο μιας εταιρίας, τότε θα είχαν διαφορετικά στοιχεία αλλά το ίδιο τηλέφωνο.
Στην περίπτωση σου θα διέγραφες τα στοιχεία του πρώτου διότι παίρνεις πάντα την πρώτη εγγραφή και την κάνεις update με τα στοιχεία που προφανώς συλλέγεις από την φόρμα.
Θα ήταν πιο εύκολο να χρησιμοποιήσεις Typed Dataset.
Public Sub UpdateCustomer(ByVal phone As String, _
ByVal firstname As String, _
ByVal surName As String, _
ByVal address As String, _
ByVal city As String, _
ByVal job As String)
Dim connection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyBase.MDB")
Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
'Δημιουργία SelectCommand, καλύτερα να μην κάνεις χρήση το αστεράκι * στο Select εφόσον γνωρίζεις τα πεδία.
Dim command As OleDbCommand = New OleDbCommand("SELECT * FROM Customers WHERE Phone = ?", connection)
' Προσθήκη παραμέτρους στο SelectCommand
command.Parameters.Add("@Phone", OleDbType.VarWChar, 15).Value = phone
adapter.SelectCommand = command
' Δημιουργία UpdateCommand.
command = New OleDbCommand("UPDATE Customers SET Surname = ?, Firstname = ?, Address = ?, City = ?, Job = ? WHERE Id = ?", connection)
' Add the parameters for the UpdateCommand.
command.Parameters.Add("@Surname", OleDbType.VarWChar, 32, "Surname")
command.Parameters.Add("@Firstname", OleDbType.VarWChar, 32, "Firstname")
command.Parameters.Add("@Address", OleDbType.VarWChar, 64, "Address")
command.Parameters.Add("@City", OleDbType.VarWChar, 64, "City")
command.Parameters.Add("@Job", OleDbType.VarWChar, 64, "Job")
command.Parameters.Add("@Id", OleDbType.Integer, 4, "Id")
adapter.UpdateCommand = command
'Dim dataset = New DataSet
Dim table As New DataTable
adapter.Fill(table)
'Get first row in table.
If table.Rows.Count > 0 Then
Dim row As DataRow = table.Rows(0)
row("Surname") = surName
row("Firstname") = firstname
row("Address") = address
row("City") = city
row("Job") = job
adapter.Update(table)
row.AcceptChanges()
End If
End Sub
Θα μπορούσες να μην κάνεις χρήση DataTable και να εκτελέσεις κατευθείαν το updateCommand.
Μπλουγουράς Γιάννης
Wizcom O.E.