Hallo zusammen,
dieses Thema wurde sicherlich schon öfter behandelt, allerdings habe ich beim Durchforsten des Forums nicht die richtige Lösung meines Problems gefunden.
Ich habe ein ungebundenes Formular erstellt und möchte nun, dass die Daten, nachdem auf den Button "Datensatz speichern", geklickt wurde, die eingetragenen Daten in eine Tabelle gespeichert werden.
Mein Formular habe ich angehängt.
Vielen Dank für Eure Hilfe
Gruß,
Chris777777
Hallo,
warum tust Du Dir das an und arbeitest mit einem ungebunden Formular?
Das kann Access mit einem gebunden Formular viel besser.
Welchen Grund siehst Du ungebunden zu arbeiten ?
Ich bin ein absoluter Anfänger was Access betrifft. Ich dachte, dass ich bei einem ungebundenem Formular das Layout frei gestalten kann und dies bei einem gebundenem Formular nicht geht
Hallo,
Du kannst auch mit einem gebundenen Formular das Layout völlig frei gestalten, ohne Einschränkung.
Wollte ich mir eine Route bei Google Maps berechnen lassen oder die Wetterdaten für einen Ort bei OpenWeather.com erfahren, ist ein ungebundenes Formular bestimmt für die Eingabe von Parametern geeignet. Um neue Daten in eine definierte Struktur (Tabelle) einzutragen, nutze ich aber lieber ein gebundenes Formular, in dem ich typensicher meine Daten (oft sogar ohne jeden weiteren Code) einpflegen kann. Frei nach dem Motto: soviel Code wie nötig - aber nicht soviel Code wie möglich.
Wäre dem nicht so, hätte Access als GUI für mich keinen Wert und könnte auch durch ein beliebiges anderes Framework ersetzt werden, wo ich meine Datenbankzugriffe dann auch selbst programmieren müsste.
ok, danke Euch für Eure Rückmeldungen :)
Das habe ich nun soweit gemacht. Die Einträge werden automatisch gespeichert. Ich möchte trotzdem noch zwei Schaltflächen in das Formular einfügen:
1. "Datensatz speichern": Ich weiß, dass die Einträge auch ohne diesen Button gespeichert werden, aber dieses Formular wird von vielen Leuten ausgefüllt. Daher möchte ich einen sichtbaren Button zur Speicherung einbauen
2. "Anwendung beenden": Damit soll das Formular geschlossen werden, ohne dass bereits eingegebene Daten gespeichert werden. Zusätzlich soll noch ein Fenster aufpoppen mit dem Text "Anwendung wirklich beenden?"
Ist das möglich?
Viele Grüße,
Chris777777
Hallo Chris,
1.
Private Sub cmdSave_Click()
If Me.Dirty Then Me.Dirty = False
End Sub
2.
Private Sub cmdQuit_Click()
If MsgBox( _
Prompt:="Anwendung wirklich beenden?", _
Buttons:=vbYesNo) = vbYes Then
If Me.Dirty Then Me.Undo
'Form schliessen
DoCmd.Close acForm, Me.Name
'Programm beenden
Application.Quit
End If
End Sub
gruss ekkehard
Etwas verspätet, aber klappt wunderbar. Danke :)
Gruß,
Chris
Hallo zusammen,
ich habe noch ein Problem mit dem Speichern der Daten. Ich hatte ja bereits erwähnt, dass ich gerne einen Button zum speichern habe möchte, auch wenn der Datensatz auch so gespeichert wird. Das ist jetzt aber gerade mein Problem. Ich habe folgenden Code eingegeben:
Private Sub Datensatz_speichern_Click()
If MsgBox( _
Prompt:="Datensatz speichern?", _
Buttons:=vbYesNo) = vbYes Then
If Me.Dirty Then Me.Dirty = False
End If
DoCmd.GoToRecord acDataForm, "frmWE", acNewRec
End Sub
Das klappt soweit auch alles wunderbar. Allerdings werden alle Datensätze gespeichert. Auch diese, wenn der Benutzer auf "Nein" klickt. Diese Daten sollen jedoch nicht gespeichert werden. Hat jemand eine Lösung dafür?
Viele Grüße,
Chris
Hallo Chris,
Du musst den Wechsel zu einem neuen Datensatz mit in den True-Part einfügen.
Edit: habe noch eine bessere Variante gefunden
Private Sub Datensatz_speichern_Click()
If Me.Dirty Then
If MsgBox( _
Prompt:="Datensatz speichern?", _
Buttons:=vbYesNo) = vbYes Then
DoCmd.GoToRecord acDataForm, "frmWE", acNewRec
'löst das Speichern wieder automatisch aus da Datensatzwechsel
Else
Me.Undo
End If
End Sub
gruss ekkehard
Da erhalte ich nun ich Fehlermeldung:
If-Block ohne End If...
Ahh es fehlte nur ein End If in der Formel.
Der Rest klappt super!
Danke :)
Viele Grüße,
Chris
Sorry, kann passieren
Me.Undo
End If
End If
End Sub
Hallo zusammen,
ich habe nun noch folgendes Problem. Nachdem die Daten in dem Formular gespeichert wurden, soll wieder ein Blanko-Formular erscheinen.
Dafür sollte ja dieser Code:
DoCmd.GoToRecord acDataForm, "frmWE", acNewRec
verantwortlich sein.
Das klappt auch soweit. Sobald ich das Formular geschlossen habe und wieder öffne, erscheinen die Einträge der letzten Speicherung. Daher habe ich im Ereignisblatt unter "beim Öffnen" nochmal denselben Code eingesetzt. Das klappt soweit auch. Kann man diese beiden Schritte vielleicht auch zusammenfassen?
Sobald ich das Formular öffne, erscheinen unten links die Anzahl der Datensätze. Klicke ich mit den Pfeilen auf vorherige Datensätze, können diese abgeändert werden. Dieses soll unterbunden werden. Sobald ein Datensatz gespeichert wurde, soll dieser nicht mehr abgeändert werden können.
Dafür soll es jedoch möglich sein, einen bereits abgespeicherten Datensatz mit einem Button wieder zu löschen.
Kennt da jemand eine Lösung?
Danke Euch und viele Grüße,
Chris
Hallo Chris,
ZitatSobald ich das Formular geschlossen habe und wieder öffne, erscheinen die Einträge der letzten Speicherung. Daher habe ich im Ereignisblatt unter "beim Öffnen" nochmal denselben Code eingesetzt. Das klappt soweit auch. Kann man diese beiden Schritte vielleicht auch zusammenfassen?
Das habe ich nicht verstanden! Welchen gleichen Code beim Öffnen?
Ging doch ums Speichern.
ZitatSobald ein Datensatz gespeichert wurde, soll dieser nicht mehr abgeändert werden können.
Das kannst du beim Ereignis "Beim Anzeigen" (VBA: Form_Current) steuern
Private Sub Form_Current()
If Not Me.Record Then Me.AllowEdits = False
End Sub
Zitateinen bereits abgespeicherten Datensatz mit einem Button wieder zu löschen.
Dafür ist die Eigenschaft "Löschen zulassen" (VBA: .AllowDeletions) zuständig
(Standard ist True).
gruss ekkehard
Hallo,
Ach ja, noch was ...
ZitatDafür sollte ja dieser Code:
DoCmd.GoToRecord acDataForm, "frmWE", acNewRec
verantwortlich sein.
Das klappt auch soweit. Sobald ich das Formular geschlossen habe und wieder öffne, erscheinen die Einträge der letzten Speicherung.
Ich würde diesen Datensatzwechsel nicht beim Speichern unterbringen,
sondern, wenn du nicht die Navigation des Forms nutzen willst, mit einem
Extra-Button anstossen.
gruss ekkehard
Wenn Du einen Filterausdruck wie 1=0 oder False (Falsch im deutschen Access) verwendest, und im Nach Aktualisierung Ereignis des Formulars Me.Requery aufrufst, dürfte immer nur der neue Datensatz zu sehen sein. Das GoToRecord-Gehampel würde damit auch entfallen. Alternativ kann auch die Formular-Eigenschaft Daten eingeben auf Ja gesetzt und zusammen wie zuvor beschrieben mit Me.Requery mit dem gleichen Effekt genutzt werden.
Super es klappt :)
Vielen Dank Euch.
Viele Grüße,
Chris