Neuigkeiten:

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

Mobiles Hauptmenü

Unterschiedliche Formulare in Abhängigkeit von Listenfeld öffnen

Begonnen von Wonneproppen, Februar 25, 2020, 13:34:53

⏪ vorheriges - nächstes ⏩

Wonneproppen

Guten Tag Zusammen,

ich habe jetzt schon länger Google und Forensuchen bemüht, konnte aber leider nicht wirklich was finden. Wenn das jemand besser kann als ich, reicht gerne auch Link  :P

Ich baue aktuell an einer "Dokumentationssoftware" für IT Netzwerke, in einer Liste habe ich alle Geräte (PC, Notebooks, Server, Firewalls etc.) aufgelistet. Nun möchte ich, per Doppelklick auf den Eintrag in der Liste das entsprechen richtige Formular mit dem angeklickten Datensatz öffnen. (Wenn ich also beispielsweise auf einen dokumentierten PC doppelt klicke, soll sich das Formular f_geraet_pc öffnen, bei Servern f_geraet_server usw.)

Ich hätte bisher ein Lösung per IF Anweisung in VBA angestrebt, ich weis nur leider nicht wie ich gezielt ein Feld aus der Liste für meinen Sinn richtig ansprechen kann.
Öffnen würde ich das Formular dann mit z.B.:
DoCmd.OpenForm "f_geraet_pc", , , "ger_nummer = " & Me!Liste19

Ein erster rudimentärer Versuch mit

If Me!Liste19.ausw_ger_bez = "PC" Then
DoCmd.OpenForm "f_geraet_pc", , , "ger_nummer = " & Me!Liste19
Else
DoCmd.OpenForm "f_geraet_server", , , "ger_nummer = " & Me!Liste19
End If

ging wie Ihr es bestimmt besser rauslesen könnt als ich :D schief.

Über Hilfe würde ich mich sehr freuend, danke. :)  Ich hoffe ich habe alle nötigen Informationen in den Post gepackt, sonst reiche ich die gerne nach.

DF6GL

Hallo,

was ist denn das "in einer Liste habe ich alle Geräte "  für eine Liste?

Ein Formular, ein Kombifeld, ein Listenfeld?  Und welchen Namen haben die?

Am besten zeigst Du einen Screenshot des Beziehungsfensters, wobei man alle Tabellen und Tabellenfeldnamen erkennen kann.


Wenn "Me!Liste19" ein Listenfeld in einem Formular ist, dann etwa so:

Sub Liste19_DblClick(Cancel as Integer)
Select case Me!Liste19.Column(0)   '0 == 1. Spalte des Listenfeldes

Case "PC"
DoCmd.OpenForm "f_geraet_pc"       ', , , "ger_nummer = " & Me!Ger_Nummer    '   die gerätenummer steht m. E. nicht im Listenfeld eher im aufrufenden Form.

Case "Server"
DoCmd.OpenForm "f_geraet_server", , , "ger_nummer = & Me!Ger_Nummer   
Case "Drucker"

................


Case else

Msgbox "Fehlauswahl"

End Select

End Sub
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Wonneproppen

#2
Hallo DF6GL,

danke :)
Immerhin bis zur "else" Fehler Message Box bin ich schon einmal gekommen. Das öffnen klappt noch nicht.
So habe ich es eingebunden:

Private Sub Liste95_DblClick(Cancel As Integer)
Select Case Me!Liste19.Column(3)

Case "PC"
DoCmd.OpenForm "f_geraet_pc", , , "ger_nummer = " & Me!Liste19

Case "Server"
DoCmd.OpenForm "f_geraet_server", , , "ger_nummer = " & Me!Liste19

Case Else
MsgBox "Fehler"

End Select
End Sub

Bei der "in einer Liste habe ich alle Geräte" handelt es sich um ein Listenfeld (Liste19) in dem Formular (f_startseite).

Die Gerätenummer, die ich zum Aufrufen des Formulars genutzt habe ist der Wert der "Gebundenen Spalte" der Liste 19. Der Aufruf an sich funktioniert soweit auch recht zuverlässig.

Das hier ist die Abfrage, die die Werte für die Liste19 ausgibt. Das Kriterium bei der ger_zuordnung ist ein Kombinationsfeld (cmbKunden) ebenfalls auf dem Formular (f_startseite).
Die t_ausw_geraete habe ich als Auswahlliste für die unterschiedlichen Geräte eingebunden.


DF6GL

Hallo,

die "ger_nummer" steht in der 2. Spalte der Abfrage (--> Liste95.Column(1)  ). Somit muss es so lauten:

DoCmd.OpenForm "f_geraet_pc", , , "ger_nummer = " & Me!Liste19.Column(1)   

sofern "ger_nummer" den Datentyp Zahl, Long aufweist.

Bei TEXT müssen Hochkommata verwendet werden:

DoCmd.OpenForm "f_geraet_pc", , , "ger_nummer = '" & Me!Liste19 & "'"
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Wonneproppen

