collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 79
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13991
  • stats Beiträge insgesamt: 66698
  • stats Themen insgesamt: 8991
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen  (Gelesen 383 mal)

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 333
Ich habe mal eine Frage zum automatischen Anlagen von DS in einer Zwischentabelle.

* eine Tabelle tblworkorder mit Probanden als DS
* eine Tabelle tblBatterien mit Batterien als DS, die den Probanden zugeordnet werden können
* eine Zwischentabelle ztblBatterien, deren DS die Fremdschlüssel von tblworkorder (IDWO_F) und tblBatterien (IDBAT_F) enthalten.

Damit lassen sich jedem m Probanden n Batterien zuordnen.

Neue Probanden werden angelegt mit einem Formular, das auf tblworkorder basiert.

Frage: Wie kann man das machen, dass, wenn ein neuer Proband in "tblworkorder" angelegt wird, auch automatisch in ztblBatterien ein DS entsteht, der in IDBAT_F den Wert "9" erhält?

Carl

 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7308
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #1 am: Juni 13, 2018, 21:39:13 »
Hallo,
versuche es mal so:
Im Ereignis "Nach Aktualisierung" des Feldes mit dem Namens des Probanten.
If Me.NewRecord = True
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("ztblBatterien")
        rs.AddNew
        rs!IDWO_F = Me.ID 'neue Probant ID aus dem Formular
        rs!IDBAT_F = 9
        rs.Update
rs.Close: Set rs = Nothing
End If
ungetestet


« Letzte Änderung: Juni 13, 2018, 21:46:24 von MzKlMu »
Gruß
Klaus
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 333
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #2 am: Juni 14, 2018, 10:25:24 »
Okay, ich setze mich heute Abend ran.

Was ich zwischenzeitlich auch als Idee hatte war,
* im Formular für das Anlegen des neuen DS
* ein UFO basierend auf der Zwischentabelle (ztblBatterien)
* in diesem UFO ein Feld für [IDBAT_F] mit einem einzelnen Kombi
* und dieses Kombi die "9" als voreingestellte Option

Dann passiert folgendes:
* wenn der neue DS in tblworkorder angelegt wird, OHNE dass in dem UFO das Kombi angeklickt wurde, wird in der Zwischentabelle KEIN DS angelegt
* wenn der neue DS in tblworkorder angelegt wird, wenn vorher in dem UFO das Kombi KURZ angeklickt wurde, wird erfolgreich sowohl in der DS in tblworkorder, als auch der DS in der Zwischentabelle angelegt.

Ich würde nur gern den Mitarbeiter davon entlasten, in dem Kombi eine Option auswählen zu müssen, über die er sich zum Zeitpunkt des Anlegens des DS noch nicht klar ist.

Carl
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7308
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #3 am: Juni 14, 2018, 10:48:26 »
Hallo,
folge meinem Vorschlag.

Wenn ich mir jetzt aber das letzte Bild aus Deinem anderen Thema ansehe, so habe ich erhebliche Zweifel an der Sinnhaftigkeit Deines Tuns.

Wie bereits gesagt, programmierst versuchst Du krampfhaft Dinge zu relaisieren, die auf Grund des Aufbaus der DB unlogisch sind. Und somit nur ungeeigneten Formularen führen.
Gruß
Klaus
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 333
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #4 am: Juni 14, 2018, 11:07:09 »
Ja, ich denke schon, dass an Deinen Bedenken was dran ist. Aber ich bin schon froh, überhaupt mal eine Zuordnungstabelle hinbekommen zu haben. Und das mit dem Filtern funktioniert ja. Immerhin sind die 12 Felder weg, und das ist zumindest schonmal normaler als vorher.

Carl
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 333
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #5 am: Juni 14, 2018, 11:16:21 »
Private Sub WOName_AfterUpdate()
If Me.NewRecord Then
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("ztblBatterien")
        rs.AddNew
        rs!IDWO_F = Me.ID 'neue Probant ID aus dem Formular
        rs!IDBAT_F = 9
        rs.Update
rs.Close: Set rs = Nothing
End If
End Sub

Da kommt der fehler 3201

kann das sein, dass es ist, weil beim verlassen des Felder der DS noch nicht angelegt wird? Siehe Bild

 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1802
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #6 am: Juni 14, 2018, 12:36:13 »
Hallo Carl,
Höchstwahrscheinlich. Speichere den DS zunächst
If Me.NewRecord Then
    Me.Dirty = False
