PDA

Vollständige Version anzeigen : Aus Formular anderes Formular öffnen und in diesem Listenfeld filtern


asphalt
25.09.2003, 15:43
Hallo Community,

ich habe ein Formular von dem aus mittels befehlschaltfläche ein anderes formular geöffnet wird. mittels der angeführten zeile erfolgt das öffnen

DoCmd.OpenForm "frm_Bestellungen", , , "adre_id =" & Me!ADRE_ID

man sieht es sollen alle datensätze angezeigt werden mit der adre_id aus meinen ausgangsformular.



in diesem neu geöffneten formular habe ich auch ein listenfeld das alle datensätze anführt, wie kann ich auch dieses listenfeld, dass einer abfrage zugrundeliegt, an meine formular filter bedingung verknüpfen.

wäre super wenn ich einen tipp erhalten könnte

thx

Nouba
25.09.2003, 16:39
Hallo,

du könntest die Abfrage für das Listenfeld neu an die RowSource zuweisen, wobei der AusdruckstrSQL = "... " _
& "WHERE adre_id = " & Me!ADRE_ID
vom aufrufenden Formular in den Abfragetext eingepflegt werden kann.

asphalt
26.09.2003, 09:46
ist eine gute idee, hab ich auch probiert leider ist mein sql-code der abfrage die normalerweise gültigkeit hat ziemlich komplex.
ich hab mir jetzt 2 möglichkeiten überlegt.
1. ich binde ein 2. Listenfeld auf das Formular, das nur sichtbar wird wenn ein anders formular dieses formular aufruft oder
2. ich erstelle mir wieder eine abfrage die ich abspeichere und dann dem listenfeld die ursprüngliche mit der aktuellen zuweise.

die 1. Lösung ist halt eher eine russische

bei der 2. weiss ich nicht wie ich dem listenfeld die original abfrage entferne und die aktuelle zuweise.

vielleicht kann mir jemand einen tip geben

thx

Nouba
26.09.2003, 09:58
Hallo,

die Komplexität hat doch nichts mit einer Zeichenkettenverküpfung zu tun. Öffne die Abfrage und stelle einen Parameter (z.B. [X]) in der Abfrage ein. Dann gehst Du in die SQL-Ansicht und kopierst das Klamüser. Im VBA-Editor weist Du exakt diesen Text der RowSource des Listenfelds zu, wobei statt X, oben aufgezeigte Methode verwendet wird.

Wenn Du den Listenfeldnamen und die Abfrage als Text postest, kann man Dir auch sowas zusammenstellen.

asphalt
26.09.2003, 10:53
gelöscht

asphalt
26.09.2003, 10:55
hallo nouba,

aus deiner erklärung werde ich nicht schlau

das ist der sql-code der originalen abfrage ergänzt mit dem zusätzlichen kriterium adre_id (AND ((tbl_ADRE.ADRE_ID)=[forms]![frm_Kunden_HFo_]![adre_id]) )
wenn ich diese zeile ins vba in einer sqlstring variable abspeichere dann habe ich fehlermeldungen, ich verwende nämlich splaten die aus anderen feldern zusammengesetz werden

SELECT tbl_Bestellungen_1.Bestell_Nr, tbl_Bestellungen_1.Bestelldatum, [adre_name] & (" "+[ADRE_Vorname]) & (", "+[adre_name_zusatz]) & (", "+[tbl_Bestellungen_1].[Rechnung_Kont_Name]) & (", "+[tbl_Bestellungen_1].[Rechnung_strasse]) & ", " & [tbl_Bestellungen_1].[Rechnung_plz] & " " & [tbl_Bestellungen_1].[Rechnung_ort] & ", " & [tbl_Bestellungen_1].[Rechnung_Land] & " ( " & [akat_name] & " )" AS Adresse, tbl_ADRE.ADRE_Name, tbl_ADRE.ADRE_ID, tbl_Bestellungen_1.Saison, tbl_Saisonen.Saison
FROM (tbl_AKAT INNER JOIN tbl_ADRE ON tbl_AKAT.AKAT_ID = tbl_ADRE.ADRE_AKAT_ID) INNER JOIN (tbl_Saisonen INNER JOIN tbl_Bestellungen_1 ON tbl_Saisonen.Saison_ID = tbl_Bestellungen_1.Saison) ON tbl_ADRE.ADRE_ID = tbl_Bestellungen_1.ADRE_ID
WHERE ((([adre_name] & (" "+[ADRE_Vorname]) & (", "+[adre_name_zusatz]) & (", "+[tbl_Bestellungen_1].[Rechnung_Kont_Name]) & (", "+[tbl_Bestellungen_1].[Rechnung_strasse]) & ", " & [tbl_Bestellungen_1].[Rechnung_plz] & " " & [tbl_Bestellungen_1].[Rechnung_ort] & ", " & [tbl_Bestellungen_1].[Rechnung_Land] & " ( " & [akat_name] & " )") Like "*" & [forms]![frm_Bestellungen_HFo_1]![such_Wildcard] & "*") AND ((tbl_ADRE.ADRE_Name) Like [forms]![frm_Bestellungen_HFo_1]![such_A] & "*" Or (tbl_ADRE.ADRE_Name) Like [forms]![frm_Bestellungen_HFo_1]![such_b] & "*") AND ((tbl_ADRE.ADRE_ID)=[forms]![frm_Kunden_HFo_]![adre_id]) AND ((tbl_Saisonen.Saison) Like [forms]![frm_Bestellungen_HFo_1]![such_saison] & "*"))
ORDER BY tbl_Bestellungen_1.Bestelldatum DESC , tbl_ADRE.ADRE_Name, tbl_ADRE.ADRE_ID;

