[Visual Basic] Verbindung mit Access - Daten Aktualisieren

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von liftishifty, 11. Oktober 2012 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 11. Oktober 2012
    Verbindung mit Access - Daten Aktualisieren

    Hey ho,

    also folgendes ich habe bisher immer in excel (vba) programmiert und ein paar einfache Sachen in
    Visual Basic 2010 Express.

    Nun wollte ich mich mal in Visual Basic an eine Datenbank Anbindung wagen und komme irgendwie nicht weiter.

    Habe eine Access Datenbank erstellt und in Visual Basic erfolgreich mit dem Assistenten eine Verbindung zu dieser hergestellt.

    Habe nun eine Form auf der sich ein Datagridview befindet. Die Daten aus der Access Datenbank werden mit

    Code:
    Me.Tbl_LieferscheineTableAdapter.Fill(Me.AbholportalDataSet.tbl_Lieferscheine)
    im Datagridview angezeigt.

    Nun möchte ich aber auch Datensätze hinzufügen bzw ändern aber irgendwie klappt das nicht so ganz. Ich bin soweit das ein neuer Datensatz im DGV angezeigt wird, auch nach dem schließen von VB aber leider werden die Daten in Access nicht aktualiesiert.

    Über google habe ich zwar schon eine Menge gefunden aber irgendwie scheint das alles viel komplizierter zu sein als das was ich bisher gemacht habe.

    Hier mal mein code den ich bisher habe um einen neuen Datensatz hinzuzufügen:

    Code:
    Dim objZeile As DataRow
    objZeile = AbholportalDataSet.Tables("tbl_Lieferscheine").NewRow()
    
     
    With objZeile
     .Item("Lieferscheinnummer") = TextBox2.Text
    End With
    
    AbholportalDataSet.Tables("tbl_Lieferscheine").Rows.Add(objZeile)
    
    Tbl_LieferscheineTableAdapter.Update(Me.AbholportalDataSet.tbl_Lieferscheine)
    
    
    Unter die letze Zeile müsste meiner Meinung nach jetzt irgendein Befehl hin um auch die Datenbank in Access zu aktualisieren aber ich komme einfach nicht drauf

    Weiss da vielleicht jemand von euch Rat?

    Bin für jede Hilfe dankbar!!
     
  2. 13. Oktober 2012
    Zuletzt bearbeitet: 13. Oktober 2012
    AW: Verbindung mit Access - Daten Aktualisieren

    Hi!

    Eine Frage vorweg: Hast du eine Tabelle die du bearbeiten möchtest oder sind derzeit mehrere vorhanden? Weil sonst eigentlich ein Datatable reichen würde anstatt ein DataSet.

    Datenbankconnectionstring sieht zB. so aus:
    Code:
    Dim thisConnection As New SqlConnection("server=(local)\SQLEXPRESS;" & _
     "integrated security=sspi;database=MyDatabase")
    Normalerweise werden diese "Aktualisierungen" unter SQL Statements zB.: so aussehen:

    Code:
    Dim updateSql As String = "UPDATE Lieferscheine SET Nr = 1234"
    Der oben genannte Befehl ist der "Aktualisierungsbefehl".
    Dieser Aktualisierungsstring wird nun in der Tabelle gespeichert:
    Code:
    Dim da As New SqlDataAdapter
    Dim updateCommand as new SqlCommand(updateSql, SqlConnection)
    da.UpdateCommand = updateCommand
    
    bzw.:
    
    updateCommand.ExecuteNonQuery()
    Das was du machst, ist eigentlich nur das Speichern in einem DataSet. Die Daten werden sich wahrscheinlich auch dort drin befinden, aber halt noch nicht in der Tabelle, sichtbar, selbst.

    Bekommst du eigentlich eine Fehlermeldung / Exception oder ähnliches?

    Vielleicht hilft das hier weiter:
    Execute Update command with parameters : SqlCommand Update « Database ADO.net « VB.Net
     
    1 Person gefällt das.
  3. 15. Oktober 2012
    AW: Verbindung mit Access - Daten Aktualisieren

    Erstmal danke für deine Antwort!
    Grundsätzlich ist das mit dem SQL klar geworden aber bei nem Datagrid versteh ich nicht wie ich das ganze dann wirklich updaten soll mittels SQL.

    Also grundsätzlich sind mehrere Tabellen vorhanden und es müssen später auch Datensätze von der einen Tabelle in die andere Kopiert werden etc.

    Habe nun allerdings die komplette Verbindung zur Datenbank händisch vorgenommen, weil mich das mit dem Assistenten nur noch mehr verwirrt hat und ich auch genau wissen möchte was ich da eigentlich mache.

    Habe nun aber immernoch das Problem mit dem Update. Ich weiss dass ich irgendwie ein Updatecommand generieren muss aber so ganz will das noch nicht.
    Bisher werden die Daten ins Gridview eingelesen. Innerhalb des Gridview möchte ich jetzt die Daten mit zb einem Doppelklick in das jeweilige Feld ändern und anschließend wieder in der Datenbank abspeichern. Klappt aber nicht so ganz leider

    Hier mal mein bisheriger Code.
    Code:
    
    Public Class Form1
    
     Public dba As New OleDb.OleDbDataAdapter
     Dim con As New OleDbConnection
     Dim cmd As New OleDbCommand
    
    
    
    
     Dim datas As New DataSet
     Dim datav As DataView
    
    
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
    
     con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Users\Administrator\Documents\Visual Studio 2010\Projects\Abholmanager\Abholportal.accdb;"
    
     
     cmd.Connection = con
    
    
     dba = New OleDb.OleDbDataAdapter("select * from tbl_Lieferscheine", con)
    
    
     Try
     con.Open()
    
     dba.Fill(datas, "tbl_Lieferscheine")
    
     datav = datas.Tables("tbl_Lieferscheine").DefaultView
     DataGridView1.DataSource = datav
    
     DataGridView1.Columns("Belegart").Visible = False
     DataGridView1.Columns("Firmenname2").Visible = False
     DataGridView1.Columns("Firmenname3").Visible = False
     DataGridView1.Columns("Ansprechpartner").Visible = False
    
    
     DataGridView1.Columns("Lieferscheinnummer").DisplayIndex = 1
     DataGridView1.Columns("Kundennummer").DisplayIndex = 2
     DataGridView1.Columns("Artikelnummer").DisplayIndex = 3
     DataGridView1.Columns("Beleggruppe").DisplayIndex = 4
     DataGridView1.Columns("Gewicht").DisplayIndex = 5
     DataGridView1.Columns("Firmenname").DisplayIndex = 6
     DataGridView1.Columns("Straße").DisplayIndex = 7
     DataGridView1.Columns("Postleitzahl").DisplayIndex = 8
     DataGridView1.Columns("Ort").DisplayIndex = 9
     DataGridView1.Columns("Land").DisplayIndex = 10
     DataGridView1.Columns("Wa-Datum").DisplayIndex = 11
    
     DataGridView1.AutoResizeColumns()
    
    
    
     'con.Close()
    
     Catch ex As Exception
     MessageBox.Show(ex.Message)
     End Try
    
    
     End Sub
    
     
    'Kann ignoiert werden hier wird nur gefiltert
     Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
     If TextBox1.Text = "" Then
     datav.RowFilter = ""
    
     Else
     datav.RowFilter = String.Concat("Lieferscheinnummer = ", TextBox1.Text)
     End If
     End Sub
    
    
    
    'Das hier soll die Update funktion sein wo ich nicht weiterkomme. Momentan bekomme ich die Fehlermeldung dass für mindestens einen erforderlichen Parameter kein Wert angegeben wurde!??Bin langsam echt am verzweifeln.:( :( 
     
     Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    
     Dim cmdb As OleDbCommandBuilder = New OleDbCommandBuilder(dba)
    
     dba.Update(datas, "tbl_Lieferscheine")
    
    
     
     End Sub
    
    End Class
    
    Aber vielen Dank schonmal hast natürlich ne Bewertung bekommen
     
  4. 15. Oktober 2012
    Zuletzt bearbeitet: 15. Oktober 2012
    AW: Verbindung mit Access - Daten Aktualisieren

    kann dir vorerst auch nur C# Code anbieten aus nem Projekt von mir
    Wenn ich morgen Zeit finde, versuche ich das mal nach VB zu portieren, solltest du es bis dahin nicht schon selbst geschafft haben
    Code:
    public static String connString = @"Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Users\Administrator\Documents\Visual Studio 2010\Projects\Abholmanager\Abholportal.accdb;";
    private static String query = "select * from tbl_Lieferscheine";
    
     dAdapter = new OleDbDataAdapter(query, connString);
     OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(dAdapter);
     dTable = new DataTable();
    [COLOR="Lime"]//rowsLoaded gibt die Anzahl der eingelesenen Datensätze an[/COLOR]
     rowsLoaded = dAdapter.Fill(dTable);
     bSource = new BindingSource();
     bSource.DataSource = dTable;
    [COLOR="Lime"]//Die Datensätze werden an die BindingSource gebunden und anschließend im DataGridView angezeigt[/COLOR]
    [COLOR="Lime"]//Über bSource.Filter lässt sich auch ein beliebiger Filter anwenden[/COLOR]
     mainGridView.DataSource = bSource;
    
    Innerhalb des GridViews lassen sich die Daten jetzt beliebig manipulieren

    Bei der Update Funktion habe ich eine einfache Kontrolle eingebaut, um zu sehen, ob und wie viele Datensätze geändert wurden
    Code:
    
    int updatedRows = updateData();
    
    [COLOR="Lime"]//Kontrolle des updateData-Ergebnisses[/COLOR]
    [COLOR="Lime"]//Wenn -1 zurückgegeben wird, konnten keine Daten gespeichert werden[/COLOR]
     if (updatedRows == -1)
     {
     MessageBox.Show("Es wurden noch keine Daten geladen!", "Achtung!", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
     else
     {
     if (updatedRows == 0)
     MessageBox.Show("Sie haben keine Änderungen vorgenommen!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
     else
     MessageBox.Show(updatedRows + " Zeile(n) verändert!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
    
    Und hier der Code der Methode updateData:
    Code:
    private int updateData()
     {
     if (bSource != null && dAdapter != null && dTable != null)
     {
     return dAdapter.Update(dTable);
     }
     return -1;
     }
    
    Die If-Abfrage kannst auch weg lassen, die brauchte ich nur zur weiteren Kontrolle, ob überhaupt schon Daten geladen wurden

    Vllt kannst du damit ja was anfangen, ansonsten kannst du mir gerne mal dein Projekt zukommen lassen und ich schau mal, was ich noch zusammen kriege

    Edit// Was mir gerade noch einfällt, bei mir lief die Update Funktion anfangs nicht, da ich in meiner Datenbank keine Spalte mit einem Primärschlüssel hatte
    Ich weiß jetzt nicht wie deine Datenbank aufgebaut ist, aber im Zweifelsfall eine Spalte am Anfang einfügen, als Primärschlüssel setzen und Zahlen automatisch und ohne Duplikate vergeben lassen

    Für Die Update Funktion muss die Zuordnung jeder Reihe eindeutig sein, daher der Primärschlüssel
     
  5. 16. Oktober 2012
    AW: Verbindung mit Access - Daten Aktualisieren

    Hey,

    vielen Dank für deine Hilfe. Habe es jetzt soweit auch hinbekommen. Einfacher war es am ende doch mit dem Assistenten

    Über den Bindingnavigator kann man dann ganz einfach die Befehle: Save,Delete etc. ausführen.
    Macht die ganze Sache dann doch erheblich leichter.

    Aber trotzdem vielen vielen Dank für deine mühe. Weiss ich zu schätzen :] :]
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.