.
.
Beachte, dass dadurch aber auch die Ereignisse Form_Before- und
-AfterUpdate ausgelöst werden.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 333
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #7 am: Juni 14, 2018, 15:37:55 »
Hallo Carl,
Höchstwahrscheinlich. Speichere den DS zunächst
If Me.NewRecord Then
    Me.Dirty = False
.
.
Beachte, dass dadurch aber auch die Ereignisse Form_Before- und
-AfterUpdate ausgelöst werden.
gruss ekkehard

Ja, Du hast Recht, da löst er beim Verlassen des Feldes das Speichern aus, ohne auf die anderen Eingaben zu warten.

Siehst Du eine Möglichkeit, bei dem UFO (siehe Abbildung) die Eingabe des Wertes "9" in das Feld IDBAT_F zu erzwingen, ohne dass der User etwas tun muss?

Carl
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7308
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #8 am: Juni 14, 2018, 16:10:28 »
Hallo,
Zitat
Siehst Du eine Möglichkeit, bei dem UFO (siehe Abbildung) die Eingabe des Wertes "9" in das Feld IDBAT_F zu erzwingen, ohne dass der User etwas tun muss?
sag mal, liest Du eigentlich die Beiträge sorgfältig ?
Das ist doch bereits in meinem Vorschlag realisiert, oder siehst Du die 9 nicht ?
Was könnte diese Codezeile wohl bedeuten?
rs!IDBAT_F = 9Ich habe nur den Code zum Speichern vergessen.
Gruß
Klaus
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 333
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #9 am: Juni 14, 2018, 17:45:34 »
Ich hatte in #5 geantwortet, dass mit diesem Code bei Verlassen des Feldes mit dem Namen der Fehler 3201 eintritt. (siehe Bild)

Private Sub WOName_AfterUpdate()
If Me.NewRecord Then
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("ztblBatterien")
        rs.AddNew
        rs!IDWO_F = Me.ID 'neue Probant ID aus dem Formular
        rs!IDBAT_F = 9
        rs.Update
rs.Close: Set rs = Nothing
End If
End Sub

Es ist nicht nur das Namensfeld anzulegen, sondern weitere Felder. Das wird erst mit dem Button 122 ausgelöst.

Hier mal der gesamte Code des Formulars:

'Prozedur für das Anlegen eines neuen Probanden

Sub VerzeichnisAnlegen()
    On Error Resume Next
    MkDir DLookup("Hilfstexte", "tblHilfstexte", "ID=1") & Me!WOOrdnername

FileCopy "S:\AusO_Projekt-workorder_Bauer\Datenbanken\autorentool\!dateivorlagen\!Manual.docx", "S:\AusO_Projekt-workorder_Bauer\Datenbanken\autorentool\workorderkatalog\" & Me!WOOrdnername & "\Manual.docx"
FileCopy "S:\AusO_Projekt-workorder_Bauer\Datenbanken\autorentool\!dateivorlagen\!Instruktion.docx", "S:\AusO_Projekt-workorder_Bauer\Datenbanken\autorentool\workorderkatalog\" & Me!WOOrdnername & "\Instruktion.docx"
MkDir "S:\AusO_Projekt-workorder_Bauer\Datenbanken\autorentool\workorderkatalog\" & Me!WOOrdnername & "\!Versionsgeschichte"
MkDir "S:\AusO_Projekt-workorder_Bauer\Datenbanken\autorentool\workorderkatalog\" & Me!WOOrdnername & "\Beispiele"
MkDir "S:\AusO_Projekt-workorder_Bauer\Datenbanken\autorentool\workorderkatalog\" & Me!WOOrdnername & "\Materialien"
MkDir "S:\AusO_Projekt-workorder_Bauer\Datenbanken\autorentool\workorderkatalog\" & Me!WOOrdnername & "\!Versionsgeschichte\20xxxxxx Urspruengliches Material"
DoCmd.RunCommand acCmdSaveRecord
DoCmd.Close
 End Sub
 

 Private Sub Befehl122_Click()
 
 On Error GoTo Err_Befehl122_Click
     DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
     'Verzeichnis anlegen für den jeweiligen Probanden
     VerzeichnisAnlegen
Exit_Befehl122_Click:
     Exit Sub
Err_Befehl122_Click:
     MsgBox Err.Description
     Resume Exit_Befehl122_Click
 End Sub


Private Sub cmdSchließen_Click()
 On Error GoTo Err_cmdSchließen_Click
 Me.Undo
 DoCmd.Close acForm, "frmworkorderNEU", acSaveNo
Exit_cmdSchließen_Click:
 Exit Sub
Err_cmdSchließen_Click:
 MsgBox Err.Description
 Resume Exit_cmdSchließen_Click
 End Sub