und hier ist der code der befehlsschaltfläche des formulars von dem aus das formular frm_Bestellungen_hfo_1 geöffnet wird

Private Sub Auftrag_Click()

DoCmd.OpenForm "frm_Bestellungen_hfo_1", , , "adre_id =" & Me!ADRE_ID

End Sub


das Listenfeld im Formular frm_Bestellungen_hfo_1 heisst
Auftrag_Liste

am einfachsten wäre doch den sql-Code als abfrage abzuspeichern und der Auftrag_click Prozedur so erweitern das die abfrage Listenfeld 'auftrag_liste' durch die neue Abfrage ersetzt wird.

vielleicht kannst du mir den code angeben


thx

Nouba
26.09.2003, 12:58
Hallo,

versuchs mal hiermit.
Private Sub Auftrag_Click()

Dim strSQL As String

' da wir jetzt nur eine Adresse anzeigenm wollen,
' brauchen wir die Formularkriterien nicht
'
strSQL = strSQL & "SELECT" & vbCrLf
strSQL = strSQL & " B.Bestell_Nr" & vbCrLf
strSQL = strSQL & ", B.Bestelldatum" & vbCrLf
strSQL = strSQL & ", A.ADRE_name" & vbCrLf
strSQL = strSQL & "& (' ' + A.ADRE_Vorname)" & vbCrLf
strSQL = strSQL & "& (', ' + A.ADRE_name_zusatz])" & vbCrLf
strSQL = strSQL & "& (', ' + B.Rechnung_Kont_Name)" & vbCrLf
strSQL = strSQL & "& (', ' + B.Rechnung_strasse)" & vbCrLf
strSQL = strSQL & "& ', ' & B.Rechnung_plz" & vbCrLf
strSQL = strSQL & "& ' ' & B.Rechnung_ort" & vbCrLf
strSQL = strSQL & "& ', ' & B.Rechnung_Land" & vbCrLf
strSQL = strSQL & "& ' ( ' & K.akat_name" & vbCrLf
strSQL = strSQL & "& ' )' AS Adresse" & vbCrLf
strSQL = strSQL & ", A.ADRE_Name" & vbCrLf
strSQL = strSQL & ", A.ADRE_ID" & vbCrLf
strSQL = strSQL & ", B.Saison" & vbCrLf
' strSQL = strSQL & ", S.Saison" & vbCrLf
strSQL = strSQL & "FROM (tbl_AKAT AS K" & vbCrLf
strSQL = strSQL & " INNER JOIN tbl_ADRE AS A ON" & vbCrLf
strSQL = strSQL & " K.AKAT_ID=A.ADRE_AKAT_ID)" & vbCrLf
strSQL = strSQL & " INNER JOIN (tbl_Saisonen AS S INNER JOIN tbl_Bestellungen_1 AS B ON" & vbCrLf
strSQL = strSQL & " S.Saison_ID=B.Saison) ON" & vbCrLf
strSQL = strSQL & " A.ADRE_ID=B.ADRE_ID" & vbCrLf
strSQL = strSQL & "WHERE" & vbCrLf
' strSQL = strSQL & "(((A.ADRE_Name"
' strSQL = strSQL & "& (' ' + A.ADRE_Vorname)"
' strSQL = strSQL & "& (', ' + A.ADRE_name_zusatz])"
' strSQL = strSQL & "& (', ' + B.Rechnung_Kont_Name)"
' strSQL = strSQL & "& (', ' + B.Rechnung_strasse)"
' strSQL = strSQL & "& ', ' & B.Rechnung_plz"
' strSQL = strSQL & "& ' ' & B.Rechnung_ort"
' strSQL = strSQL & "& ', ' & B.Rechnung_Land"
' strSQL = strSQL & "& ' ( ' & K.AKAT_name"
' strSQL = strSQL & "& ' )') Like '*' & [such_Wildcard] & '*') And"
' strSQL = strSQL & " ((A.ADRE_Name) Like [such_A] & '*' Or"
' strSQL = strSQL & " (A.ADRE_Name) Like [such_b] & '*') And"
' strSQL = strSQL & " ((A.ADRE_ID) = [ADRE_ID]) And"
' strSQL = strSQL & " ((S.Saison) Like [such_saison] & '*')) And"
strSQL = strSQL & " ADRE_ID = " & Me!ADRE_ID & vbCrLf
strSQL = strSQL & "ORDER BY" & vbCrLf
strSQL = strSQL & " B.Bestelldatum DESC" & vbCrLf
' strSQL = strSQL & ", A.ADRE_Name"
' strSQL = strSQL & ", A.ADRE_ID;"


