Access Datensatz via Formular erstellen

Hallo Leute,
Es dreht sich um Folgendes: Ich habe in Access 2007 eine Tabelle namens Kundeninformationen mit folgenden Spalten erstellt: IDKunde(AutoWert, diese Spalt ist Primärschlüssel), Nachname, Vorname, StraßeHausnummer, Postleitzahl, Ort, Telefon privat, Mobiltelefon, email.
Zudem habe ich ein Formular konstruiert, das folgende ungebundene Textfelder erhält: Nachname, Vorname, StraßeHausnummer, Postleitzahl, Ort, Telefon privat, Mobiltelefon, email. Zusätzlich befindet sich auf dem erwähnten Formular ein Button namens „Kunden hinzufügen“, mit dem es mir per Klick gelingen soll die in das Formular eingetragenen Kundendaten als einen Datensatz in der Tabelle „Kundeninformationen“ hinzuzufügen. Den Button „Kunden hinzufügen“ habe ich natürlich mit einem VBA-Befehl versehen, dessen Code wie folgt ausschaut:

Private Sub Befehl18_Click()
On Error GoTo Err_Befehl18_Click

Dim db As Database
Dim rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset(„Kundeninformation“)

rs.AddNew
rs!Nachname = Forms.Formular1.Text0.Value
rs!Vorname = Forms.Formular1.Text2.Value
rs!StraßeHausnummer = Forms.Formular1.Text4.Value
rs!Postleitzahl = Forms.Formular1.Text6.Value
rs!Ort = Forms.Formular1.Text8.Value
rs!Telefonprivat = Forms.Formular1.Text10.Value
rs!Mobiltelefon = Forms.Formular1.Text12.Value
rs!email = Forms.Formular1.Text14.Value
rs.Update

Exit_Befehl18_Click:
Exit Sub

Err_Befehl18_Click:
MsgBox Err.Description
Resume Exit_Befehl18_Click

End Sub

Wenn ich nun allerdings auf den Button klicke, wird der neue Datensatz leider nicht in der Tabelle „Kundeninformationen“ hinzugefügt. Es passiert schlichtweg gar nichts! Könnte mir bitte jemand einen Rat geben, was ich falsch gemacht haben könnte??!!

Ich bin für jeden Tipp dankbar.

Mit den besten Grüßen,
Patrick

Hallo Patrick,

vorweg ein paar Tipps:
Da sich der Button im Formular befindet, brauchst du „Form.Formular2.“ nicht vorweg stellen. Du kannst direkt mit „Text0.Value“ auf die Textfelder zugreifen.
Ich würde alle Controls im Formular und das Formular sinnvoll benennen, damit man den Code besser versteht:
„rs!Nachname = txtNachname.Value“
Dadurch behälst du den Überblick, was wo verwendet wird.

Zu deinem Problem:
Ich konnte bei mir mit deinem Code Datensätze hinzufügen. Du musst die Tabelle aber erneut öffnen oder mit F5 aktualisieren, damit du die Einträge siehst.
Du könntest das auch über eine SQL-Abfrage lösen:

Dim strSQl As String

strSQl = „INSERT INTO Kundeninformation (Nachname, Vorname) VALUES(“ & txtNachname.Value & ", " & txtVorname.Value & „);“
debug.print strSQL
CurrentDb.Execute strSQl

Dabei musst du dann nur die weiteren Spalten in die Abfrage einbauen. Die Debug-Anweisung gibt dir den SQL String im Direktfenster (Strg+D) aus. Dadurch kannst du beim Entwickeln sehen, was in strSQL steht und dann in die DB geschrieben wird.

Ich hoffe das bringt dich weiter!

Gruß,
Vandroy

Hallo Patrick,

leider muss ich Dir sagen dass mich diese Frage zum jetzigen Zeitpunkt etwas überfordert.
Seit ungefähr 12 Jahren arbeite ich nicht mehr mit Access habe das vorher zwar beruflich gemacht aber 1. bin ich schon 12 Jahre Rentner und 2. ist die Access Zeit leider lange abgelaufen. Ich benutze heute mysql.
Gerne helfe ich Dir jedoch weiter wenn Du keine ausreichende andere Antwort erhälst.
Ich müsste dann nämlich erst Access laden um kurz dies nachvollziehen zu können.
Möglich wäre dies zwar aber etwas aufwendig.
Ich hoffe also Du wirst noch woanders fündig, ansonsten musst Du Dich noch einmal melden.

