PDA

Vollständige Version anzeigen : Mit CMD Form öffnen inkl.bedingungen auf andereFelder!


mike020174
11.07.2006, 22:32
Hallo zusammen,

ich suche nach einer lösung über ein cmd ein Form zu öffnen und bestimmten Datensatz anzeigen zu lassen. Das ganze soll über eine parameterfrage gelöst werden "wie[frage]" ebenfalls soll müssen bedingungen erfüllt sein true oder false auf andere felder im selben Form bzw. tabelle!


hat da jemand einen Lösungsansatz für mich?

danke Mike

Farin
12.07.2006, 06:24
meinst du so was?:

DoCmd.OpenReport "bericht1", acViewPreview, , "[Lieferantennummer] =" & Me![Kombinationsfeld1]

(zeigt alle datensätze an, die die ausgwählte lieferantennummer enthalten ...)

mfg Farin

mike020174
12.07.2006, 09:03
Na ja nicht ganz das ist ja für ein Bericht gedacht und nicht für ein Formular ich muss das ganze für ein Formular haben!

Anne Berg
12.07.2006, 11:45
Dann nimmst du halt die OpenForm-Methode, die Syntax ist ähnlich, näheres siehe Access-Hilfe!

mike020174
12.07.2006, 14:05
Hallo Anne,

gut dann würde das ganze so aussehen:

DoCmd.OpenForm "dbo_msg_board", acViewPreview, , "[Geben Sie Ihre Mitarbeiter ID ein:] =" & Me![fuer_md_id]

nur er sagt mir immer laufzeitfehler kann das im Ausdruck angesprochene feld"fuer_md_id" nicht finden! es ist aber da! Ausserdem erfolgt auch keine aufforderung zur eingabe, ok das liegt wahrscheinlich daran weill er das feld nicht findet!

ok habe gerade herausgefunde so gehts:

DoCmd.OpenForm "dbo_msg_board", acViewPreview, , "[Geben Sie Ihre Mitarbeiter ID ein:] " = " & form_dbo_msg_board![fuer_md_id]"

nur bekomme ich das ganze dann als berichtseite angezeigt und nicht in einem formular! Das kann doch nicht so schwer sein oder? Ich möchte doch nur erreichen, dass über ein cmd ein form geöffnet wird. dann eine parameterabfrage erfolgt und diverse bedingungen efüllt sind.

Ein beispiel:

20 Datensätze mit jeweils einem wert von 1 - 10 ich will mir jetzt alle Datensätze im Formular anzeigen lassen die den wert 2 haben. Wie gesagt anzeigen lassen für berarbeitung und neuen Datensatz im einem formular!

danke Mike

danke und Gruß Mike

Anne Berg
12.07.2006, 14:34
Du setzt ja auch den falschen Parameter ein - Preview steht für Seitenansicht, also Druckvorschau! :rolleyes:

Ist es so schwer, sich die Verwendung eines Befehls vor dem Einsatz mal in der Access-Hilfe (oder einem Buch) gründlich anzusehen?!

PS: Ich kann mir kaum vorstellen, dass du mit dem neuen Kriterium erfolgreich sein wirst. Wie willst du ein zu öffnendes Formular nach einem Feld auf eben diesem Formular filtern?

mike020174
12.07.2006, 18:10
Liebe Anne,

ich weis jetzt nicht warum du mich so angehst? Natürlich könnte ich mich auch in Büchern Informieren. Aber das Forum ist doch viel besser oder soll ich das so sehen, dass dieses Forum nur für ganz hartnäkige Fälle ist?

Wo ich dir Recht gebe, ist sind die FAQ, ja da werde ich in zukunft öffters nachsehen!

Aber noch mal zurück auf meine Frage oben. ich möchte es mal anders darstellen bzw. mein Problem. vieleicht gehts ja noch viel einfacher.

ich habe ein kleines Messageboard gebastelt ms-sql als Backend und Access 2003 als frontend sollen auf den clients verteilt werden. Du kannst dir sicherlich vorstellen das sobald in das messageboard (endlos Formular) mehr als 20 einträge gibt geht die sucherrei los welcher beitrag ist für mich? daher hat jeder datensatz ein feld message von mitarbeiter und message für mitarbeiter. So wie ein bit feld erledigt und nacht an alle.

da das frontend bei allen gleich, bzw ich nicht jedes frontend ändern möchte, sollen jetzt beim öffnen des message board über mehrere cmd gefragt werden welcher mitarbeiter bist du und die bedingung erledigt = o sein. So war das ganze gedacht oder hast du einen einfacheren vorschalg?