Debug.Print strSQL

DoCmd.OpenForm "frm_Bestellungen_hfo_1", , , "adre_id =" & Me!ADRE_ID
Forms("frm_Bestellungen_hfo_1")!Auftrag_Liste.RowSource = strSQL

End Sub

asphalt
26.09.2003, 13:30
hi nouba

du bist mir mit deinem code zuvorgekommen, die kriterien benötige ich serwohl weil ich noch zusätzlich die angezeigten datensätze filtern lassen möchte.

den untenangeführte code übernimmt jetzt vba.
wenn ich ihn dem listenfeld direkt zugrundelege und das kundenformular offen halte werden genau die datensätze gefiltert die ich brauche.

nur wenn ich dem listenfeld den datensatz mittels rowsource hinzufügen
will dann meldet sich vba "fehler beim kompilieren variable nicht definiert"
und makiert diesen eintrag "tbl_ADRE"
stammt von ...frm_bestellungen_Hfo_1]![Such_Wildcard] & "*") And ((tbl_ADRE.ADRE_Name)
im code hab ichs mit xxxx gekennzeichnet



sqlstring = "SELECT tbl_Bestellungen_1.Bestell_Nr, tbl_Bestellungen_1.Bestelldatum, [adre_name]" & (" " + [ADRE_VorName]) & (", " + [ADRE_Name_Zusatz]) & (", " + [tbl_Bestellungen_1].[Rechnung_Kont_Name]) & (", " + [tbl_Bestellungen_1].[Rechnung_Strasse]) & ", " & [tbl_Bestellungen_1].[Rechnung_PLZ] & " " & [tbl_Bestellungen_1].[Rechnung_Ort] & ", " & [tbl_Bestellungen_1].[Rechnung_Land] & " ( " & [akat_name] & " )" & " AS Adresse, tbl_ADRE.ADRE_Name, tbl_ADRE.ADRE_ID, tbl_Bestellungen_1.Saison, tbl_Saisonen.Saison" _
& "FROM (tbl_AKAT INNER JOIN tbl_ADRE ON tbl_AKAT.AKAT_ID = tbl_ADRE.ADRE_AKAT_ID) INNER JOIN (tbl_Saisonen INNER JOIN tbl_Bestellungen_1 ON tbl_Saisonen.Saison_ID = tbl_Bestellungen_1.Saison) ON tbl_ADRE.ADRE_ID = tbl_Bestellungen_1.ADRE_ID" _
& WHERE((([ADRE_Name] & (" " + [ADRE_VorName]) & (", " + [ADRE_Name_Zusatz]) & (", " + [tbl_Bestellungen_1].[Rechnung_Kont_Name]) & (", " + [tbl_Bestellungen_1].[Rechnung_Strasse]) & ", " & [tbl_Bestellungen_1].[Rechnung_PLZ] & " " & [tbl_Bestellungen_1].[Rechnung_Ort] & ", " & [tbl_Bestellungen_1].[Rechnung_Land] & " ( " & [akat_name] & " )") Like "*" & [Forms]!XXXXX[frm_bestellungen_Hfo_1]![Such_Wildcard] & "*") And ((tbl_ADRE.ADRE_Name) Like [Forms]![frm_bestellungen_Hfo_1]![Such_a] & "*" Or (tbl_ADRE.ADRE_Name) Like [Forms]![frm_bestellungen_Hfo_1]![Such_b] & "*") And ((tbl_ADRE.ADRE_ID) = [Forms]![frm_adre_HFo]![ADRE_ID]) And ((tbl_Saisonen.Saison) Like [Forms]![frm_bestellungen_Hfo_1]![such_Saison] & "*")) _
& "ORDER BY tbl_Bestellungen_1.Bestelldatum DESC , tbl_ADRE.ADRE_Name, tbl_ADRE.ADRE_ID"

Nouba
26.09.2003, 13:33
:confused: :confused: :confused:

asphalt
26.09.2003, 13:50
hi nouba :-)