Mit freundlichem Gruss

friwem

Hallo Patrick,

hab deine Anwendung bei mir nachgestellt und es hat einwandfrei funktioniert. Der einzige Eingriff, den ich vornehmen musste:

In meiner Tabelle Kundeninformation hab ich die Spalte „Telefon privat“ ohne Leerzeichen geschrieben, da das Recorset ebenfalls ohne Leerzeichen angegeben wurde.

Sonst funktioniert dein VBA bei mir einwandfrei.

schönen Gruß aus dem Berchtesgadener Land
Stefan

Hallo Vandroy,
Lieben Dank für die äußerst schnelle und überwältigend kompetente Antwort. Leider scheint bei mir immer noch etwas nicht zu stimmen. Allerdings zweifle ich aufgrund des positiven Feedbacks zu meinem Code jetzt eher an der richtigen Implementierung desselbigen. Ich würde dir mal gerne kurz die Schritte auflisten, die ich durchgeführt habe:

  1. Ich habe in der Entwurfsansicht des Formulars „Neuen Kunden hinzufügen“ auf den Befehlsbutton „Kunden hinzufügen“ geklickt, sodass das Eigenschaftenblatt erscheint
  2. Unter dem Reiter „Ereignis“ des Eigenschaftenblattes habe ich in der Zeile „Beim Klicken“ auf die drei Punkte am rechten Rand geklickt und daraufhin den Code-Generator ausgewählt
  3. Ich habe den bereits oben angegeben VBA-Code eingegeben.
  4. Ich habe den Code-Generator wieder geschlossen.

Das waren die Schritte, die ich gemacht habe. Ich vermute allerdings, dass der Button noch nicht mit meinem programmierten Befehl belegt ist.

Besten Gruß,
Patrick

Hallo Patrick,
sorry, Access kenn ich mich gar nicht aus und bei Userforms bin ich gerade erst am Anfang.
Hast Du das ggf. ins Forum gestellt?
Wünsch Dir auf jeden Fall viel Erfolg.
MfG MwieMichel

Hallo Patrick,

dein Code ist funktionsfähig. Wenn auch mit Schönheitsfehlern aber so wie du in gepostet hast funktioniert er. Ich habe eine neue Access 2007 Datenbank mit den Felder Nachname und Vorname angelegt, Deinen Code per copy and paste übernommen, die nicht benötigten Werte auskommentiert und alles funktioniert.
Du mußt natürlich die Tabelle, z.B. mit [F5] aktualsieren um den neu hinzugefügten Datensatz sehen zu können. Aber es funktioniert.

Gruß
Andreas

Ich danke allen Beteiligten für die bisherige Mühe und schnelle Rückmeldung. Aber das Problem steckt offensichtlich nicht im Code. Ich weiß jedoch auch beim besten Willen nicht, wo sich der Fehler sonst eingeschlichen haben könnte. Wie man sehen kann, habe ich nun sicherheitshalber mal Vandroys Beitrag angehongen, wie genau ich Schritt für Schritt beim Erstellen des Codes vorgegangen bin. Wäre wirklich super, wenn mir jemand hier einen Fehler aufdecken könnte.

Beste Grüße

Ich würde Dir empfehlen, eine neue Datenbank anzulegen und das einfach nochmal zu versuchen.
Bei mir hat das nur 2-3 min. gedauert.
Dann weißt Du vielleicht mehr.

Gruß Andreas.

Möchten Sie mir die Datenbank an [email protected] zusenden? Dann kann ich es mir einmal ansehen.
MfG
Christian Knell

Sorry, ich bin Access-Anfänger und VBA weiß ich nur, wie man es schreibt :wink:

Gruß Gaby

Hallo Patrick,

schreib in deinen Code mal in eine beliebige Zeile „Msgbox 1“. Dann solltest du eine Messagebox mit dem Inhalt 1 kriegen, wenn du auf den Button klickst. Dann kannst du dir sicher sein, dass der Code ausgeführt wird. Oder eben auch nicht.
Ebeso solltest du mit einem Rechts-Klick und dann im Kontextmenü uber „Ereignis“ in VVBA-Editor gelangen und dann direkt zu dem Code, den du geschrieben hast.