gruss Mike

Anne Berg
12.07.2006, 20:02
Ja, ich würde den Mitarbeiter nicht fragen wer er ist - er könnte mich ja anlügen und fremde Nachrichten lesen wollen - sondern seinen Windows-/Netzwerk-Anmeldenamen verwenden. ;)

Dies lässt sich mit api-Funktionen feststellen, die du u.a. auch bei Donkarl (2.24) finden kannst. Dann könnte der Formularaufruf folgendermaßen aussehen:
DoCmd.OpenForm "dbo_msg_board", acNormal, , "fuer_md_id='" & get_userID & "' AND erledigt=0"


Was meinen "rüden" Ton betrifft, so meine ich, dass ein gewisses Grundwissen schon vorausgesetzt werden dürfte, sowie die Bereitschaft, sich auch mal selbst auf die Suche zu begeben. Und zwar 1. in der Access-Hilfe und/oder einem Lehrbuch, 2. hier im Forum und 3. im Internet weit und breit - Reihenfolge nach Belieben austauschbar.
Ich meine, dazu ist der Platz hier zu schade und die Zeit der meisten Helfer auch, dass man hier Auszüge aus der Access-Hilfe zitiert, die der Betreffende sich auch leicht selbst beschaffen könnte.
Anders sehe ich den Fall, wenn jemand sagt: "in der Hilfe (oder wo auch immer) steht das und das und ich verstehe es nicht..."

mike020174
13.07.2006, 07:43
hallo anne,

natürlich setzt das ein gewisses grundwissen voraus. Mein schwerpunktbereich ist aber nicht DB sondern ich bin fisi. Du kannst mir glauben das du und die anderen hier mir in den letzten monaten so viel beigebracht haben, dass ich jedes buch zurückgeben würde. ich habe natürlich ein buch aber wie du es schon sagtest ich verstehe es nicht immer und alles was sytaxen betr. vergesse ich leider immer wieder, weill ich viel zu wenig damit arbeite. ich werde mich trozdem bemühen in zukunft etwas selbständiger zu forschen ok?

Zurück zu meiner Frage. das andere mitarbeiter die nachricht lesen ist nicht schlimm und ist sogar so geplannt. ich versuche deine syntx gleich mal. danke! Mike :-)

mike020174
13.07.2006, 08:03
hallo anne,

ich versuche mal deine Syntax in worte zu beschreiben:

DoCmd.OpenForm "dbo_msg_board", acNormal, , "fuer_md_id='" & get_userID & "' AND erledigt=0"


cmd = Comando öffne Formular, ansicht normal wofür ac steht weis ich nicht, Parameterfrage md_id und abrage des system für die win benutzer, ist & ein platzhalter?, zum schluss kommt noch die bedingung erledigt = 0,

ich habe das mal so wie es ist eingefügt, obwohl es noch kein user_id gibt. er zeigt mir nur leere felder an!

Anne Berg
13.07.2006, 11:46
Sorry, ich habe da wohl allzuviel vorausgesetzt. :eek:

"acNormal" ist aus dem Fundus der eingebauten Konstanten wobei ac wahrscheinlich für "access constant" steht. ;)

"get_userid" steht für einen Funktionsaufruf - die müsste also auch erstmal eingegeben/programmiert werden. Wenn du (noch) keine Userid einpflegst, kannst du natürlich auch nicht danach filtern. Das "&" ist in diesem Zusammenhang ein String-Verkettungszeichen.

Wenn du tatsächlich nach einer frei wählbaren UserId filtern möchtest, musst du diese wohl vorab mit einer InputBox abfragen, bzw. diesen Befehl anstelle von get_userid() einsetzen.

Beispiel:DoCmd.OpenForm "dbo_msg_board", acNormal, , "md_id='" & InputBox("Bitte UserID eingeben:", "Überschrift", "Standardwert") & "' AND erledigt=0"
wobei "md_id" das Datenfeld mit der UserId ist, welches in der Datenherkunft des aufgerufenen Formulars enthalten sein muss.

mike020174
13.07.2006, 12:27
hallo Anne,

also soweit ich das erkennen kann klappt das mit den filter ganz gut, aber er fordert mich immer zwei mal auf die ma_id einzugeben. Einmal via inputbox und einmal via parameterabfrage. eigentlich reicht mir die Parameterabfrage. nur weis ich nicht genau was ich da wegnehemn soll und was nicht, habe es schon versucht aber dann kommt immer syntaxfehler das ganze sieht jetzt so aus:

