September 23, 2021, 13:05:04

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Dateneingabe per VBA in zwei Tabellen

Begonnen von martenk, Juli 07, 2021, 13:21:18

⏪ vorheriges - nächstes ⏩

martenk

Juli 07, 2021, 13:21:18 Letzte Bearbeitung: Juli 07, 2021, 13:56:35 von martenk
Hallo Gemeinschaft,

habe zwei Tabellen - Kunden und Buchungen

nun lese ich per VBA eine txt Datei aus mit diesem Inhalt

Frau 
Kristin
Müller
kristin.2101@gmx.de
01734343420
Wacholderstraße 2
 
Rangsdorf
 
32232
Deutschland
€872,00
Ferienhaus - E17
03.07.2021
10.07.2021
4

nun sollen die Adressdaten in die Tabelle Kunden - der DS der dort angelegt wird bekommt eine K-ID - diese benötige ich, um dann die anderen Daten in die Tabelle Buchungen einzutragen

könnt ihr mir dabei helfen

der Kunde kann ruhig doppelt angelegt sein, dass ist egal
das Auslesen der daten bekomme ich hin nur nicht das mit dem Eintrag in die Kunden Tab und das holen der KundenID weil diese Nummer brauche ich für den Verweis in der Buchungen Tab

so klappt es wenn ich nur eine Tab Buchungen hätte - aber es sind eben zwei tabs
Sub Tabschreiben()
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Buchungen", dbOpenDynaset)
    rs.FindFirst "Buchungsnummer = '" & Buchungsnummer & "'"
    If rs.NoMatch Then
       GoTo anlegen
    Else
       MsgBox ("Buchumgsnummer: " & Buchungsnummer & " schon vorhanden. Abbruch!")
       Exit Sub
    End If
anlegen:
    rs.AddNew
    rs!Vorname = Vorname
    rs!Nachname = Nachname
    rs!Buchungsnummer = Buchungsnummer
    rs!Buchungsdatum = Date
    'rs!IhreKennung = IhreKennung
    rs!datvon = datvon
    rs!datbis = datbis
    rs!AnzPersonen = AnzPersonen
    rs!AnzHaustiere = Haustier
    rs!Mietgutschrift = Preis
    rs!Kinderhochstuhl = Kinderhochstuhl
    rs!Kinderreisebett = Kinderreisebett
    rs!Bettwaesche = Bettwaesche
    rs!Frottee = Frottee
    rs!frueh = frueh
    rs!spaet = spaet
    rs.Update
    Vorname = ""
    Nachname = ""
    Buchungsnummer = ""
    datvon = ""
    datbis = ""
   ' ReDim AnzPersonen(1)
    AnzPersonen = 0
    Haustier = 0
    Preis = 0
    Kinderhochstuhl = 0
    Kinderreisebett = 0
    Bettwaesche = 0
    Frottee = 0
    frueh = 0
    spaet = 0
End Sub

DF6GL

Hallo,

ich befürchte, da gibt es einige Stolperstellen und Fallgruben zu bereinigen...



--  Qualifiziere die Steuerelemente-Namen mit "Me!"  (Referenz auf das aktuelle Form. Z. B. rs!Vorname = Me!Vorname
)  sofern es sich hier um Formular-Steuerelemente und nicht um globale Variablen handelt.

--  Bei Preis achte auf die Umwandlung des Dezimalkommas in den Dezimal-Punkt, sofern es sich bei rs!Mietgutschrift um ein Tabellenfeld mit Datentyp Double oder Währung (sehr empfohlen) handelt.

-- Bei Datums-Zuweisungen sollte das ISO- oder USA-Format verwendet werden, also rs!datvon = Format(Me!datvon, "\#yyyy-mm-dd\#")

-- Das resetten eines Steuerelementes sollte mit xxx = Null erfolgen, also   Me!Vorname = Null bzw.   Me!Nachname = Null


--  Was haben denn "Vorname" und "Nachname" in der Tabelle "Buchungen" zu suchen? Solche Angaben gehören in "tblKunden".

--   Vermeide solche Sprünge: GoTo anlegen



-- 
Zitatnur nicht das mit dem Eintrag in die Kunden Tab und das holen der KundenID

Wenn die Kundentabelle mit einem recordset gefüllt wird, ergibt sich der Primärschlüsselwert so:


Dim lngKundenID as Long
.
.
rs!Addnew
rs!Vorname ="Max"
rs!Nachname = "Mustermann"
.
.
lngKundenId = rs!KundenID
rs!Update
.
.
  Debug.Print lngKundenID



-- 
Zitatder Kunde kann ruhig doppelt angelegt sein, dass ist egal

