Juli 12, 2020, 18:38:18

Neuigkeiten:

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


Unterformular mit Textfeld binden

Begonnen von Denis, Mai 04, 2020, 18:57:49

⏪ vorheriges - nächstes ⏩

Denis

Hallo Zusammen, ich bin der Neue und hoffe durch eure Hilfe eine Lösung für mein "banales" Problem zu finden. Eigentlich ganz einfach (dachte ich) aber ich kriege es überhaupt nicht hin und finde keinen einzigen passenden Beitrag im Web.

- Ich habe die Tabelle "Baureihe" mit Spalte "BaureiheID" (Format = Text) und  Spalte "Maßnahme" (Format = Text).
- Ich habe ein Formular mit einem ungebundenen Textfeld, in welches ich die "BaureiheID" eingeben möchte.
- In diesem Formular ist auch ein Unterformular eingebettet, welches alle Baureihen und Maßnahmen in der Tabelle "Baureihe" zeigt.

Ich bekomme das Textfeld nicht mit dem Unterformular verbunden, sodass nur die "Maßnahmen" angezeigt werden, die zur entsprechenden Baureihe im Textfeld passen. So schwer kann das doch nicht sein.

Ich habe Access 365 ProPlus. Bitte helft mir, ich verzweifel noch.




MzKlMu

Hallo,
normalerweise wird das Unterformular mit dem Hauptformular über die Eiegnschaften "Verknüpfen von/nach"  verbunden und nicht über ein Textfeld. Im Hafo zeigt man dann die Felder der Baureihe an.
Dann kann man im Hafo blättern und im Ufo werden automatisch die passenden Maßnahmen angezeigt.
Zum Suchen verwendet an ein extra Feld/Kombinationsfeld das im Hafo die Baureihe sucht und anzeigt.
Zitat"BaureiheID" (Format = Text)
Für eine ID verwendet man im Regelfall eine Zahl (meist Autowert). Texte sind nicht so geeignet.

Zeige mal ein Bild des Beziehungsfensters.

Gruß
Klaus

Denis

Hallo MzKlMu

die Verbindung eines Kombinationsfeldes mit dem Unterformular war mein erster Ansatz. Den hab ich aber auch nicht hinbekommen. Also geht mein Ansatz Textfeld (statt Kombinationsfeld) mit Unterformular verbinden nicht???

Zitat von: MzKlMu am Mai 04, 2020, 19:17:01
Zitat"BaureiheID" (Format = Text)
Für eine ID verwendet man im Regelfall eine Zahl (meist Autowert). Texte sind nicht so geeignet.


Mein Fehler, der Primärschlüssel ist tatsächlich eine Zahl, ich hab nur die Bezeichnung der Spalte nicht gut gewählt. Werde ich ändern, danke für den Hinweis.

Welches Beziehungsfenster meinst Du? Ich hab doch nur eine einzige Tabelle, ein Formular und ein Unterformular.

Natürlich will ich später mit mehreren Tabellen arbeiten, aber das ist ein anderes Thema. Vorerst will ich es im Kleinen bewerkstelligen um generell zu kapieren wie es geht.

DF6GL

Hallo,


ZitatAlso geht mein Ansatz Textfeld (statt Kombinationsfeld) mit Unterformular verbinden nicht???


doch, das geht:

Schreibe in die UFO-Steuerelement-Eigenschaft "Verknüpfen nach"  den Namen des ungebundenen Textfeldes


Aber wie Klaus schon anmerkt, ist das eher eine Krücke denn vernünftige Bedienung.


ZitatVorerst will ich es im Kleinen bewerkstelligen um generell zu kapieren wie es geht.


Dann beschäftige Dich zunächst nicht mit solchen exotischen Sachen, sondern lies u. st. Links 1, 1a und 1b, soll heißen mit Tabellenaufbau und Beziehungen. 

Formulare/Berichte kommen später an die Reihe.

Denis

Mein eigentliches Projekt besteht mittlerweile aus 25 Tabellen und 4 Formularen mit etlichen Beziehungen. Darin funktioniert bislang alles einwandfrei, bin also kein Vollanfänger aber dennoch sehr weit vom Durchsteiger entfernt. Unsicherheiten hab ich überall dort, wo ich noch keinen Erfolg erzielen konnte, wie im aktuellen Thema.

Also gut, dann gehe ich jetzt einen Schritt zurück und versuche nochmal das Unterformular mit einem Kombinationsfeld in einem Hauptformular zu verknüpfen.

- habe erstellt tblBaureihe mit Primarschlüssel namens "BaureiheID" auf Autowert und Spalte "Baureihe" (=Text)
- habe erstellt tblMassnahme mit Primärschlüssel namens MassnahmeID auf Autowert sowie Spalte "BaureiheID"
- habe Beziehung erstellt zwischen beiden Tabellen über "BaureiheID"

--> funktioniert einwandfrei....bis hier ist alles gut

- habe Formular erstellt mit Unterformular aus tblMassnahme und Kombinationsfeld aus tblBaureihe
- habe im Unterformular-Eigenschaftenblatt der Daten Verknüpfen nach "Baureihe"
- habe im Unterformular-Eigenschaftenblatt der Daten Verknüpfen von "Baureihe"

mit dem Ergebnis, dass wenn ich in die Formularansicht wechsle das Pop-Up "Parameterwert eing..." aufkommt. Ich geb den Parameter ein und die Tabelle stimmt zwar, reagiert aber nicht auf meine Neueinstellung im Kombinationsfeld. Irgendwas hab ich noch falsch und komme nicht weiter.

MzKlMu

Hallo,
Du sollt hier auch kein Kombifeld verknüpfen. Das habe ich auch nicht gesagt.
Du brauchst hier ein Hauptformular zur Anzeige der Baureihe und darin ein Unterformular das über die Schlüsselfelder (BaureiheID) der Tabellen (keine Textfeld und kein Kombi) verknüpft wird.
Das Ufo zeigt dann automatisch die passenden Maßnahmen an.
Lege dann im Hafo ein Kombifeld an (ungebunden) und verpasse ihm den Namen "cboBaureihe" und hinterlege im Ereignis "Nach Aktualisierung" des Kombis folgenden Code an:
Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[BaureiheID] = " & Me.cboBaureihe
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark

Für das Kombifeld legst Du eine Abfrage an mit dem Primärschlüssel als erste Spalte und dem Namen der Baureihe als 2. Spalte.
Einstellungen Kombi:
Spaltenzahl: 2
Spaltenbreite: 0cm;5cm
Gebundene Spalte: 1

Du kannst dann im Kombi eine Baureihe mit Klartext auswählen und das Hafo wird auf diese Baureihe positioniert. Das Ufo syncronisiert sich automatisch.
Gruß
Klaus

Denis

Hallo MzKlMu

vielen Dank für die Hilfestellung, die war jetzt leider zu kompakt. Ich krieg es trotzdem nicht hin, wahrscheinlich weil ich da etwas falsch umsetze. Ich hänge schon hier fest:

Zitat von: MzKlMu am Mai 05, 2020, 10:27:56
Du brauchst hier ein Hauptformular zur Anzeige der Baureihe und darin ein Unterformular das über die Schlüsselfelder (BaureiheID) der Tabellen (keine Textfeld und kein Kombi) verknüpft wird.
.

Ich glaube ich brauch die detaillierte Anleitung für Einsteiger.

Folgendes hab ich gemacht:
1. ein leeres Formular erstellt
2. darin ein Unterformular über Steuerelement erstellt, das Herkunftsobjekt ist tblMassnahme. Jetzt hab ich alle Massnahmen und Baureihen in der Tabellenansicht, passt soweit.
3. Im Ufo hab ich im Eigenschaftsblatt / Daten / Verknüpfen nach "BaureiheID" und Verknüpfen von "BaureiheID" eingestellt. Jetzt stimmt die Tabelle nicht mehr, was ich auch erwartet habe.
4. Habe dann ein ungebundenes Kombifeld erstellt mit Beschriftung "cboBaureihe" und Datensatzherkunft SELECT [tblBaureihe].[BaureiheID] FROM tblBaureihe;
5. Im Eigenschaftenblatt des Kombifeldes wähle ich nach Aktualisierung, sodass im Pop-Up der Code-Generator ausgewählt werden kann. Deinen Code hab ich dann ins VBA reinkopiert. Das sieht jetzt so aus:

Option Compare Database

Private Sub Kombinationsfeld14_AfterUpdate()
Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[BaureiheID] = " & Me.cboBaureihe
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub


6. Dann habe ich den Abfrageentwurf "qryBaureihe" gemacht und dabei tblBaureihe ausgewählt.  Primärschlüssel ist "BaureiheID" und Namen der Baureihe als 2. Spalte.

Wenn ich jetzt in der Formularansicht etwas im Kombifeld auswählen will, öffnet sich der Debugger:

"Fehler beim Kompilieren. Methode oder Datenbankobjekt nicht gefunden."

und .cboBaureihe ist dann blau hinterlegt / markiert

Mit Deinen Einstellungen für das Kombifeld kommt keine Fehlemeldung, aber das Feld läßt sich dann nicht mehr öffnen.

Wo ist der Wurm drin?

MzKlMu

Hallo,
ZitatWo ist der Wurm drin?

In allem, da ist gar nix richtig.
Zu 1)
Das Hafo darf nicht leer sein, das muss die Tabelle "Baureihen" als Datenherkunft haben und die Daten der Baureihen als je ein Datensatz anzeigen.
Zu 2)
Ein Unterformaule ist ein ganz normales Formular das als Unterformular in das Hafo mit der Maus gezogen wird. Herkunftsobjekt tblMassnahme ist falsch. Herkunftsobjekt ist das normal erstellte Formular (nicht das Hafo). Du hast also im Datenbankfenster diese beiden Formulare stehen.
ZitatJetzt hab ich alle Massnahmen und Baureihen in der Tabellenansicht, passt soweit.

Nein, das kann nicht passen. In der Tabelle Maßnahmen können (außer dem Fremdschlüsselfeld) keine Daten der Baureihe sein.
Zu 3)
Das geht bei Deinem Aufbau der falsch ist nicht.
4, 5 und 6 sind so nicht möglich.

Wenn Du Baureihen hast und zu gehörende Maßnahmen, dann muss es doch mindestens diese beiden Tabellen geben. Ich fürchte, da fehlt auch noch weitere Tabellen. Was sind denn dass für Maßnahmen die einer Baureihe zugeordnet werden.
Zeige bitte mal ein Beziehungsbild mit den beiden Tabellen  auf dem man auch die Feldnamen der Tabellen vollständig sieht. Ich mache Dir ein Beispiel.
Gruß
Klaus

Denis

Hallo MzKlMu
herzlichen Dank für Deine Mühe. Ich dachte mir schon, dass ich was grundsätzliches falsch gemacht habe, deswegen habe ich mein Vorgehen so detailliert beschrieben.

Jetzt muss ich sagen, dass ich grad vom Glauben abfalle. Alle meine Formulare wurden bislang so erstellt (also als leeres Formular), dann manuell von mir befüllt, sodass ich jetzt ein dickes Konstrukt  habe, welches tatsächlich so funktioniert, wie erhofft. Darin habe ich dutzende Steuerelemente drin, die auch alle einwandfrei (zumindest aus meiner Sicht) funktionieren. Effektiv gesehen werde ich dafür wahrscheinlich auf dem Scheiterhaufen landen, weil da wohl nicht nur der Wurm drin ist, sondern alles falsch ist (und es funktioniert trotzdem, zumindest für meine Anfängeransprüche).  Ich werde es natürlich komplett überarbeiten. Ich dachte nicht, dass ein leeres Formular befüllt mit Steuerelementen immer noch als "Leeres Formular" betrachtet wird.

Zitat von: MzKlMu am Mai 05, 2020, 17:37:10
Nein, das kann nicht passen. In der Tabelle Maßnahmen können (außer dem Fremdschlüsselfeld) keine Daten der Baureihe sein.
Zu 3)
Das geht bei Deinem Aufbau der falsch ist nicht.
4, 5 und 6 sind so nicht möglich.


Ich schwöre, dem ist so. Deswegen ist mir nicht in den Sinn gekommen, dass ich so einen großen Fehler gemacht habe. Habe allerdings vergessen zu erwähnen, dass ich über die Feldliste den Primärschlüssel BaureiheID und die Spalte Baureihe reingezogen habe. Die Tabelle ist da, sowie die ID und die Bezeichnung.

Habe ein Bild der Beziehung mal hochgeladen. Da steckt aktuell nicht viel dahinter, da das noch meine Lernplattform ist. Aber so ähnlich wird es später sein. Übliche Maßnahmen sind Reparatur, Inspektion, Austausch, Überprüfung, etc.

Hab jetzt über den Formularassistenten die Formulare "frmBaureihe" sowie "frmMassnahme" erstellt. In "frmBaureihe" hab ich das Ufo "frmMassnahme" einfach rein gezogen. Über den Datensatz kann ich jetzt auswählen und es filtert wie gewünscht. Funktionierte auf Anhieb, vielen Dank für den Hinweis. Kaum macht man's richtig, geht's  ;)

Ich werde jetzt noch versuchen das Thema mit dem Textfeld zu realisieren. Jedes Deiner Feedbacks ist hilfreich für mich, vielen Dank!!!


MzKlMu

Hallo,
ZitatIch dachte nicht, dass ein leeres Formular befüllt mit Steuerelementen immer noch als "Leeres Formular" betrachtet wird.
Ein leeres Formular enthält für mich nix. Wenn da Steuerelemente drin sind, ist es nicht mehr leer.

Zu den Beziehungen:
Das geht so nicht. Dir fehlt noch eine Tabelle zur Zuordnung der Maßnahmen zur Baureihe. In diese Tabelle kommt dann ein Fremdschlüssel (FS) zur Baureihe und ein FS zur Maßnahme. Da nennt sich dann n:m Beziehung zu der 3 Tabellen (mit 2 1:n Beziehungen) erforderlich sind. Die Maßmahmentabelle enthält dann alle Maßnahmen die vorkommen können (Reparatur, Inspektion, Austausch, Überprüfung, etc.) als je ein Datensatz mit einem Primärschlüsselfeld.
Die Felder Startdatum und Enddatum müssen dann in die neue Zuordnungstabelle.

Was steht im Feld Bezeichnung ?
Gruß
Klaus

Beaker s.a.

Hallo,
@Klaus
ZitatEin leeres Formular enthält für mich nix. Wenn da Steuerelemente drin sind, ist es nicht mehr leer.

Na ja, wenn die alle ungebunden sind, wird trotzdem nix angezeigt  ;)

@Denis
Als Anlage eine allgemeine Umsetzung von dem was Klaus dir erklärt hat.
Mit dem Formularen kannst du die Zwischentabelle (n:m) von beiden Seiten
aus befüllen. Du musst nur die Benamsung*) und die Daten an deine DB
anpassen. Für die Beispieldaten habe ich die Beziehung von Artikeln zu
Lieferanten herangezogen.

gruss ekkehard

*) Bis auf die UFo- und Kombicontrols haben alle Steuerelemente KEINE
ordentliche Benennung; - bei Übernahme, in welcher Form auch immer, 
unbedingt ändern!
--
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.

Denis

Hallo Zusammen,

vielen herzlichen Dank für die Unterstützung.

Tatsächlich ist die Lösung wie Ihr sie beschrieben habt sehr einfach umzusetzen, sofern man die Primär- und Fremdschlüssel richtig gesetzt hat. Hab es jetzt so aufgebaut wie MzKlMu beschrieben hat und es funktioniert einwandfrei.

Zitat von: MzKlMu am Mai 06, 2020, 11:41:45
Was steht im Feld Bezeichnung ?


Die "Bezeichnung" ist der Name der Maßnahme (z.B. Reparatur, Inspektion, etc.). Es gibt insg. 5 definierte Bezeichnungen.

Die "Maßnahme" ist die detaillierte Beschreibung der Aktivität (z.B. Prüfe den roten Schlauch auf Versprödungen). Davon gibt es unendlich viele und müssen von Fall zu Fall neu definiert werden. Wie ich die jetzt in das neue Konstrukt rein bekomme weiß ich noch nicht genau, aber lasst mich raten: ich brauche eine neue Tabelle, richtig? Diesen neuen Primärschlüssel bau ich dann als neue Spalte in meine Zuordnungstabelle als Fremdschlüssel mit ein, so wie die anderen beiden Fremdschlüssel auch, richtig?

Die aktuelle Beziehung hab ich beigefügt. Den Umbau mach ich dann anschließend, wenn Ihr der Meinung seid, das ich jetzt aufm richtigen Weg bin.

Besten Dank vorab und Gruß

MzKlMu

Hallo,
so ist es richtig.
Nur noch eine Frage, was ist der Unterschied zwischen Maßnahme und Bezeichnung ?
Gruß
Klaus

Denis

Ganz platt gesagt ist die Bezeichnung ein Wort (kurzer Text) und die Maßnahme mehrere Sätze (langer Text) mit Leerstellen, Zahlen und Buchstaben.

Über die Bezeichnung werden dann später diverse Aktivitätsreporte definiert, welcher unterschiedlich aufgebaut sind (z.B. der Inspektionsreport beinhaltet keine Artikel/Ersatzteile für die Reparatur, der Reparaturreport aber sehr wohl, bei einer Wartung kommen dann noch Prüfanweisungen mit Soll- und gemessenen Istwerten dazu, usw.).

Die Maßnahme ist der technische Leitfaden für den Techniker vor Ort der es dann umsetzen muss, damit er detailliert weiß, was konkret zu tun ist.

Denis

Danke. Ich habe es gemäß Beziehung im Anhang umgesetzt. Jetzt klappt es ganz gut. Aktuelle Beziehungen siehe Anhang.

Jetzt komme ich wieder zurück zu meiner eingehenden Frage. Wie bekomme ich ein Textfeld im jetzt neu generierten Hauptformular mit dem Ufo verbunden.

Hintergrund: Ich gebe die Baureihe über ein Textfeld (Steuerelement) vor. Den Wert hole ich mir per DomWert aus einer anderen Tabelle. Das Ufo soll jetzt auf den angezeigten DomWert exakt so filtern, wie er es in meinem aktuell bestehenden Konstrukt auch tut. Krieg ich das mit eurer Hilfe hin?