PDA

Vollständige Version anzeigen : Formular per Button öffnen geht nicht


speedy4you
18.01.2008, 12:52
Hallo Leute,

ich habe ein Formular "FL_Start" auf dem sich ein Kombinationsfeld und ein Button "Anzeigen" befindet. Das Kombinationsfeld holt sich Daten aus einer Tabelle (Name). Mit dem Button "Anzeigen rufe ich ein anderes Formular "FL_HANDY_USER" auf.
Jetzt möchte ich aus dem Kombinationsfeld einen Namen (z.B. Müller) aussuchen und mit dem Button "Anzeigen" solle sich das Formular "FL_HANDY_USER" mit den Daten des Users "Müller" offnen. Das Formular öffnet sich aber es ist nur grau, es werden keine Daten angezeigt.

Das Formular "FL_HANDY_USER" holt sich die Daten aus einer Abfrage:
SELECT TB_HANDY.HDY_Model, TB_HANDY.HDY_IMEI, TB_HANDY.HDY_USER, TB_HANDY.HDY_ERHALTEN, TB_SIM_Karten.SIM_RUF_NR_D1, TB_SIM_Karten.SIM_KARTENNR_D1, TB_SIM_Karten.SIM_RUF_NR_EPLUS, TB_SIM_Karten.SIM_KARTENNR_EPLUS, TB_SIM_Karten.SIM_PIN, TB_SIM_Karten.SIM_Tarif, TB_SIM_Karten.SIM_LFZ_AB, TB_SIM_Karten.SIM_LFZ_BIS, TB_SIM_Karten.SIM_BUCH_KTN_D1, TB_SIM_Karten.SIM_USER
FROM TB_HANDY INNER JOIN TB_SIM_Karten ON (TB_HANDY.HDY_SIM_KARTEN_NR_D1=TB_SIM_Karten.SIM_KARTENNR_D1) AND (TB_HANDY.HDY_USER=TB_SIM_Karten.SIM_USER)
WHERE (((TB_HANDY.HDY_USER) Like forms!FL_Start!Kombinationsfeld16 & "*"));

Wenn ich die Abfrage per Hand öffne und den Namen des Users eingebe funktioniert es.

Hinter dem Button "Anzeigen" verbirgt sich folgender Code:
Private Sub Anzeigen_User_Click()
On Error GoTo Err_Anzeigen_User_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "FL_HANDY_USER"

stLinkCriteria = "[HDY_USER]=" & "'" & Me![Kombinationsfeld16] & "'"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Anzeigen_User_Click:
Exit Sub

Err_Anzeigen_User_Click:
MsgBox Err.Description
Resume Exit_Anzeigen_User_Click

End Sub

Vielleicht mache ich es mir auch viel zu schwer oder ich habe einen Denkfehler :mad:

Wer kann mir helfen

agmesia
18.01.2008, 13:12
frage zum kombinationsfeld:

hast du da auch eien autowert ID oder sowas? könnt ja vieleicht sein, das du den ID wert übergibst und nicht den namen, und das formular daher nach einem falschen wert sucht?

würd mal die gebundene spalte prüfen, und wenn die richtig ist, prüfen ob du in nach dem richtigen kriterium filterst

speedy4you
18.01.2008, 13:21
Danke für die Antwort.
Alle Tabellen haben einen AutoWert (Schlüssel).
Wenn ich die Abfrage (AF_HANDY_USER) von Hand starte funktioniert es.
Ich denke eher das es daran liegt wie der Wert aus aus dem Kombinationsfeld übergeben wird.

Zum einfachen Verständnis hänge ich mal eine Spiel-DB an.

Anne Berg
18.01.2008, 13:47
Was du da machst ist doppelt-gemoppelt: Filter in der Abfrage und im Formular!
(allerdings ist das kein Grund für den Fehler)

Ist das Firmular evtl. auf "Daten eingeben" eingestellt?