DoCmd.OpenForm "dbo_msg_board", acNormal, , "md_id='" & InputBox("Bitte UserID eingeben:", "Überschrift", "Standardwert") & "' AND msg_erledigt=0"

Anne Berg
13.07.2006, 12:36
Wie lautet denn die Datenherkunft von "dbo_msg_board"? Wonach (genau) wird in der Parameterabfrage gefragt?

mike020174
13.07.2006, 12:45
die datenherkunft ist ein ms- sql server. Die tabellen sind in die access db verknüft via odbc. die tabelle heisst dbo_msg_board genau so wie das Formular. bei der ersten eingabeauforderung steht oben überschrift und dann bitte user id eingeben. im eingabefeld steht standartwert. dann folgt die parameter abfrage nach ma_id.

Anne Berg
13.07.2006, 13:02
Ich fragte nach der Parameterabfrage, die InputBox hast du ja selbst geschrieben. Statt "Standardwert" sollte da natürlich eine sinnvolle Voreinstellung stehen, oder gar nichts! ;)

Offensichtlich ist "ma_id" kein gültiger Feldname in der Datenherkunft des Formulars, also Tabelle "dbo_msg_board", dabei hatte ich doch extra darauf hingewiesen. Ein bißchen anpassen an deine Gegebenheiten musst du unsere Vorschläge schon - oder lade eine Muster-DB hoch, an der man dir das pass-genau zeigen kann.

mike020174
13.07.2006, 17:32
ja sorry bin abgelengt worden von einem kunden. sonst hätte ich dir das schon längst geschrieben ma_id gibt es nicht nur ma_id_fuer! nein nein ich passe das schon immer selbst an nur eben mit den syntx da happert es bei mir total!

aber noch mal um es kurz zu machen es folgt eine doppelte abfrage nach ma_id_fuer und das feld gibt es auch mir reicht aber ein abfrage besser aussehen täte natürlich die inputbox. wie gesagt sonst klappt das vorzüglich nur zwei abfragen sind eine zuviel!

Es wäre deshalb schön wenn du mir die kürzen könntest!

Anne Berg
13.07.2006, 23:19
ma_id gibt es nicht nur ma_id_fuer!

nein nein ich passe das schon immer selbst anVermutlich nicht, denn sonst würdest du dich nicht über eine Parameternachfrage nach "ma_id" wundern müssen, wenn du den Datenfeldnamen (der Datenherkunft entsprechend) korrekt eingesetzt hättest... :(


... mal heißt es bei dir "fuer_ma_id" dann "ma_id_fuer" oder auch nur "ma_id" ... :confused:

... wenn du nicht begreifst, dass der Name eines Datenfeldes oder Steuerelements eine wesentliche Rolle spielt und nicht beliebig ausgetauscht werden kann, ist dir wohl nicht so leicht zu helfen.

mike020174
14.07.2006, 08:10
huten morgen anne,

ich habe doch gesagt das ich abgelengt worden bin! so sieht das ganze bei mir jetzt aus (habe ich an meinen Feldnamen angepasst):

DoCmd.OpenForm "dbo_msg_board", acNormal, , "md_id_fuer='" & InputBox("Bitte UserID eingeben:", "Überschrift", "Standardwert") & "' AND msg_erledigt=0"

versuche es doch selbst, er macht 2 mal die gleiche abfrage nach ma_id_fuer!!!

Anne Berg
14.07.2006, 08:18
Sorry, aber ich kann das nicht testen, da ich deine Datenbank und deine Tabellen, Abfragen etc. nicht kenne!

mike020174
14.07.2006, 08:29
ich habe verstanden!

Anne Berg
14.07.2006, 08:44
... wie ich eben erst bemerkt habe, gibt es nun mit "md_id_fuer" eine weitere Variante!

So lässig solltest du mit den Bezeichnungen wirklich nicht umgehen. :rolleyes:

mike020174
14.07.2006, 08:52
ma_id_fuer ist die einzige Variante, sorry wegen der ständigen wechsel! es klappt jetzt sorry wegen der verwirrung der feldnamen!

Anne Berg
14.07.2006, 08:57
... na dann ist es ja gut. ;)

mike020174
14.07.2006, 08:59
ne du lass mal das ist jetzt nicht mehr nötig war meine dummheit und deine nerven. diese möchte ich nicht überstrapazieren! es geht jetzt so wie isch das wollte und das reicht mir so! danke für deine gedult!!!! Mike