nein, das ist nicht egal, das ist falsch.


Zeige mal den Screenshot des Beziehungsfensters mit allen Tabellen und sichtbaren Tabellenfeldern. Dazu die Datentypen der einzelnen Tabellenfelder.

Zeige zudem den kompletten Code, einschließlich der Einlese-Routine. Das Füllen der Kundentabelle zeigst Du auch nicht.

martenk

hi - lieben Dank für die Info

ich lese die daten ja von einem txt file ein, welches ich vorher ausgelesen habe und in Variablen gelegt habe - ich benötige die neue Kunden id - nachdem ich dort die Kundendaten eingepflegt habe - es ist wirklich nicht notwendig mit den Duplikaten in der Kundentab - ich möchte nur die Kunden_id haben, damit ich die Buchungsdaten samt Kunden_id dort eintragen kann

DF6GL

Hallo,

Zitatich möchte nur die Kunden_id haben


ja und, habe ich doch gezeigt.... nur Du nicht den Code, der die Kundentabelle füllt.

martenk

auch wenn´s wurstelcode ist - schau bitte einmal

bekomme Fehlermeldung bei datvon - obwohl die Variable einen datumswert hat

Update oder cancleudate ohne addnew oder edit


Sub Tabschreiben()
Dim lngKundenId, rsb
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Kunden", dbOpenDynaset)
   
 
anlegen:
    rs.AddNew
    rs!Anrede = "Frau"
    rs!Vorname = Vorname
    rs!Name = Nachname

    lngKundenId = rs![Kunden-Nr]
    rs.Update
   
      Set db = CurrentDb
    Set rsb = db.OpenRecordset("Reservierungen", dbOpenDynaset)
    rsb.FindFirst "'Reservierungs-Nr' = '" & Buchungsnummer & "'"
    If rsb.NoMatch Then
      GoTo anlegen1
    Else
      MsgBox ("Buchumgsnummer: " & Buchungsnummer & " schon vorhanden. Abbruch!")
      Exit Sub
    End If
anlegen1:
    ' rsb!ReservierungsnummerHP = Buchungsnummer
    'rsb!Buchungsdatum = Date
    'rsb!IhreKennung = IhreKennung
   
    rsb!Anreisetag = datvon
  rsb!datbis = datbis
    rsb!AnzPersonen = AnzPersonen
    rsb!AnzHaustiere = Haustier
    rsb!Mietgutschrift = Preis
    rsb!Kinderhochstuhl = Kinderhochstuhl
    'rs!Kinderreisebett = Kinderreisebett
    rsb!Bettwaesche = Bettwaesche
    rsb!Frottee = Frottee
    rsb!frueh = frueh
    rsb!spaet = spaet
 
 
    rsb.Update
 
   
End Sub

DF6GL

Hallo,

es gilt das vorher Gesagte nach wie vor ! ( und die Benamsung ist auch nicht wirklich optimal..)
ZitatSub Tabschreiben()
Dim lngKundenId as Long, rs as Dao.Recordset, rsb as Dao.Recordset, db as Database

    Set db = CurrentDb
    Set rs = db.OpenRecordset("Kunden", dbOpenDynaset)
   
 
anlegen:
    rs.AddNew
    rs!Anrede = "Frau"
    rs!Vorname = Vorname
    rs![Name] = Nachname

    lngKundenId = rs![Kunden-Nr]
    rs.Update
      rs.Close
    Set rs = Nothing


      Set db = CurrentDb   

    Set rsb = db.OpenRecordset("Reservierungen", dbOpenDynaset)
    rsb.FindFirst "[Reservierungs-Nr] = '" & Buchungsnummer & "'"
    If rsb.NoMatch Then

    rsb.Addnew
    ' rsb!ReservierungsnummerHP = Buchungsnummer
    'rsb!Buchungsdatum = Date

    'rsb!IhreKennung = IhreKennung

    rsb!KundenNr_f  = lngKundenID

    rsb!Anreisetag = datvon
    rsb!datbis = datbis
    rsb!AnzPersonen = AnzPersonen
    rsb!AnzHaustiere = Haustier
    rsb!Mietgutschrift = Preis
    rsb!Kinderhochstuhl = Kinderhochstuhl
    'rs!Kinderreisebett = Kinderreisebett
    rsb!Bettwaesche = Bettwaesche
    rsb!Frottee = Frottee
    rsb!frueh = frueh
    rsb!spaet = spaet
 
 
    rsb.Update
 
   rsb.Close
    Set rsb =Nothing




    Else
      MsgBox ("Buchungsnummer: " & Buchungsnummer & " schon vorhanden. Abbruch!")

    End If





End Sub

martenk