speedy4you
18.01.2008, 14:08
in allen Formularen steht "Daten eingeben" auf ja.

Anne Berg
18.01.2008, 14:12
Und was sagt die Access-Hilfe zu dieser Einstellung?! ;)

speedy4you
18.01.2008, 14:25
In der Hilfe habe ich bisher leider nichts passendes gefunden

Anne Berg
18.01.2008, 14:33
Da klickst du in die Eigenschaft und drückst F1.
Möglicherweise genügt dann auch schon ein Blick in die Statusleiste...

petbay
18.01.2008, 15:06
Hallo,

wieso du deine Daten dreimal filterst weiß ich nicht so genau,
das die Filterung bzw. die OpenArgs entweder das falsche Feld übergeben, oder in der Datenherkunft des Forms "FL_HANDY_USER" im faschen Feld das Kriterium eingetragen ist, ist sicher!

Ich würde in der Abfrage das Feld "ID" hinzufügen, und als Kriterium "[Formular]![FL_Start]![Kombinationsfeld16]" eintragen.

Den Filter kannst du dann entfernen.

Anne Berg
18.01.2008, 15:26
@petbay: Wie kommst du denn jetzt auf OpenArgs?! :eek:

@speedy: Dann öffne doch die Abfrage mal, während das Startformular geöffnet ist! ;)

Dummerweise ist der User in der Handy-Tabelle mit seinem Namen eingetragen und nicht mit seiner ID - so kannst du ihn natürlich nicht finden.
(bei Unklarheiten schau dir mal die Datenherkunft des Kombifeldes an)

petbay
18.01.2008, 16:41
@Anne: ...Kommas verzählt? Du meinst bestimmt User-Tabelle nicht Handy-Tabelle. ;)

Anne Berg
18.01.2008, 17:40
Nee, ich meinte schon den User in der Handy-Tabelle, andersrum wäre ja Quatsch. ;)
Natürlich muss der User-Name in der User-Tabelle stehen!.

speedy4you
21.01.2008, 11:24
Danke erst einmal für eure Antworten.
Stimmt natürlich, ich habe überflüssige Filter.
Die Filter im Formular "FL_HANDY_USER" habe ich raus geschmissen.
Also der User-Name muss schon aus der Usertabelle kommen.
Wie kann ich die Abfrage richtig machen bzw. geschickter?
Ich möchte auf dem Formular "FL_Start" den User-Namen auswählen und dann sollen mir die dazugehörigen Daten aus der Tabelle "TB_HANDY" und "TB_SIM_Karten" im Formular "FL_HANDY_USER" angezeigt werden.

Anne Berg
21.01.2008, 12:34
Hallo,

die einfachste Lösung wäre folgende:Private Sub Anzeigen_User_Click()
DoCmd.OpenForm "FL_HANDY_USER", , , _
"[HDY_USER] = '" & Forms!FL_Start![Kombinationsfeld16].Column(1) & "'"
End Sub

Aaber: du solltest in TB_Handy die ID des Users speichern, nicht seinen Namen.
Darüberhinaus würde ich den User in TB_SIM_Karten u.U. gar nicht speichern, da die SIM-Karte ja schon in eindeutiger Beziehung zum Handy steht bzw. stehen sollte.
(Ist es nicht so, dass ein Handy jeweils nur eine SIM-Karte haben kann? :confused: )

speedy4you
21.01.2008, 14:16
habe ich gemacht ! funktioniert prima ! :)

Besten dank noch einmal für die schnelle Hilfe.

