Data naar database schrijven

Status
Niet open voor verdere reacties.

Tariq

Gebruiker
Lid geworden
27 okt 2008
Berichten
109
Beste Helpmij.nl

(VB.NET2008)

Ik was bezig met een project. Ik gebruikte eerst Microsoft Acces om een database te maken voor mijn programma. Dit werkte allemaal fijn, maar ik wilde het iets aanpassen. Ik wilde een zoekbox en na het plaatsen van een vraag hier kreeg ik die. Alles werkt nu perfect (data ophalen, lezen). Alleen kan ik geen data meer schrijven naar de database. (SQL-query) Voorheen gebruikte ik onderstaande code:

Code:
Public Class MainForm
    Private m_cnADONetConnection As New OleDb.OleDbConnection()
    Private m_daDataAdapter As OleDb.OleDbDataAdapter
    Private m_cbCommandBuilder As OleDb.OleDbCommandBuilder
    Private m_dtContacts As New DataTable
    Private m_rowPosition As Integer = 0


    Private Sub MainForm_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        m_cnADONetConnection.Close()
        m_cnADONetConnection.Dispose()
    End Sub



    Private Sub ShowCurrentRecord()
        If m_dtContacts.Rows.Count = 0 Then
            txtContactName.Text = ""
            txtState.Text = ""
            Exit Sub
        End If

        txtContactName.Text = _
           m_dtContacts.Rows(m_rowPosition)("ContactName").ToString()
        txtState.Text = _
           m_dtContacts.Rows(m_rowPosition)("State").ToString()
    End Sub


    Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim cnADONetConnection As New OleDb.OleDbConnection()

        m_cnADONetConnection.ConnectionString = _
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\Contacts.mdb"

        m_cnADONetConnection.Open()

        m_daDataAdapter = New OleDb.OleDbDataAdapter("Select * From Contacts", m_cnADONetConnection)

        m_cbCommandBuilder = New OleDb.OleDbCommandBuilder(m_daDataAdapter)

        m_daDataAdapter.Fill(m_dtContacts)

        Me.ShowCurrentRecord()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Move to the first row and show the data.
        m_rowPosition = 0
        Me.ShowCurrentRecord()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ' If not at the first row, go back one row and show the record.
        If m_rowPosition > 0 Then
            m_rowPosition = m_rowPosition - 1
            Me.ShowCurrentRecord()
        End If

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        ' If not on the last row, advance one row and show the record.
        If m_rowPosition < (m_dtContacts.Rows.Count - 1) Then
            m_rowPosition = m_rowPosition + 1
            Me.ShowCurrentRecord()
        End If

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        ' If there are any rows in the data table, move to the last and show
        ' the record.
        If m_dtContacts.Rows.Count > 0 Then
            m_rowPosition = m_dtContacts.Rows.Count - 1
            Me.ShowCurrentRecord()
        End If

    End Sub

    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
        ' If there is existing data, update it.
        If m_dtContacts.Rows.Count <> 0 Then
            m_dtContacts.Rows(m_rowPosition)("ContactName") = txtContactName.Text
            m_dtContacts.Rows(m_rowPosition)("State") = txtState.Text
            m_daDataAdapter.Update(m_dtContacts)
        End If
    End Sub

    Private Sub btnAddNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddNew.Click
        Dim drNewRow As DataRow = m_dtContacts.NewRow()

        drNewRow("ContactName") = txtNewContactName.Text
        drNewRow("State") = txtNewState.Text
        m_dtContacts.Rows.Add(drNewRow)
        m_daDataAdapter.Update(m_dtContacts)
        m_rowPosition = m_dtContacts.Rows.Count - 1
        Me.ShowCurrentRecord()

    End Sub

    Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
        ' If there is data, delete the current row.
        If m_dtContacts.Rows.Count <> 0 Then
            m_dtContacts.Rows(m_rowPosition).Delete()
            m_daDataAdapter.Update(m_dtContacts)
            m_rowPosition = 0
            Me.ShowCurrentRecord()
        End If

    End Sub
End Class
Maar doordat er een ander soort database gebruikt wordt, werkt dit niet meer. Om de database te openen en af te lezen gebruik ik deze code:

Code:
Public Class Form1

    'Maak de ODBC Database variable
    Dim ODBC_Connectie As Odbc.OdbcConnection

    'Geef aan welke databron je gaat gebruiken en geeft het volledige pad naar de database op
    'Database staat in de \ZoekBox\ZoekBox\bin\Debug map
    Dim Connectie_String As String = "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Temp\db.mdb"

    'Creeer de Dataset variable
    Public ds As New DataSet

    Private Sub Me_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.BackColor = My.Settings.bc
        Me.ForeColor = My.Settings.tc
        Me.Button1.BackColor = My.Settings.buc
        Me.Button2.BackColor = My.Settings.buc

        'Maak de huidige dataset leeg
        ds.Clear()

        'Ga naar de Sub 
        Haal_SQL_Query_Op()
    End Sub

    'Zodra er een toets wordt ingedrukt in het tekstkader wordt deze Sub geactiveerd
    Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        'Maak de huidige dataset leeg
        ds.Clear()

        'Ga naar de Sub 
        Haal_SQL_Query_Op()

    End Sub

    Public Sub Haal_SQL_Query_Op()

        'Verbind met de database volgens de opgegeven databron
        ODBC_Connectie = New Odbc.OdbcConnection(Connectie_String)

        'Open de database
        ODBC_Connectie.Open()

        'De SQL 'zoekfunctie' zoek naar alles in Naam of Achternaam waar de tekst van de Textbox1 in voorkomt.
        Dim SQL_Query As String = "SELECT * FROM Adresgegevens WHERE (Naam LIKE '%" & TextBox1.Text & "%' OR AchternaamLIKE '%" & TextBox1.Text & "%') ORDER BY Naam, Achternaam;"

        'Open de dataadapter om deze daarna te vullen met SQL Querydata
        Dim da = New Odbc.OdbcDataAdapter(SQL_Query, ODBC_Connectie)
        Label1.Text = "found " & da.Fill(ds, "Naam") & " records"

        'Vul de DataGrid met data uit de DataSet
        DataGridView1.DataSource = ds
        DataGridView1.DataMember = "Naam"

        'Sluit de database
        ODBC_Connectie.Close()
    End Sub

Wat moet ik doen (welke code moet ik gebruiken) om wél weer naar de nieuwe database te kunnen schrijven (die met de SQL-query?)

Alvast bedankt,

Tariq
 
Als toevoeging:

Bij code tabel 1 geeft bij zowel het toevoegen van een row als het bewerken van een row een error op:
Code:
m_daDataAdapter.Update(m_dtContacts)
Met als bericht:
Code:
OleDbException was unhandled;
De instructie INSERT bevat een syntaxisfout.

Misschien dat dit iets kan helpen.
 
Vraag is opgelost.

Handmatig een eigen database gemaakt en stuk voor stuk alles ingevoegd. Werkt nu.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan