Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Ufrm in Abhängigkeit eines Listfeldes füllen

Begonnen von west20, Dezember 06, 2007, 16:26:59

⏪ vorheriges - nächstes ⏩

west20

Hallo zusammen,
ich habe folgendes problem. (größtes Problem das ich in Access und VBA nicht fit bin)

ich habe ein HF mit 3 Listfeldern über die ich die DS auswähle. Bei Click auf das letzte Listfeld sollen mit die Daten aus der Tabelle in einem Ufrm angezeigt werden. Mit öffnen eines neuen Formulars
(DoCmd.OpenForm "Frm_Recherfass", , , "IDRech = " & Me!LstRechnungen.Column(0), , acDialog) klappt das.
Aber wie befülle ich das Ufrm.
Kann ich dann im Ufrm einen DS ändern, kopieren und neu anlegen?
schon mal Dank für euere Hilfe
Tschüss

Barrabas

So ganz verstehe ich nicht.
Ein Uframe oder kurz ufo ist doch in der Regel ein Formular, dass in Hauptframe eingebettet ist.
Das hier:
ZitatDoCmd.OpenForm "Frm_Recherfass", , , "IDRech = " & Me!LstRechnungen.Column(0), , acDialog
deutet daraufhin, dass Du ein selbständiges Formular, sprich Hauptframe oder hfo aufmachen willst.
Wenn dem so ist, muß die Datenquelle des HFO Frm_Recherfass, eine Tabelle oder eine Abfrage sein, die Du mit dem Filterargument "IDRech = " & Me!LstRechnungen.Column(0) befiltern kannst.
Voraussetzung ist allerdings, dass IDRech und Me!LstRechnungen.Column(0) vom gleichen Datentyp sind.
Sollte das so sein und es wird nichts angezeigt, dann trifft die Filterbedingung nicht zu.
Mit anderen Worten, dass Formular findet keinen Datensatz, der Deiner Filterbedingung entspricht.

Um herauszufinden, ob das Filterargument korrekt funktioniert, setze im VBA-Editor einen Haltepunkt vor die Zeile und prüfe, was in Me!LstRechnungen.Column(0) steht.

Öffne den Abfrageassistenten und gebe diesem die Datenquelle die Datenquelle Datenquelle des HFO Frm_Recherfass. Folge dem Assistenten bis zur Fertigstellung der Abfrage.
Sodann öffne die neu erstellte Abfrage in der Entwurfsansicht und füge den ermittelten Wert ins Kriterienfeld der Spalte  IDRech ein.
Führ die Abfrage aus.
Wenn das Ergebnis eine leere Zeile ist, gibt es keinen DS mit dem Wert (z.B IdRech = 4711).

west20

Hallo Barrabass,
mit dem Satz .....wenn ich ein neues Formular meinte ich ein HF das ich öffne siehe beispiel, das Klappt ja.
ich möchte aber die Daten ins UFrm.
Gruss

Barrabas

Na dann sag mir doch, wo Dein Ufrm denn nun steckt ???

west20

Hallo Barrabas,

mein Ufrm steckt im Hfrm wie auch die 3 Listfelder.
das ufrm basiert auf einer Tabelle oder wenn du willst auch auf einer Abfrage (egal)
wenn ich im Listfield 3 bei Klick das Ereignis :
DoCmd.OpenForm "Frm_Recherfass", , , "IDRech = " & Me!LstRechnungen.Column(0), , acDialog
klappt alles der gewählte DS wird im externen Hfo angezeigt.

Das soll aber nicht so sein, der DS soll im Ufrm angezeigt werden. Dazu muss ich mich ebenfalls auf Column(0) beziehen, aber wie?

DF6GL

Hallo,

schreib einfach im Ufo-Steuerelement in den Eigenschaften "Verknüpfen von"   

IDRech

und in "Verknüpfen nach"

LstRechnungen

hinein.

west20

Hallo DF6GL,
danke für die Antwort, aber bringt nix.
ich habe im Feld der Eigenschaften des Ufrm1 (befinden sich im Hfo) Verknüpfen von IDRech(ist als Feld im Ufrm vorhanden) eingegeben, im Feld Verknüpfen nach LSTRechnungen (Ist Listenfeld im gleichen HFO dort in Column(0) steht die IDrech) muß ich noch irgendwas eingeben was die Anzeige auslöst? bei Focuserhalt oder nach Aktualisierung oder ... ?


Zum gleichen Thema interessehalber.
beispiel.
ein HFO1 mit UFrm1 und einem weiteren HFO2 das auf Abfrage beruht.
Ich wähle im Ufm1 aus und bei Klick öffne ich HFO2 in der Abfrage steht im entsprechenden Feld : [Formulare]![frm_name]![Ufrm1![feldname]
das klappt.

Wenn ich das HFO2 als Ufrm2 in das HFO1 einbinde klappt das ganze nicht wieso?
und wieso nicht bei Auswahl in einem Listfield im HFO1?

Könnt mir jemand die Zusammenhänge erläutern?

schon mal besten Dank
tschüss


DF6GL

Hallo,

1)
kann ich aber nicht nochvollziehen.  Allerdings muß man schon erst mal auf einen Eintrag im Listenfeld geklickt haben.....
Siehe Bilder.


2)

Du kannst nicht alles in einen Topf werfen.  Ein UFO ist ein in einem anderen Formular eingebettetes Steuerelement, das ein bestimmtes Formular anzeigt.

www.donkarl.com?FAQ4.2

Weiterhin sind Formularfeld-Verweise in Abfragen absolut nicht empfehlenswert und sind mit Vorsicht zu geniessen .  In Deinem Fall willst Du Dich auf ein Formular beziehen, das nach Einsetzen als UFO(!) in einem Hauptform gar nicht mehr als eigenständig geöffnetes Form existiert.







[Anhang gelöscht durch Administrator]

west20

Hallo DF6GL,
danke für deine Bemühungen,
deine Bilder sagen mir insoweit etwas, das du dich im Listenfeld auf das Unterformular beziehst (Datensatzherkunft des Listenfeldes ist das Unterformular)richtig?
Bei mir wäre es aber umgekehrt. (Auswahl in Liste, Anzeige in Ufo)

Und zu deinen Antwort: Ufo nicht in einem anderen sondern im gleichen Formular
Ich hab mal meine Db angehängt.
Vielleicht kannst du ja mal schauen wo´s hackt.
Tschüss

[Anhang gelöscht durch Administrator]

DF6GL

HAllo,

wieso umgekehrt?


Es ist egal, woher der Verknüpfungswert kommt. Im UFO wird der DS angezeigt, bei dem die Werte der Verknüpfungsfelder übereinstimmen.


Wirf die Abfrage "abf_Rechnungen" weg (d. h. eigentlich den darin enthaltenen Verweis auf das Formular-Listenfeld, siehe mein vorheriges Posting... ) und setz die Datenherkunft des Formulares "ufr_rechnungen1" auf die Tabelle "Rechnungen".

west20

Hallo DF6GL,
vielen Dank, mit deinen Tips klappt es so wie ich es mir dachte - endlich.
Das mit den Beziehungen (egal in welche Richtung) war mir nicht bewußt.
Wenn ich nun den ausgewählten DS in einen Bericht übergeben will mit den weiteren Feldern aus den Tabellen Kunden und Objekte, wie mach ich das am besten?
Ich dachte an eine Abfrage in der alle Felder vorhanden sind, der Bericht beruht auf dieser Abfrage, in der Abfrage wähle ich als RechNr die Rechnr aus dem Ufrm - oder ist das schlecht.
Soll ich im Bericht besser eine SQL Anweisung machen, mit Select aus den Tabellen und Where in der ich mich auf das Feld im Ufrm beziehe?
Würde mich freuen dazu eines Lösungstip von einem Profi zu bekommen.
Nochmal danke und Tschüss

DF6GL

Hallo,


normalerweise wird das so gemacht:

erstelle eine Abfrage ohne Kriterien(!) über alle nötigen Tabellen für den Bericht. Wenn nur eine Tabelle nötig, dann erübrigt sich die Abfrage.


Im Bericht wird passend gruppiert und sortiert, falls das relevant ist.


Der Bericht wird per VBA aufgerufen nach diesem Muster:

Sub btnRechnungDrucken_Click()
Docmd.Openreport "Rechnung",acpreview,,"Rechid= " & Me!Rechid   
End Sub

(kein UFO hier berücksichtigt.  Der Button befindet sich in dem Form, in dem Me!RechId vorhanden ist)


west20

Hallo DF6GL,
dank deiner Hilfe habe ich ja jetzt mein HFO mit Listenfeldern und UFO hinbekommen.
jetzt habe ich mir im UFO einen Button eingebaut mit dem ich einen neuen Datensatz hinzufügen kann. Er wird auch hinzugefügt, allerdings nicht angezeigt. Erst nachdem ich im HFO im Listenfeld geklickt habe. (Focus gesetzt?) Hier mal mein Code der mir einen neuen Datensatz anfügt.

Private Sub btn_neue_Rechnung_Click()
Dim Merk, rs As DAO.Recordset, Ctl As Control
Set rs = Me.RecordsetClone
rs.AddNew
For Each Ctl In Me.Controls
If InStr(Ctl.Tag, "N") > 0 Then
  rs(Ctl.ControlSource) = Ctl.Value
End If
Next
Merk = NeueNr("RechNr")
rs!Rechnr = Merk
rs!IDObj = Me.Parent!LstObjekte
'rs!Zahlweise = Me!Zahlweise
'rs!Rech_ja_nein = 1
'rs!Rechzeitraum = Me!Rechzeitraum
'rs!Rechdat = Me!Rechdat
'rs!Rechtext1 = " "
'rs!Rechtext2 = " "
'rs!Rechtext3 = " "
'rs!netto1 = 0
'rs!netto2 = 0
'rs!netto3 = 0
'rs!MWst = Me!MWst
'rs!Preis = Me!Preis
rs.Update
Me.Requery
Set rs = Me.RecordsetClone
rs.FindFirst "RechNr=" & Merk
If Not rs.NoMatch Then Me.Bookmark = rs.Bookmark
End Sub

Ich habe auch schon Karl Donaubauers Seiten FAQ 4.4 gelesen bin aber nicht schlauer geworden. Ich denke ich müsste das HFO aktualisieren und den Focus auf das Listenfeld3 und dort auf den ersten DS setzen. Vielleicht lieg ich da auch falsch. Könntest du mir bitte nochmal einen Tip geben?
Tschüss

DF6GL

Hallo,


ja da muß wohl so sein, weil das Listenfeld noch nichts von diesem neuen Ds weiß...


Auch ein Requery auf das Listenfeld wird vermutlich das Problem allein nicht lösen.

Versuch mal:

Sub Form_Afterupdate()
Me.Parent.Listenfeld.Requery
Me.Parent.Listenfeld=Me!Rechnr
Me.Requery
End Sub


wenn die Felder(und Namen)  so stimmen....

west20

Hallo DF6GL,
Danke für deinen Vorschlag. Listenfeld heißt LstRechnungen.
Ich hab deine Zeilen mal in mein UFO beim Ereignis Btn_neueRechnung in meinen Code eingebaut.
Auszug aus dem Code

rs.Update
Me.Requery
Set rs = Me.RecordsetClone
rs.FindFirst "RechNr=" & Merk
Me.Parent.LstRechnungen.Requery
Me.Parent.LstRechnungen = Me!Rechnr
Me.Parent.LstRechnungen.SetFocus
Me.Requery
If Not rs.NoMatch Then Me.Bookmark = rs.Bookmark
End Sub

Der neue DS wird mir im Listenfeld sofort angezeigt, aber nicht im UFO. Erst wenn ich ihn im Listenfeld auswähle erscheint er auch im UFO, was fehlt denn da noch? Es müsste ja im Listenfeld der erste DS ausgewählt werden. (Der neue steht immer oben)
Tschüss