PDA

Vollständige Version anzeigen : Suchen von DS ueber Combobox im Unterformular


sellspeed
25.01.2008, 12:38
Hallo Ihr lieben,

also ich habe verzweifelt Forensuche und google gesucht aber irgendwie bekomme ich zuviele dinge die nicht passen, daher mal wieder.... Hilfe benoetigt.

Ich habe in einem Register ein Hauptformular (frmcus) und auf der naechsten seite eine subform (frmsub) wobei hier sub fuer subsidiary steht aber das sei mal egal...

Beziehung logischer weise 1:n und folgende felder verknuepft: CUS_ID aus tabelle tblcustomer welches die source fuer die frmcus ist und das 1 sowie SUB_CUS_ID aus tabelle tblsubsidiary welches die source fuer frmsub und das n ist.


Eigentliche Frage:

Ich moechte ueber eine Combobox zu einem bestimmten Datensatz in der subform springen wenn man diesen auswaehlt und das mache ich bisher so:

Private Sub Combo84_AfterUpdate()
' Find the record that matches the control.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[SUB_ID] = " & Str(Nz(Me![Combo84], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

(Ueber den Assistenten erstellt)

Die Combobox zeigt aber alle Datensaetze an die sich sozusagen in der subform befinden ich moechte aber nur diejenigen die zum dem aufgerufenen in der Hauptform gehoeren.

Einer ne idee?

Marsu65
25.01.2008, 13:05
Hallo Davor,
Wenn du nur den einen Datensatz anzeigen lassen willst gibt es grundsätzlich zwei Wege
1. Recordsource-Eigenschaft des Formulars mit deiner Bedingung ergänzen und mittels Requery neu abfragen
2. Filter auf das SubForm anwenden
Me.Filter = "[SUB_ID] = " & Str(Nz(Me![Combo84], 0))
Me.FilterOn = True

ich gehe davon aus, dass die Combobox auf dem Subform liegt?!?
Viel Spaß beim ausprobieren

ebs17
25.01.2008, 13:24
Sind auch die Formulare (nicht nur die Tabellen) miteinander verknüpft (unabhängig von der DS-Suche)?
Siehe UFo's und Registerkarten (http://www.ms-office-forum.net/forum/showthread.php?t=225167).

sellspeed
25.01.2008, 14:04
Also ich gehe davon aus das die Formulare verknuepft sind da ich sie nicht einzeln oeffnen kann im entwurfsmodus sondern diese mit dem Hauptformular auf der registerkarte verbunden sind.

Aber das :

Hallo Davor,
Wenn du nur den einen Datensatz anzeigen lassen willst gibt es grundsätzlich zwei Wege
1. Recordsource-Eigenschaft des Formulars mit deiner Bedingung ergänzen und mittels Requery neu abfragen
2. Filter auf das SubForm anwenden
Me.Filter = "[SUB_ID] = " & Str(Nz(Me![Combo84], 0))
Me.FilterOn = True

klingt gut aber wie soll das gehen. Ich weiss weder was meine Bedingung ist noch wie ich diese neu abfragen soll noch wie man filter auf subformen anwendet. Sorry aber soweit bin ich noch nicht musste erstmal lernen wie man sinnvoll db aufsetzt welche Feldnamen man verwendet welche felder man in beziehung setzt usw. Koenntest du mir das schritt fuer schritt erklaeren und wo ich das jeweils finde?

ebs17
25.01.2008, 14:14
Also ich gehe davon aus das die Formulare verknuepft

Das ist jetzt etwas dünn. Für ein Ufo-Steuerelement in einem (Haupt-) Formular gibt es die Eigenschaften "Verknüpfen von" und "Verknüpfen von".
Liegen die Formulare jetzt nicht ineinander, sondern nebeneinander (auf verschiedenen Registerkarten), benötigst Du eine Ersatzverknüpfung.

sellspeed
25.01.2008, 15:31
Wie kann ich den ueperpruefen ob sie verknuepft sind obwohl ich sicher bin sie sind es?

Arne Dieckmann
25.01.2008, 16:07
Ich denke, das ist nicht unbedingt das Problem. Das Kombifeld muss vielmehr mit dem Hauptformular "verknüpft" werden. Das erreichst du mit dem (Haupt-)Formularereignis "Beim Anzeigen":

Me!Combo84.RowSource="SELECT SUB_ID, ... FROM tblsubsidiary WHERE SUB_CUS_ID=" & Me!CUS_ID
Bei den Punkten musst du noch weitere Felder einfügen, die im Kombifeld aufgeführt werden sollen.

sellspeed
25.01.2008, 16:36
Also Ihr lieben erstmal vielen Dank aber irgendwie reden wir aneinander vorbei.

