Supportnet / Forum / Datenbanken
Datensatz in einer Tabelle mit Hilfe von VBA hinzufügen
Frage
Hi ich habe folgendes Problem!
Zuerst eine "kurze" Darstellung des Situation... danach folgt meine Frage!!
Meine Datenbank hat 3 Tabellen:
-Veranstaltungen
-Personen
-Personen+Verantstaltungen (ID.Person + ID.Veranstaltung)
Nun möchte ich folgendes:
1.) Ich wähle in einem Formular eine Veranstaltung aus und markiere mehrere Personen (z.B. mit Check-Boxen).
2.)Anschließend klicke ich auf einen Button (und es passiert 3.)).
Bis dahin habe ich alles!
3.)Nun möchte ich mit Hilfe von VBA, dass in der Tabelle "Personen+Verantstaltungen" jedesmal, wenn das Checkboxkästchen markiert ist (value=1), eine neuer Datensatz erzeugt (pro Person) wird undzwar mit der ID.Verastaltung, die ich unter 1.) ausgewählt habe und der ID.Person der jeweiligen Person.
Dazu habe ich mir folgendes überlegt:
-Eine For-Schleife, die genau so of durchlaufen wird, wie es
Personen (Datensätze) gibt
-Eine If-Schleife, die prüft, ob die Checkbox markiert ist
-Wenn nein(*), soll er zum nächsten Datensatz (also der
nächsten
Person) springen
-Wenn Ja: ID.Person und ID.Veranstaltung als Variable (z.B.
Integer) speichern und Formular "Personen+Verantstaltungen"
öffnen
-Prüfen (If-Schleife), ob diese Kombination aus ID.Person und
ID.Veranstaltung schon vorhanden ist
-Wenn Ja: Springen zur nächsten Person (wie oben bei *)
-Wenn Nein: Neuen Datensatz erzeugen aus den
gespeicherten Daten (ID.Person und ID.Veranstaltung)
Ende der beiden If-Schleifen
Die beiden Integer auf 0 setzen
Ende der For-Schleife
Msgbox: Daten überarbeitet!
Erstmal Vielen Dank
PS.: Es fehlt dann noch:
- Programm zum Löschen von Datensätzen in der Tabelle: "Personen+Verantstaltungen", die jedoch nicht markiert waren
- beim Öffnen des Formulares bzw. beim Weiterklicken müssen die Checkbox-Felder aktualisiert werden...
...aber das beides werde ich dann wohl schaffen...
Meine Frage lautet nun:
Wie kann ich in einer Tabelle einen Datensatz mit VBA hinzufügen?
(incl. laden der Tabelle, suchen, ob der Datensatz schon vorhanden ist, evtl. einfügen eines neuen Datensatzes, schließen der Tabelle)
Wenn mir jemand helfen könnte... das wäre richtig super!
Vielen vielen Dank
Nils
[*][quote][sup][i]Admininfo: bitte vermeide Mehrfachanfragen in verschiedenen, bzw. gleichen Gruppen. Siehe [url=https://supportnet.de/groupfaqs/3][u]FAQ2.[/u][/url][/i][/sup][/quote]
Antwort 1 von Teddy7
Bisschen viel verlangt von einem Forum.
Grundsätzlich sieht das so aus:
Definition:
Dim ttab1 As DAO.Recordset
Dim ktab1 As String
Set ttab1 = CurrentDb.OpenRecordset("Select * from tblHugo", dbOpenDynaset)
Suchen:
ktab1 = "KundenNr = " & .......
ttab1.findfirst ktab1
Ändern:
ttab1.edit
.........
ttab1.update
neu aufbauen:
ttab1.addnew
.........
ttab1.update
Am Schluß nicht vergessen zu schließen und den Arbeitsbereich freizugeben:
ttab1.close
set ttab1 = nothing
Gruß
Teddy
Grundsätzlich sieht das so aus:
Definition:
Dim ttab1 As DAO.Recordset
Dim ktab1 As String
Set ttab1 = CurrentDb.OpenRecordset("Select * from tblHugo", dbOpenDynaset)
Suchen:
ktab1 = "KundenNr = " & .......
ttab1.findfirst ktab1
Ändern:
ttab1.edit
.........
ttab1.update
neu aufbauen:
ttab1.addnew
.........
ttab1.update
Am Schluß nicht vergessen zu schließen und den Arbeitsbereich freizugeben:
ttab1.close
set ttab1 = nothing
Gruß
Teddy
Antwort 2 von rudi0805
Super, danke!
Antwort 3 von erik
Warum denn so umständlich? Eine Anfügeabfrage mit einem Parameter für die Veranstaltungs-ID reicht aus. Die folgende Abfrage ignoriert dazu bereits angefügte Kombinationen aus Person und Veranstaltung:
Name: qryPersonFilter
PARAMETERS VeranstaltungsFilter Long;
SELECT tblPerson.PersonID, [VeranstaltungsFilter] AS VeranstaltungID
FROM tblPerson
WHERE (((tblPerson.Auswahl)=True));
Name: egal
PARAMETERS VeranstaltungsFilter Long;
INSERT INTO tblPersonVeranstaltung ( PersonID, VeranstaltungID )
SELECT qryPersonFilter.PersonID, qryPersonFilter.VeranstaltungID
FROM qryPersonFilter LEFT JOIN tblPersonVeranstaltung ON (qryPersonFilter.VeranstaltungID = tblPersonVeranstaltung.VeranstaltungID) AND (qryPersonFilter.PersonID = tblPersonVeranstaltung.PersonID)
WHERE (((tblPersonVeranstaltung.PersonVeranstaltungID) Is Null));
Name: qryPersonFilter
PARAMETERS VeranstaltungsFilter Long;
SELECT tblPerson.PersonID, [VeranstaltungsFilter] AS VeranstaltungID
FROM tblPerson
WHERE (((tblPerson.Auswahl)=True));
Name: egal
PARAMETERS VeranstaltungsFilter Long;
INSERT INTO tblPersonVeranstaltung ( PersonID, VeranstaltungID )
SELECT qryPersonFilter.PersonID, qryPersonFilter.VeranstaltungID
FROM qryPersonFilter LEFT JOIN tblPersonVeranstaltung ON (qryPersonFilter.VeranstaltungID = tblPersonVeranstaltung.VeranstaltungID) AND (qryPersonFilter.PersonID = tblPersonVeranstaltung.PersonID)
WHERE (((tblPersonVeranstaltung.PersonVeranstaltungID) Is Null));
Antwort 4 von rudi0805
Vielen Dank schon mal!
Wo muss ich dass denn eintragen??
Wo muss ich dass denn eintragen??
Antwort 5 von erik
Wenn du das per Schaltfläche ausführen willst, dann müsste das ungefähr so aussehen:
Private Sub MeineBefehlsschaltfläche()
Dim db As Database
Dim qdf As QueryDef
Set db = CurrentDb
Set qdf = db.QueryDefs("<Hier Abfragename einfügen>")
qdf.Parameters("VeranstaltungsFilter").Value = Me.MeinFilterfeld
qdf.Execute
qdf.Close
Set qdf = Nothing
Set db = Nothing
End Sub
Die Tabellen- und Feldnamen in den Abfragen müssen jedoch noch an deine Umgebung angepasst werden, welche mir ja nicht bekannt ist.
Private Sub MeineBefehlsschaltfläche()
Dim db As Database
Dim qdf As QueryDef
Set db = CurrentDb
Set qdf = db.QueryDefs("<Hier Abfragename einfügen>")
qdf.Parameters("VeranstaltungsFilter").Value = Me.MeinFilterfeld
qdf.Execute
qdf.Close
Set qdf = Nothing
Set db = Nothing
End Sub
Die Tabellen- und Feldnamen in den Abfragen müssen jedoch noch an deine Umgebung angepasst werden, welche mir ja nicht bekannt ist.