speedy4you
22.01.2008, 12:43
Hallo Leute,
ich benötige noch einmal eure Hilfe.
Wenn ich aus dem Kombinationsfeld16 einen User auswähle und mir dann die Daten über den Button "Anzeigen" anzeigen lasse funktioniert alles super!..
solange der User auch ein Handy hat. :(
Ist dem User kein Handy zugeordnet bekomme ich nur ein leeres Fenster.
Ich muss also vorher prüfen ob der User ein Handy hat und falls nicht soll eine Msg-Box erscheinen.
Wie muss meine Prüfung aussehen?

Hinter dem Button "Anzeigen" verbirgt sich folgendes Ereignis:
Private Sub Anzeigen_User_Click()
DoCmd.OpenForm "FL_HANDY_USER", , , _
"[HDY_USER] = '" & Forms!FL_Start![Kombinationsfeld16].Column(1) & "'"
End Sub


Danke schon einmal im voraus.

bofspb
22.01.2008, 12:48
Sorry, OT:
(Ist es nicht so, dass ein Handy jeweils nur eine SIM-Karte haben kann? :confused: )

Die Zeiten ändern sich ;)
klick (http://www.connect.de/themen_spezial/Doppelt-gemoppelt_139933.html)

Anne Berg
22.01.2008, 13:05
Hallo,

du könntest das Kombifeld an eine Abfrage binden, die dir nur User mit Handy anbietet.
Andernfalls kannst du das folgendermaßen prüfen:If Not IsNull(DLookUP("ID","TB_HANDY","[HDY_USER] = '" & Forms!FL_Start![Kombinationsfeld16].Column(1) & "'")) Then
' .... Formular öffnen
@bofspb: vielen Dank für die Information.
Das Datenmodell wird mir dadurch aber nicht sympathischer. ;)
Ich meine, die SIM-Karte(n) müssten entweder einem Handy oder einem User zugeordnete werden, nicht beiden. :confused:

speedy4you
23.01.2008, 08:00
Hey,

sicherlich kann ein Handy nur eine SIM-Karte haben aber die Handys werden in regelmäßigen Abständen erneuert oder sie wechseln den User.
Also dei Zuordnung Handy => SIM-Karte kann sich ändern, wenn der user ein neues Handy bekommt.
Die Zuordnung Handy => User ändert sich natürlich dadurch auch.
Die einzige halbwegs logische Zuordnung ist meiner Meinung nach SIM-Karte => User denn meisten behält der User seine Handynummer
und wechselt nur das Handy.
geht die SIM-Karte verloren oder ist sie defekt ändert sich auch hier die Zuordnung
es sei denn der User scheidet aus der Firma aus, dann bekommt ein neuer User die SIM-Karte und das Handy.


Also es gibt viele kombinations möglichkeiten und nicht nur eine.

Die Zuordnung Handy => SIM-Karte => User mache ich ja in der SIM-Karten-oder in der Handy-Übersicht.
Also ist es eine gute Idee das Kombinationsfeld vorher zu Filtern.

Wenn erst einmal alles soweit funktioniert werde ich die Zuordnung mal überdenken und versuchen alles zu optimieren.

Besten Dank

Anne Berg
23.01.2008, 09:39
Hallo noch einmal, meiner Ansicht nach macht folgende Zuordnung Sinn:

Handy --> User
SIM-Karte --> User
SIM-Karte --> Handy

und nicht umgekehrt! Denk mal drüber nach. :)

Somit kann ein User beliebig viele Handys und SIM-Karten haben, eine SIM-Karte in einem (oder keinem) Handy stecken.

speedy4you
23.01.2008, 15:23
Danke für deinen Tip habe versucht es auch so umzusetzen.
Ich habe aber schon wieder ein Problem. :mad:
Wir haben SIM-Karten von D1 und Karten von ePlus ( "SIM_KARTENNR_D1" und SIM_KARTENNR_ePLUS).
Momentan werden mir nur die D1-Karten User angezeigt und nicht die ePlus User. Stimmt vielleicht meine Abfrage nicht? oder eine Beziehung?

Anne Berg
23.01.2008, 15:58
Das war mir doch schon aufgefallen, dafür würde ich keine zwei Felder benutzen sondern ein zusätzliches für den Typ anlegen.
Also KartenNr und Netzanbieter getrennt speichern.