PDA

Vollständige Version anzeigen : Formulardarstellung von komplizierter Bez.


+[Hagi]+
08.07.2006, 16:49
Hallo,
also ich hoffe ich kann erklären wasich will:

Ich habe eine Tabelle [TFFunde] (Primärschlüssel TFNummer) die noch drei Unterarten besitzt [TFArt1], [TFArt2] und [TFArt3] die alle drei per 1:1 Beziehung an [TFFunde] in Beziehung gesetzt sind. Also ein DS [TFFunde] ist automatisch eine der drei Arten. Nun soll an [TFArt3] noch eine weitere Untertabelle gehangen werden [TFArt3Ind] (Primärschlüssel TFNummer und IndNummer) welche mit [TFArt3] in einer 1:n Beziehung steht. So das pro DS des Types 3 unendliche viele UnterDSe angehangen werden können.

Im Formular habe ich das so gelöst, dass ich ein Formular für die [TFFunde] habe in welchem sich so ein Registersteuerelement befindet, dass jeweils die Informationen zu [TFArt1], [TFArt2] und [TFArt3] anzeigt, je nach dem welchen Typs der DS ist.
Innerhalb des Registers für [TFArt3] soll man per Knopfdruck auf ein neues Formlar kommen, in welchem man die Untertabelle [TFArt3Ind] füllen kann.
Jetzt folgt mein Problem:
1. Wie kann ich dem Knopf sagen, dass er das neue Formular öffnet, aber der HauptDS, also die TFNummer, immer gleich bleibt, so dass man nur die UnterDSe für die jeweilige TFNummer eingeben kann (und angezeigt bekommt).

Vielen Dank und GRuss
Hagi

JörgG
08.07.2006, 18:02
Hallo Hagi,

schau Dir die Argumente von DoCmd.OpenForm ... an, hier kannst Du zB in der Filter/Where-Condition festlegen, welche DS (TFNummer) beim Öffnen des Forms angezeigt werden sollen. Zusätzlich würde ich das OpenArgs setzen um damit im zu öffnenden Formular den Default-Wert für die TFNummer festzulegen. Das Feld sollte dann gegen Änderung gesperrt werden.
Hinter dem Button:
DoCmd.OpenForm "Formname", , , "TFNummer = '" & Me.TFNummer & "'", , , Me.TFNummer
oder
DoCmd.OpenForm "Formname", , , "TFNummer = " & Me.TFNummer, , , Me.TFNummer
im neu geöffneten Formular, Ereignis "beim Öffnen":
Me.TFNummer.DefaultValue = Chr(34) & Me.OpenArgs & Chr(34)

+[Hagi]+
09.07.2006, 11:29
Hey vielen Dank,
das funktioniert wunderbar.

Danke und Gruss
Hagi

+[Hagi]+
19.07.2006, 21:35
Hallo,

könntest Du mir vielleicht nochmal helfen?
Ich habe fast dasselbe Problem, bloss die Beziehungen sind nun etwas komplizierter. Zur Veranschaulichung habe ich mal meine DB stark auf das wesentliche reduziert und hier mit hochgeladen.
Kannst Du mir sagen wie ich quasi vom Formular "Locusblatt" aus, per klick auf den Button Foto das Formular "BilderDBLoc" öffnen kann, dieses aber lediglich die Bilder anzeigt, die zum jeweiligen Locus gehören.
Das Beispiel macht es denke ich klar.

Vielen Dank und Gruss
Hagi

JörgG
19.07.2006, 21:56
Hallo,

die Hochkommas gelten nur für Strings, Deine LocusNr ist ID (Zahl):
DoCmd.OpenForm "BilderDBLoc", , , "LocusNr = " & Me.LocusNr, , acDialog
Damit wird das Form gleich im richtigen DS geöffnet (wenn vorhanden :grins: ). Wozu brauchst Du das OpenArgs?

+[Hagi]+
19.07.2006, 23:47
Nee LocusNr ist ein Textfeld, da es das Format A-0001 hat.
Ich kriege das auch mit Deinem Vorschlag nicht zum laufen.

OpenArgs?
Weiß nich, ich habe im Prinzip nur das übernommen, was damals auch schon geklappt hat. (Bin ein blutiger Anfänger) ;)

Danke und Gruss
Hagi

JörgG
20.07.2006, 00:01
Hallo,

sorry, stimmt, ist ein Textfeld:
DoCmd.OpenForm "BilderDBLoc", , , "LocusNr = '" & Me.LocusNr & "'", , acDialog
Im Form "BilderDBLoc" entfernst Du diese OpenArgs-Geschichte, dann wird auch der gewünschte DS angesteuert.

+[Hagi]+
20.07.2006, 08:29
Hallo,
ja das funktioniert jetzt gut.
Ich habe nur zwei Probleme, die im Prinzip dieselben sind:

1. Wenn ich im "BilderDBLoc"-Formular einen neuen DS anfügen will, übernimmt er nicht automatisch die Locusnr. Bei der IndNr wäre es mir egal, die soll später sowieso nicht angezeigt werden.

2. Wenn ich eine LocusNr habe die noch gar keine Bilder besitzt, passiert dasselbe.

Kann man das lösen, so dass die richtige LocusNr voreingestellt ist?

Danke und Gruss
Hagi

JörgG
20.07.2006, 08:49
Hallo,