ich kenn mich fast selbst nimmer aus

aber ich weiss dass ich eckige klammern verwenden muss

frm_bestellungen_Hfo_1]![Such_Wildcard] & "*") And (([tbl_ADRE].[ADRE_Name])

ich kann jetzt schon das formular öffnen und es werden auch die daten so
gefiltern im listenfeld, ich bekomme nur noch eine fehlermeldung

MS kann das angesprochene Feld nicht finden ¦
das blöde ist nur wenn ich auf debuggen gehe wird der ganze sql string gelb eingefärbt, jetz muss ich dieses feld finden

Nouba
26.09.2003, 13:57
Ich bin immer noch :confused:

was gibt es denn zu Filtern, wenn Du die ADRE_ID vorgibst? Vielleicht kannst Du ein Minimalbeispiel der DB gezippt hochladen.

asphalt
26.09.2003, 16:21
hi nouba

ich hab dir einen screenshot hochgeladen, ich müsste soviel ändern an der datenbank um sie dir zu schicken.

es funktioniert ganz einfach ich habe noch suchfelder auf dem zu öffnenden formular, damit kann ich die gefilterten datensätze noch einmal nach einem kriterium das der user selbst wählen kann filtern.

wenn er aus dem einen formular dieses aufruft, soll er alle aufträge des kunden sehen, dann soller der user noch selbst zum bsp nach saison
filtern können ich hoffe du bist jetzt mehr im bilde
den fehler kann ich nicht wegbringen, ich weiss aber dass bei den zusammengesetzten feldern auftritt, weil wenn ich diese spalte im listenfeld weglasse habe ich keine fehlermeldung mehr.
die erste zeile im oben angeführten code



thx a lot für deine immer vorhanden unterstützung

Nouba
26.09.2003, 16:29
Nun, wenn Du später noch weiterfiltern muß, kannst Du ja die Formular-Parameter weiterhin übergeben - weil ich den Formurbezug falsch im Hinterkopf hatte, fehlen im auskommentierten Teil die Formularbezüge. Eventuell müßen diese noch in die Eval-Funktion(siehe FAQ 6.4) gepackt werden, falls es zu Störungen bei der Parameterabfrage kommt.

asphalt
26.09.2003, 17:04
wenn du meinen code oben anschaust ( er steht oberhalb deines),
hab ich nur die 1. zeile verwendet den rest hab ich auskommentiert.
das heisst ich gebe noch keine paramter weiter.

das problem ist diese spalte

[adre_name]" & (" " + [ADRE_VorName]) & (", " + [ADRE_Name_Zusatz]) & (", " + [tbl_Bestellungen_1].[Rechnung_Kont_Name]) & (", " + [tbl_Bestellungen_1].[Rechnung_Strasse]) & ", " & [tbl_Bestellungen_1].[Rechnung_PLZ] & " " & [tbl_Bestellungen_1].[Rechnung_Ort] & ", " & [tbl_Bestellungen_1].[Rechnung_Land] & " ( " & [akat_name] & " )" & " AS Adresse

er bringt eine fehlermeldung die ich vorher erwähnt habe, macht aber das formular auf und zeigt im listenfeld alles richtig an

ich ahb auch deinen code probiert. da steigt er bei
adre_name aus --> findet er nicht dann muss ich selbst einen wert eingeben

asphalt
26.09.2003, 17:10
ich bin schon ein bissl weitergekommen;
dein code funktioniert wenn ich im zuöffneten formular dessen abfrage erweitere mit dem adre_name dann kennt ms .

komisch

Nouba
26.09.2003, 18:24
hast Du Dir mal überlegt, warum ich ' statt " verwendet habe?

VBA benutzt " zum Eingrenzen von Zeichenketten. Wenn man ein einzelnes " einer Variablen übermitteln will, sähe das so aus: x = """" - das sieht ziemlich blöde aus und ist schwer lesbar. Um dem Problem aus dem Weg zu gehen, habe ich ' benutzt.

Der Anfang aus Deinem letzten Kodeschnipsel könnte so
[adre_name] & ("" "" + [ADRE_VorName]) & ("", "" +...
oder so
[adre_name] & (' ' + [ADRE_VorName]) & (', ' +...
aussehen.

asphalt
27.09.2003, 09:42
ja hab ich bemerkt, ist viel übersichtlisher.

mittlerweile funktionierts, hab es nach deiner Vorlage gelöst. diese prozedur will ich aber nicht mehr machen :-).

verbinde jetzt einfach eine abfrage mittels rowsource an das kombinationsfeld

ciao