Supportnet Computer
Planet of Tech

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

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));

Antwort 4 von rudi0805

Vielen Dank schon mal!

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.