# Datensatz einfügen in MS-Access Tabelle



## Angelika_25 (20. Dezember 2007)

Hallo und zwar habe ich folgendes Problem. Ich hab gerade angefangen mich mit Visual Basic 2005 und Datenbankprogrammierung zu beschäftigen. Habe mir auch schon ein Buch darüber gekauft und mehr als einmal gegoogelt!! Also, ich habe zwei Access Tabellen und ich möchte in einem Formular Datensätze in eine Tabelle hinzufügen. In meinem Formular steht:

ID eingeben:
Benutzer eingeben: (ComboBox)

Die Access-Tabelle, in die es hinzugefügt werden soll heißt Benutzer hat folgende Werte:

Nr (AutoWert)
ID
Benutzer

In dem vb-Formular gibt es noch einen OK-Button und wenn der gedrückt wird, dann sollten die Werte in der Access Tabelle übernommen werden (der AutoWert Nr sollte automatisch um eins erhöht werden------>im Hintergrund.

Meine Datenbank ist schon eine Datenquelle des Formulars.
Ich weiß einfach nicht wie ich das hinbekommen soll und vor allem weiß ich nicht was für einen Code ich da brauche.
Bitte helft mir, ich bin echt am Verweifeln!!

Liebe Grüße


----------



## Tarik_BS (22. Dezember 2007)

Hi,

Hinter dem Button würde ich versuchen einen Private Sub mit ADO-Code zu hinterlegen, da kannst Du die Tabelle über _recordset _ansprechen, also in Deinem Fall:

 Private Sub btnOK_Click

            Dim conn As ADODB.Connection
            Dim rst As New ADODB.Recordset

            Set conn = CurrentProject.Connection

            rst.Open "tbl_Benutzer", conn, adOpenKeyset, adLockOptimistic          

            rst.Fields(0).Value = forms![Dein Formular]!ID
            rst.Fields(1).Value =forms![Dein Formular]!Benutzer

            rst.update
            rst.Close
            Set rst = Nothing
            Set conn = Nothing
End Sub

Den AutoWert wird im Hintergrund automatisch hochgesetzt, wenn Du es bei den Feldeigenschaften (Datentyp) für Nr. definiert hast.

Höffentlich, das funktioniert

Grüße aus Braunschweig


----------



## Angelika_25 (2. Januar 2008)

Also als erstes danke für die Antwort und ein frohes neues Jahr!! Bin nämlich immernoch nicht weiter...........Ich hab das jetzt mal eingefügt, aber es kommen folgende Fehler:

"ADODB.Connection" wird blau unterstrichen und als nicht definiert gesehen, das gleiche mit "ADODB.Recordset", "CurrentProject.Connection", "adOpenKeyset" und "adLockOptimistic". 

Danach kommt ja: 

rst.Fields(0).Value = forms![Dein Formular]!ID

Wenn ich da "Form2" (so heißt mein Formular) eingebe, dann geht das auch nicht, dann wird "forms" blau unterstrichen und als nicht definiert gesehen.

Was muss ich jetzt machen Bitte helft mir


----------



## ronaldo84 (2. Januar 2008)

Die Lösung von Tarik_BS ist für das einfügen eines Datensatzes aus Access heraus, also per VBA. Da du aber von VB 2005 (VB.NET) sprichst mußt du zuerst deine Tablle als Datenquelle zu deinem Projekt hinzufügen. Dies machst du über Daten->Neue Datenquelle hinzufügen. Da öffnet sich ein Assistent. Dann wählst du aus Datenbank -> Weiter-> Neue Verbindung erstellen. Dann wählst du die DB aus, gibst ggf. Anmeldedaten ein und testen dann die Verbindung. Dann die Tabellen auswählen die du dem Projekt hinzufügen willst. Danach den Assistenten fertig stellen. Hat alles geklappt, sollten eigentlich die Datenquellen angzeigt werden, wenn nicht blende diese ein. Jetzt kannst dir die einzelnen Tabellenfelder einfach per Drag & Drop auf dein Formular ziehen. Mit den DropDown neben den Tabellenspalten kannst du auswählen ob diese als Textbos, Combobox etc. auf der Form dargestellt werden sollen. 

Du hast nun ein DataSet, in diesem Daten aus deiner Tabelle gespeichert sind. Über 

```
Me.NamedesDatasetz.TableAdapter
```
Kannst du nun auf verschiedene Abfragen zugreifen, entweder vordefinierte  oder auf welche die du selbst geschrieben hast. Am eifnachsten kann man Abfragen selber schreiben, indem du auf die *.xsd-Datei in deinem Projektmappen-Explorer gehst. Dort kommst du zu einer grafischen oberfläche, die die Tabellen deines Datsets darstellen. Die Tabellen werden in Attibute und Abfragen unterteilt. Um eine neue Abfrage hinzuzufügen machst du einfach einen Rchtsklick auf eien vorhandene Abfrage uns sagst neue Abfrage erstellen. Dann einfach wider dem Assistenten folgen. 

Anmerkung: Natürlich kannst du das DataSet auch per VB-Code-Eingabe erstelltn, so übernimmt das der Assistent für dich. 

Anmerkung 2: Wenn du eine Abfrage mit einer Parameterübergabe machen willst mußt du beachten das bei Access-Datenbanken das ? als Parameter gilt, nicht wie beim MSSQL Server @Parametername.


----------



## Angelika_25 (2. Januar 2008)

Also ich habe jetzt folgenden Code: 

```
Imports System.Data.OleDb
Public Class Form3

    Private Sub btn_OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_OK.Click
        If txt_Programm_eingeben.Text = "" Then
            MsgBox("Bitte geben Sie ein Programm-Namen ein!", vbInformation)
            Me.ActiveControl = txt_Programm_eingeben

        Else
            If txt_Anzahl_Lizenzen.Text = "" Then
                MsgBox("Bitte geben Sie die Anzahl der verfügbaren Lizenzen dieses Programmes ein!", vbInformation)
                Me.ActiveControl = txt_Anzahl_Lizenzen
            Else
                If IsNumeric(txt_Anzahl_Lizenzen.Text) = False Then
                    MsgBox("Bitte geben Sie ausschließlich Zahlen bei den Lizenzen ein!", vbInformation)
                    txt_Anzahl_Lizenzen.Focus()
                    txt_Anzahl_Lizenzen.SelectAll()
                Else
                    Try
                        Dim cmd As New OleDbCommand("INSERT INTO Programm (Programm, insgLizenz) VALUES(" & txt_Programm_eingeben.Text & ", '" & txt_Anzahl_Lizenzen.Text & "')", Con)
                        Con.Open()
                        cmd.ExecuteNonQuery()
                        txt_Programm_eingeben.Text = ""
                        txt_Anzahl_Lizenzen.Text = ""
                        MsgBox("Das Programm wurde hinzugefügt!")


                    Catch ex As Exception
                        MsgBox(ex.Message)
                    Finally
                        Con.Close()
                    End Try
                    txt_Programm_eingeben.Text = ""
                    txt_Anzahl_Lizenzen.Text = ""
                    Form1.Show()
                    Me.Hide()

                End If
            End If
        End If





    End Sub
```

Das ist das gleiche wie der erste Code (im großen und Ganzen).........Was ist an diesem Code denn falsch?
Jedesmal wenn ich auf den "OK" Button klicke kommt: "Für mindestens einen erforderlichen Paramter wurde kein Wert angegeben". 
Ich habe in der Tabelle Programm: "ID" (AutoWert), "Programm" und "InsgLizenz".
Wenn ich den Code mit den Textfeldern umwandeln würde, dann würde er doch auch direkt auf den andern passen, deswegen versteh ich nicht, warum da jetzt sowas kommt.

?


----------



## ronaldo84 (2. Januar 2008)

Wo hast du denn Code jetzt her? 

Bei deinem SQL-String fehlen bei dem Paramter für Programm die ''

```
Dim cmd As New OleDbCommand("INSERT INTO Programm (Programm, insgLizenz) VALUES('" & txt_Programm_eingeben.Text & "', '" & txt_Anzahl_Lizenzen.Text & "')", Con)
```
Ausser das Programm aus einem Integer besteht.


----------



## Angelika_25 (2. Januar 2008)

Ah ok .................ich habe einen Freund von mir angerufen und der hat mir das kurz erklärt, aber das war am Telefon und diese Person hatte auch nicht allzu viel Zeit .........
Aber ich habe jetzt trotzdem noch eine Frage:
Also die veränderte Datei funktioniert jetzt super, aber nur eins versteh ich jetzt nicht. Ich habe das Office 2007 vor ein paar Tagen bekommen und habe nun ein paar mehr Funktionen in Access und wenn ich jetzt in meine Tabelle gehe (Benutzer) und dann auf das kleine +-Zeichen klicke bei der Nr, dann sehe ich das Programm, dass die Nr hat (AutoWert), dabei sollte ich ja das Programm sehen, dass die ID-Nr hat. Wisst ihr was ich meine?
Ich habe ja extra zwei Tabellen gemacht, wegen den Wiederholungsfeldern.
Schwer zu erklären


----------



## Tarik_BS (2. Januar 2008)

Hallo,

Auch Dir ein frohes und gesundes Neujahr!

Sorry, ich habe es irgendwie übersehen, dass Du VB.Net meintest:-(
Natürlich, galt meine Lösung dem alten guten VBA  .
Freue mich, dass trotzdem alles geklärt werden könnte.

Als Info für Datenbankzugriff über ADO.Net würde ich den folgenden Link empfehlen:
http://www.galileocomputing.de/open...l_26-002.htm#5e6e282e4e7eef8eddb35540b9ef6273

Wenn Du ein anderes DBMS als MS SQL Server benutzt, sollte man darauf achten, dass  ein richtiger Datenprovider eingesetzt wird (OleDB oder ODBC statt SqlClient).

Grüße aus Braunschweig


----------