aha, dazu brauchst Du das OpenArgs, Aufruf mit OpenArgs:
DoCmd.OpenForm "BilderDBLoc", , , "LocusNr = '" & Me.LocusNr & "'", , acDialog, Me.LocusNr
Ereignis "beim Anzeigen" im Form "BilderDBLoc", den Namen von "LocusNr" noch ändern (zZt "Text0")
Private Sub Form_Current()
Me.LocusNr.DefaultValue = Chr(34) & Me.LocusNr & Chr(34)
End Sub
Ereignis "beim Öffnen" im Form "BilderDBLoc"
Private Sub Form_Open(Cancel As Integer)
Me.LocusNr.DefaultValue = Chr(34) & Me.OpenArgs & Chr(34)
End Sub
Edit: Ändere den Formularaufruf, damit kannst Du Fehlbedienungen minimieren:
If Not IsNull(Me.LocusNr) Then _
DoCmd.OpenForm "BilderDBLoc", , , "LocusNr = '" & Me.LocusNr & "'", , acDialog, Me.LocusNr

+[Hagi]+
20.07.2006, 09:07
Hallo,
ja vielen Dank.
Es funktioniert nun soweit, dass wenn ich einen neuen DS bei dem BilderDBLoc anlegen will dort automatisch die LocusNr steht.
Allerdings wenn ich nun etwas in das Textfeld Titel eingeben möchte, bricht Access mit einem Fehler ab.
Habe die aktualisierte DB nochmals angehangen.

Danke vielmals und Gruss
Hagi

JörgG
20.07.2006, 10:06
Hallo,

das hat nichts mehr mit den Formularen zu tun, das ist Deine Datenherkunft bzw Du hast eine "Beziehungskrise" :grins: .
Wozu dient diese m:n Zwischentabelle? Nachdem was ich sehe ist das eine klassische 1:n Beziehung, eine LocusNr kann n Bilder haben, oder?

+[Hagi]+
20.07.2006, 10:30
Ja eigentlich nich...
Also die Geschichte ist folgende:
Es gibt diese Loci, denen Bilder zugeordnet werden können.
Allerdings wird es auch Bilder geben auf denen mehrere Loci zu sehen sind, dass heißt ich muss einem Bild auch mehrere Loci-Nummern zuweisen können.
Ich bin aber eh am überlegen ob das nicht zu kompliziert wird. Vielleicht vereinfache ich das Ganze einfach auf eine 1:n Beziehung und wenn ein Bild mehrere Loci zeigt, so muss man dies eben bei jedem Locus einzeln eintragen...
Hmm ich danke Dir jedefalls sehr.

Gruss
Hagi

+[Hagi]+
22.07.2006, 18:21
Hallo, ich habe eine Frage:
Wie kann ich folgenden Code so modifizieren: DoCmd.OpenForm "BilderDBFun2Ind", , , "TFNr = '" & Me.TFNr & "'", , acDialog, Me.TFNrso dass er zusätzlich noch den Wert "Me.IndNr" mitsendet?

Vielen Dank
Gruss
Hagi

JörgG
22.07.2006, 19:00
Hallo,

als Where:
DoCmd.OpenForm "BilderDBFun2Ind", , , "TFNr = '" & Me.TFNr & "' AND IndNr = " & Me!IndNr, , acDialog, Me.TFNr
bzw Me!IndNr in Hochkommas wenn Text.
als OpenArgs:
DoCmd.OpenForm "BilderDBFun2Ind", , , "TFNr = '" & Me.TFNr & "'", , acDialog, Me.TFNr & ";" & Me!IndNr
OpenArgs zerlegen:
Dim strOArg As Variant
strOArg = Split(Me.OpenArgs,";")
strOArg(0) enthält dann TFNr, strOArg(1) entsprechend die IndNr.

+[Hagi]+
22.07.2006, 19:45
Hallo,
also ich habe jetzt folgendes verwendet um mein Formular zu öffnen: DoCmd.OpenForm "BilderDBFun2Ind", , , "TFNr = '" & Me.TFNr & "' AND IndNr = " & Me!IndNr, , acDialog, Me.TFNr
In den Form_Current und Form_Open Subs habe ich folgenden Code selbstständig (deswegen vielleicht falsch) modifiziert: Me.TFNr.DefaultValue = Chr(34) & Me.TFNr & Chr(34)
Me.IndNr.DefaultValue = Chr(34) & Me.IndNr & Chr(34)Allerdings zeigt er mir beim öffnen nicht die richtige IndNr an, sondern stets 0. Der Wert wird also entweder nicht richtig übergeben oder falsch angenommen. Der DS setzt aber eben aus diesen beiden Werten als Primärschlüssel zusammen, deswegen müssen beide Werte übergeben werden.

Danke und Gruss
Hagi

JörgG
22.07.2006, 21:39
Hallo,

- prüfe den Datentyp von TFNr und IndNr (String/Zahl)
- beim DoCmd.OpenForm besitzen beide einen gültigen Wert
- gibt es auch passende DS im zu öffnenden Formular
- kontrolliere im zu öffnenden Form Feld-/Steuerelementname ("TFNr","IndNr")

DoCmd.OpenForm "BilderDBFun2Ind", , , "TFNr = '" & Me!TFNr & "' AND IndNr = " & Me!IndNr, , acDialog, Me!TFNr & ";" & Me!IndNr
im zu öffnenden Form:
Private Sub Form_Current()
Me!TFNr.DefaultValue = Chr(34) & Me!TFNr & Chr(34)
Me!IndNr.DefaultValue = Chr(34) & Me!IndNr & Chr(34)
End Sub

Private Sub Form_Open(Cancel As Integer)
Dim strOArg As Variant
strOArg = Split(Me.OpenArgs,";")
Me!TFNr.DefaultValue = Chr(34) & strOArg(0) & Chr(34)
Me!IndNr.DefaultValue = Chr(34) & strOArg(1) & Chr(34)
End Sub

+[Hagi]+
22.07.2006, 21:48
Wahnsinn,
das funktioniert.
Vielen Dank für die Hilfe auch am Wochenende.

Gruss
Hagi