Hallo Nochmal,
ich habe mich jetzt noch einmal ein paar Stunden durch die Foren-Welt gesucht, aber ich komme leider einfach nicht zu einer Lösung. Egal was ich mache, ich bekomme immer den CASE ELSE als Ergebnis.
Zum Testen habe ich jetzt mal die OpenForm Befehle durch MsgBox Befehle ersetzt, das Ergebnis ist leider das selbe. Ich habe außerdem die Listenzuordnungen angepasst, hier ist mir aufgefallen das sich einige Zeilen auf Liste19 bezogen hatten obwohl es um Liste95 ging.

Ich hätte jetzt mal vermutet das es an einer falschen Spaltenanordnung liegt und er deshalb keine Zuordnung hin bekommt, der Rest funktioniert ja anscheinend. Kann es eventuell an der "erweiterten" Abfrage liegen? Die Tabelle t_geraete enthält nämlich nur ein "ger_art" mit "Zahl, Long Integer" das mit der Tabelle t_ausw_geraete abgeglichen wird. Erst hier kommen dann die Begriffe PC, Server etc. vor.
Ich weis hier nicht genau, mit was dann abgeglichen werden muss, mit der Tabelle t_ausw_geraete oder mit der ger_art oder mit der Abfrage?

Hier der aktuelle Code:
Private Sub Liste95_DblClick(Cancel As Integer)

Select Case Me!Liste95.Column(0)

Case "PC"
MsgBox "1"

Case "Server"
MsgBox "2"

Case Else
MsgBox "Fehler"

End Select
End Sub

Ich versuche mal eine Rohform des Codes nach meinem Verständnis:

Private Sub Listenfeld im Formular, auf die sich der Code bezieht. _DblClick(Cancel As Integer)
Select Case Me!Listenfeld im Formular, die die Bedingungen zur Öffnung der jeweiligen Formulare enthält. .Column(Die Spalte in der Abfrage, in der das zu vergleichende Element ist.)

Case "Möglichkeit 1, also "PC""
MsgBox "1"

Case "Möglichkeit 2 ..."
MsgBox "2"

Case Else
MsgBox "Fehler"

End Select
End Sub

Ich hoffe das soweit richtig verstanden zu haben...

Vielen Dank & Gruß

MzKlMu

Hallo,
wie lautet die Abfrage für Liste95 ?
Wie lauten die Einstellungen für Liste95
- Spaltenzahl ?
- Spaltenbreiten ?
- Gebundene Spalte ?
Gruß Klaus

Wonneproppen

#6
Hallo MzKlMu,

zunächst einmal die Einstellungen der Liste:
Name: Liste95
Bezeichnungsname: Bezeichnungsfeld96
Datensatzherkunft: a_geraete_zu_kunde (Die unten erwähnte Abfrage.)
Gebundene Spalte: 2 (ger_nummer aus der Tabelle t_geraete)
Spaltenanzahl: 7
Spaltenbreite: 0cm;0cm;2,544cm;2,544cm;2,544cm
Ereignis:
Beim Doppelklick:

Private Sub Liste95_DblClick(Cancel As Integer)

Select Case Me!Liste95.Column(0)

Case "PC"
MsgBox "Fehler 1"

Case "Server"
MsgBox "Fehler 2"

Case Else
MsgBox "SCHEIß DIE WAND AN"

End Select
End Sub


Der Screenshot meiner Abfrage ist leider aus den Beiträgen verschwunden ...
Ich versuche diese mal schriftlich darzustellen:
Meine Abfrage ist besteht aus 2 Tabellen.
Tabelle 1 (t_geraete):
ger_nummer (AutoWert, Primärschlüssel)
...
ger_art (Zahl)
...

Tabelle 2 (t_ausw_geraete):
ausw_ger_id (AutoWert, Primärschlüssel)
ausw_ger_bez

Die Ausgabe ist, von links nach rechts (1-6)
1 ger_zuordnung
2 ger_nummer
3 ausw_ger_bez
4 ger_hersteller
5 ger_typ
6 ger_hostname

Für die Öffnung der unterschiedlichen Formulare ist die Nummer 3 der Abfrage von Interesse (ausw_ger_bez). Diese Spalte soll der Numerischen Zuordnung der GeräteArt einen lesbaren Namen geben.

Edit: Diese Abfrage liegt als Listenfeld auf dem Formular (f_startseite). Ein anderes Kombinationsfeld ist auf diesem Formular das Kriterium für die Spalte 1 der Abfrage und weist die Geräte der Abfrage (a_geraet_zu_kunden) einem Kunden zu.

Ich hoffe abermals dies ist verständlich  ::)

P.S.: Wie kann ich hier im Forum effektiv Bilder .. und da entdeckte ich die "Anhänge und anderen Optionen" unter der Antwort...  ;D

MzKlMu

Hallo,
lasse das Column(0) weg, dann wird die gebundene Spalte verwendet. Und die enthält ja die ger_nummer. Du musst also einfach auf die entsprechende ZAhl prüfen.
Private Sub Liste95_DblClick(Cancel As Integer)
     Select Case Me!Liste95.Column(0)
           Case 1
               MsgBox "Fehler 1"
           Case 2
               MsgBox "Fehler 2"
           Case Else
               MsgBox "xxxx"
     End Select
End Sub
Gruß Klaus