Private Sub WOName_AfterUpdate()
If Me.NewRecord Then
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("ztblBatterien")
        rs.AddNew
        rs!IDWO_F = Me.ID 'neue Probant ID aus dem Formular
        rs!IDBAT_F = 9
        rs.Update
rs.Close: Set rs = Nothing
End If
End Sub

Private Sub WOName_BeforeUpdate(Cancel As Integer)
If ((IsNull(Me![WOName])) Or (Me![WOName] = "")) Then
   Cancel = True
End If
End Sub

Carl
« Letzte Änderung: Juni 14, 2018, 18:07:12 von Carl »
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7308
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #10 am: Juni 14, 2018, 18:41:57 »
Hallo,
Zitat
Ich hatte in #5 geantwortet, dass mit diesem Code bei Verlassen des Feldes mit dem Namen der Fehler 3201 eintritt.
Daraufhin gab es von Ekkehard in #6 den Vorschlag zum Speichern.
Worauf Du schriebst:
Zitat
Ja, Du hast Recht, da löst er beim Verlassen des Feldes das Speichern aus,
Und im oben gezeigten Code fehlt jetzt wieder die Zeile zum Speichern.

Das hat mit dem weiteren Erfassen von Daten zum Probanten nichts zu tun, absolut nichts. Es wird jediglich automatisch ein Datensatz in der Zwischentabelle angelegt (im Hintergrund, das siehst Du nicht) was Du ja wolltest.
Gruß
Klaus
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 333
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #11 am: Juni 14, 2018, 19:24:21 »
Dieser Code bewirkt, dass er das Formular ganz speichern und schließen möchte, aber nicht kann, weil im Feld für den Ordnername kein Ordner eingetragen ist. (Dadurch kommt der Fehler  3314)

Private Sub WOName_AfterUpdate()
If Me.NewRecord Then
Me.Dirty = False
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("ztblBatterien")
        rs.AddNew
        rs!IDWO_F = Me.ID 'neue Probant ID aus dem Formular
        rs!IDBAT_F = 9
        rs.Update
rs.Close: Set rs = Nothing
End If
End Sub

Access wartet also beim Verlassen des Feldes mit dem Namen nicht auf die Eingabe in anderen Feldern und den Button 122, sondern versucht sofort, die ganze Routine des Anlegens auszuführen.

Carl





 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1802
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #12 am: Juni 14, 2018, 20:45:53 »
Hallo Carl,
Dann musst du eben in "Form_BeforeUpdate" eine Prüfung auf
Pflichtfelder einbauen. Oder das Ganze gleich vom "WOName_AfterUpdate"
ins "Form_AfterUpdate" verschieben. Da ist der DS dann auch
schon gespeichert.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Carl

  • Access-Profi
  • **
  • Beiträge: 333
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #13 am: Juni 14, 2018, 21:12:29 »
Ich habe es vergeblich mit Form_AfterUpdate und Form_Close versucht. Wahrscheinlich geht es deshalb nicht, weil Form ja kein Feld ist und dann der Term "If Me.NewRecord" nicht zieht.

Ich habe auch nach 3 Tagen intensiven Probierens keine Kraft mehr. Für so ein spezielles Problem findet man nichts im Internet.

Private Sub Form_AfterUpdate()
If Me.NewRecord Then
'Me.Dirty = False
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("ztblBatterien")
        rs.AddNew
        rs!IDWO_F = Me.ID 'neue Probant ID aus dem Formular
        rs!IDBAT_F = 9
        rs.Update
rs.Close: Set rs = Nothing
End If
End Sub

Es wäre wahrscheinlich gelöst, wenn man das Kombi anweisen könnte, auf jedem Fall einen bestimmten Wert einzuspeichern, unabhängig davon, ob in ihm etwas angewählt wurde. Also auf Formularebene eine Speicherung im Kombi erzwingen - nicht als Standardwert.

Carl
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1802
Re: Automatisch DS in Zwischentabelle (Zuordnungstabelle) anlegen
« Antwort #14 am: Juni 14, 2018, 23:31:56 »
Hallo Carl,
Zitat
weil Form ja kein Feld ist und dann der Term "If Me.NewRecord
Das ist ja auch eine Eigenschaft des Forms (Me). Du befindest dich doch
auf dem HFo, oder?
Zitat
Es wäre wahrscheinlich gelöst, wenn man das Kombi anweisen könnte, auf jedem Fall einen bestimmten Wert einzuspeichern
Welches Kombi, und wozu? Du speicherst doch einen konstanten Wert
im Code (=0). Ein Kombi kommt da doch gar nicht vor.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.