Ich kann das Steuerelement nicht an das Hauptformular binden da ich nicht aus dem Hauptformular suchen moechte. Alles was ich versuche zu erreichen ist der DB zu sagen gehe bitte innerhalb dieses Formulars von Datensatz z.Bsp Frankreich nach Datensatz Belgien und nach moeglichkeit soll in der Combobox nur die Laender stehen die Tatsaechlich mit dem Eigentlich HAuptformular verbunden sind. Die Kombobox die ich hab geht ja sie zeigt jedoch alle Datensaetze an die sich in der tabbelle befinden ich will aber nur die die sich in der Form befinden.

Ich denke ich erklaere es einfach daemlich. Es muss total simple sein.

Arne Dieckmann
25.01.2008, 16:41
Das Prinzip habe ich (denke ich) schon erkannt, der Code muss sicherlich nur noch ein wenig angepasst werden. Lade doch einmal eine abgespeckte Version mit Spieldaten (falls Datenschutz eine Rolle spielt) hoch und schreibe noch, wie die Suche/Naviagtion beispielhaft aussehen soll (im Stil ich wähle hier "A", danach wird in UFOB folgendes "XYZ" angezeigt und das Kombifeld soll nur noch Datensätze "1,2,3" anzeigen). Ich denke, dass das Problem dann schnell gelöst sein wird.

BTW: Ich schreibe "verknüpfen" nicht umsonst in Anführungszeichen. Das soll nur heissen, dass die Datensatzherkunft sich ähnlich wie bei einem UFo anpassen soll.

sellspeed
25.01.2008, 16:58
Lieben Dank dafuer, also ist angehangen, das sorgenkind ist auf der 2ten Registerkarte und ist rot. Was es suchen soll hab ich vorselektiert, das problem ist halt wenn ich im HF bei Trelleborg bin moechte ich in der Combo99 im sub auch Trelleborg zur Auswahl. Gleiches gilt fuer BAT. Im Moment hab ich beides. next problem es ist eine englische mdb ich hoffe das macht nix.

sellspeed
25.01.2008, 17:00
Lasst euch zeit eilt nicht ich hab noch soviel anderes zu basteln.... und zu lernen..... lieben Dank erstmal soweit.

Arne Dieckmann
25.01.2008, 17:13
Versuch's mal mit folgendem Code beim Formular-Ereignis "Beim Anzeigen" von "frmcus":
Private Sub Form_Current()

Me!frmsub.Form!Combo99.RowSource = "SELECT SUB_ID, SUB_CUS_ID, SUB_COMPANY, SUB_Country " & _
"FROM tblsubsidiary WHERE SUB_CUS_ID= " & Me!CUS_ID

End Sub

sellspeed
28.01.2008, 14:47
Hallo Arne,

ne leider nein. Ich finde im englichen a keine sinnvolle uebersetzung fuer "beim Anzeigen" was bedeutet ich habe eine ungebundene neue Combobox erstellt und deinen Code angepasst an den neuen Namen der Combobox.

1ster Fehler war DB findet das Feld CUS_ID nicht ist auch klar ist in dem Formular nicht enthalten also hab ich ein neues erstellt und der Textbox den Namen CUS_ID gegeben und diese mit dem Hauptformular verbunden so:

=Forms!frmcus!CUS_ID

Damit habe ich jetzt beide Felder Cus_ID und Sub_Cus_ID zum "vergleichen in der Form.

aber jetzt kann er das "Feld" frmsub nicht finden, ist doch kein Feld sondern eine Form, woran liegt denn das? Ne idee?

Formel hier nochmal von dir:

Me!frmsub.Forms!Combo109.RowSource = "SELECT SUB_ID, SUB_CUS_ID, SUB_COMPANY, SUB_Country " & _"FROM tblsubsidiary WHERE SUB_CUS_ID= " & Me!CUS_ID

naechste Frage wuerde er dann auch zu dem entsprechend datensatz springen in diesem Fall? nein oder? Da muss eigentlich ein noch mehr in den Code.....

Ich kann nicht verstehen warum ich immer auf solche Dinge stosse ich bin immer noch sicher das ist laecherlich einfach was ich moechte aber es wird immer komplizierter je mehr ich Frage..... :(


Sorry

sellspeed
28.01.2008, 15:00
Hat sich erledigt. Habs jetzt mal mit ueberlegen versucht also so sieht es jetzt richtig ausim query builder:

SELECT tblsubsidiary.SUB_ID, tblsubsidiary.SUB_CUS_ID, tblsubsidiary.SUB_Country, tblsubsidiary.SUB_COMPANY
FROM tblsubsidiary
WHERE (((tblsubsidiary.SUB_CUS_ID)=[Forms]![frmcus]![CUS_ID]));

Alptraum aber danke fuer deine Hilfe ohne den Ansatz haette es nicht geklappt. Aber ehrlich mal, diese "Formeln basteln ist doch wirklich ein Alptraum oder?......

sellspeed
28.01.2008, 15:01
Oh und Danke!