Wenn das alles passt, dann könnte ich mir nur noch vorstellen, dass entweder deine Makro-Sicherheit deinen Code blockt oder aber die Tabelle oder das Formular über seine Eigenschaften das Anfügen von Daten unterbindet.

Solltest du nicht selber auf eine Lösung kommen, son kanst du mir die Datenbank ja mal zuschicken, NACHDEM du alle persönlichen Daten aus den Tabellen gelöscht hast und evtl nur Dummy-Daten einträgst. Dann kann ich schneller die einzelnen Optionen durchgehen und dir hoffentlich helfen.

Gruß,
Vandroy

Hallo Patrick

Ich habe dies mal kurz ausprobiert. Ich habe zwar nur
Access 2000, da ich meistens mit Visual Basic Studio
programmiere, aber das Prinzip sollte gleich sein:

  1. Verweis auf Microsoft DAO setzen
  2. bei As Database ändern in As DAO.Database
  3. bei As Recordset ändern in As DAO.Recordset
    Dann sollte es funktionieren zumindestens mit Access 2000.

Private Sub Befehl18_Click()
On Error GoTo Err_Befehl18_Click
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset(„Kundeninformation“)
rs.AddNew
rs!Nachname = Forms.Formular1.Text0.Value
rs!Vorname = Forms.Formular1.Text2.Value
rs!StraßeHausnummer = Forms.Formular1.Text4.Value
rs!Postleitzahl = Forms.Formular1.Text6.Value
rs!Ort = Forms.Formular1.Text8.Value
rs!Telefonprivat = Forms.Formular1.Text10.Value
rs!Mobiltelefon = Forms.Formular1.Text12.Value
rs!email = Forms.Formular1.Text14.Value
rs.Update

Exit_Befehl18_Click:
Exit Sub

Err_Befehl18_Click:
MsgBox Err.Description
Resume Exit_Befehl18_Click

End Sub

Gruß Wolfgang

Hallo Patrick,
vielleicht sollte
Set rs = db.OpenRecordset(„Kundeninformation“)
so aussehen:
Set rs = db.OpenRecordset(„Kundeninformationen“)
Ansonsten habe ich noch keinen Fehler gefunden.
Bester Gruß,
Roland

Ich habe die Datenbank nun nochmals vollständig neue erstellt, wie Andreas es vorgeschlagen hat. Und es funktioniert=)
An alle, die sich an meinem Anliegen engagiert haben, möchte ich vielmals danken. Der Erfolg dieser Plattform lebt schließlich von der Hilfsbereitschaft seiner User. In diesem Sinne: Ihr seid eine Bereicherung für die Community =)

Hallo science for life!

Zunächst: Mit welcher Zugriffs-Methode möchtest Du auf die Daten (ADO, DAO?) => Sind die Verweise vorhanden?

Es müßte m. E.

Dim db As DAO.Database bzw. ADO.Database
Dim rs As DAO.Recordset bzw. ADO.Recordset

heissen

Wird das Click-Ereignis ausgeführt?
Zum Testen mal mit Breakpoint setzen und mit F8 durch-debuggen.
Vielleicht heisst der Button ja schon anders :wink:
(ist mir auch schon passiert)

Ansonsten stimmt Dein Code.

Ich würde es zwar mit Direkt-SQL lösen, also:
DoCmd.RunSQL „INSERT INTO Tabelle (Feld1, Feld2, …) VALUES (Wert1, Wert2, …);“
Die ID-Spalte brauchst Du nicht anzugeben, String-Werte in Hochkommas (’) einschließen.

und vorher
Docmd.Warnings False
damit keine Anzeige „Wollen Sie … einfügen“ kommt.

Gruß
Harry

Hallo Patrick !

Kommt zwar etwas spät …
Mir fehlt in deinem Coding ein rs.close.
Solltest du das Problem noch haben, versuche mal diesen
nach dem rs.update noch einzubauen.

Gruß

Christof

Hallo Patrick,

leider habe ich deine Frage erst jetzt gelesen. Ich bin mir nicht sicher, ob es 2007 so geschrieben wird, da ich nicht damit arbeite:

Forms.Formular1.Text0.Value

wäre z.B. in 2003

Forms!Formular1!Text0.Value

Wenn du nicht sicher bist, benutze doch zuvor Variablen und schau, ob der Inhalt in die Variable geschrieben wird. Du kannst dazu mit F9 einen Haltepunkt setzen und mit F8 durch den Code gehen.

LG

Micha