Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Access-Fehler mit Listenfeld?

Begonnen von bwergen, Juni 15, 2011, 11:48:56

⏪ vorheriges - nächstes ⏩

bwergen

Hallo,

nachdem meine letzte Frage etwas untergegangen ist, versuche ich es hier jetzt nochmal mit einem anderen der paar Probleme, die ich noch mit ACCESS 2007 habe, da ich mich nach den paar Monaten Einarbeitung noch zu wenig mit dem Programm auskenne.

Und zwar gibt es folgendes Problem: Ich habe besagtes Listenfeld, welches seine Informationen aus einer Tabelle bezieht (aus der Schlüsselspalte dieser Tabelle, da diese einzigartige Bezeichnungen enthält). Das Listenfeld enthält außerdem ein Makro (Click), es soll die Bezeichnungen mit einem Textfeld vergleichen und den jeweiligen Datensatz dann anzeigen. Wenn ein Datensatz nun angezeigt wird, und ich klicke einen Datensatz weiter (Pfeiltasten), dann bleibt der ursprüngliche Datensatz im Listenfeld markiert (also dunkel gefärbt), obwohl dieser ja gar nicht mehr angezeigt wird.

Was ich erreichen will: Die Markierung im Listenfeld soll sich dem aktuell angezeigten Datensatz anpassen.

Hier ein Foto zur Veranschaulichung:


Ich hoffe, ich habe diesmal etwas mehr Erfolg bei der Lösung dieses Problems, wenn ich die Datenbank jemandem zuschicken soll, dann mach ich auch das...

Deshalb vielen Dank schonmal für die Hilfe.

Viele Grüße,
bwergen

ulli

Grundsätzlich kannst du das erreichen, indem du dem Listenfeld nach dem Wechsel des Datensatzes den entsprechenden Wert wieder zuweist, also im "Beim Anzeigen"-Ereignis des Formulars ungefähr folgenden Code eingibst:

Me!ListeXYZ = Me!DeinTextfeld

Vorausgesetzt, ich habe das richtig verstanden, dass der Inhalt der Schlüsselspalte deines Listenfeldes mit dem Inhalt des Textfeldes immer genau übereinstimmt.

database

#2
Hallo,

Zitatnachdem meine letzte Frage etwas untergegangen ist, versuche ich es hier jetzt nochmal mit einem anderen der paar Probleme, die ich noch mit ACCESS 2007 habe, da ich mich nach den paar Monaten Einarbeitung noch zu wenig mit dem Programm auskenne.


Die Frage ist nicht untergegangen, nur sind deine Kenntnisse um die Grundfunktionen einer Datenbank sehr gering - sorry.
Ich habe dir bei deiner ersten Anfrage vorgeschlagen die SQL der Datenherkunft des Listenfeldes - sofern diese (hoffentlich) eine Abfrage ist, zur Laufzeit zu ändern.
Dieses stellt eine der Lösungsmöglichkeiten dar. Was soll ich aber groß weitere Vorschläge reinstellen, wenn du nicht weißt was eine Abfrage ist und was diese bewirkt.

Somit WÄRE folgender Lösungsweg denkbar:

Wenn du nun gemäß deiner neuerlichen Fragestellung den Datensatz wechselst, sollte sich der Inhalt des Listenfeldes entsprechend dem angezeigten Datensatz im Formular ebenfalls ändern.
Folglich muss der Inhalt des Listenfeldes mit dem angezeigten Datensatz im Formular in Beziehung stehen.
Die einfachste Form diese Beziehung dynamisch zu gestalten ist es, das Listenfeld per Access-Bordmittlen zu befüllen - also mit einer Abfrage, deren Kriterium auf den Primärschlüssel des Formulardatensatzes reagiert!
Wechselt nun der Datensatz im Formular muss nur veranlaßt werden, dass die Daten im Listenfeld NEU aufgebaut werden - also die Abfrage dahinter aktualisiert wird.

Wenn ich nun von einer SQL spreche, dann meine ich die Abfragesprache, die einer Abfrage zu Grunde liegt.
In deinem Fall KÖNNTE das so aussehen:

SELECT * FROM Nebentabelle WHERE Nebentabelle.Fremdschlüssel = Formular.Primärschlüssel

... und in dieser Form ist (sollte sein) die Datenherkunft des Listenfeldes definiert.

Wechselt nun der Datensatz im Formular wird das FORMULAREREIGNIS 'Beim Anzeigen' ausgelöst.
In der Ereignisprozedur (VBA) steht dann:

Me!NameDeinesListenfeldes.Requery
durch diesen Einzeiler sollte dann die Datenliste deines Listenfeldes dem angezeigten Datensatz angepasst erscheinen.

So wird gewährleistet, dass nur jene Daten in der Liste stehen, die dem angezeigten Datensatz im Formular entsprechen.
Um dann den gewünschten Eintrag zu markieren muss die Schlüsselspalte des Listenfeldes angesprochen werden.

Um beim Vorschlag von 'ulli' zu bleiben wäre dies wie folgt möglich:


Me!DeinListenfeld = Me!DeinTextfeld


diese Codezeile ist dann die 2. Zeile im oben angesprochenen Ereignis 'Beim Anzeigen'

HTH

bwergen

ZitatDie Frage ist nicht untergegangen, nur sind deine Kenntnisse um die Grundfunktionen einer Datenbank sehr gering - sorry.

Ein wenig unfair finde ich das jetzt schon, habe ich Dir vielleicht etwas getan? Ich habe genug andere Sachen um die Ohren und kann innerhalb von wenigen Monaten vom absoluten Anfänger nicht zum Accessprofi mutieren. Ich bin soweit schon froh, dass meine Datenbank funktioniert, wie sie funktionieren soll. Es geht ja lediglich um ein paar Zusatzfeatures, die nicht unbedingt notwendig sind, aber dennoch vielleicht ermöglicht werden könnten. Schwierig ist es nur einzuschätzen, ab wann man mit seinen Problemen anderen Leuten auf die Füße tritt, was hier vermutlich passiert ist. Ich lerne mit jeder geschriebenen Zeile hier dazu, probiere vieles selber aus und lerne dadurch auch schnell, aber wenn solche Argumente kommen, habe ich dazu wirklich keine Lust. Tut mir leid, trotzdem danke.

Viele Grüße,
bwergen

MzKlMu

Hallo,
ich finde jetzt eher Deine Kritik an Peter unfair. Und dass Du von Abfragen nichts weist, hast ja Du ja selbst geschrieben. Und sein Sorry war ja bereits eine Entschuldigung ob der etwas kritischen Worte.

Und schließlich:
Peter hat Dir in beiden Beiträgen ganze Romane mit Hinweisen geschrieben, auch in diesem Thema. Und dazu hast Du jetzt gar nichts geschrieben/nachgefragt.
Gruß Klaus

database

Hallo,

@Klaus
Danke ....

@bwergen
Ohne hier groß herum zu diskutieren ob nun der I-Punkt links oder rechts vom I geschrieben war...
Sei mir bitte nicht böse aber ich denke nicht, dass ich irgend was geschrieben habe, worüber du dich 'schlipsgetreten' fühlen müsstest.
Ich habe auch in keiner Weise irgendwie eine Erwartungshaltung kundgetan, dass du zum Profi mutieren hättest können oder müssen.
Wenn ich aber einen Lösungsvorschlag für dich hier 'rein stelle in dem von einer Abfrage die Rede ist und du nicht weißt was das ist, muss ich dich auf die fehlenden Grundkenntnisse im Datenbankumfeld hinweisen dürfen, ohne bei dir eine Sinnkrise auzulösen. Das hat mit Access nur am Rande zu tun und bezieht sich auf Datenbanken allgemein, wenngleich auch bei Access Abfragen von essentieller Wichtigkeit sind.

Zitat... anderen Leuten auf die Füße tritt, was hier vermutlich passiert ist ...
Wenn dem so wäre, hätte ich das kundgetan - obgleich ich in keiner einzigen Textstelle der gesamten Beiträge in der Richtung was entdecken konnte welches deine Kritik rechtfertigen würde.

So und dann stelle ich dir jetzt noch einen Hinweis / Lösungsvorschlag rein und hoffe, dass du was damit anfangen kannst.

ZitatWas ich erreichen will: Die Markierung im Listenfeld soll sich dem aktuell angezeigten Datensatz anpassen.

Um das zu erreichen musst du beim Datensatzwechsel lediglich die Markierung entfernen ...
Schreibe daher ins Ereignis 'Beim Anzeigen' des Formulars:


Private Sub Form_Current()
    Me!DeinListenfeld = 0
End Sub


Auf die Möglichkeit die Daten im Listenfeld entsprechend dem angezeigten Datensatz im Formular nach Datensatzwechsel zu aktualisieren
bin ich in dem Beitrag schon eingegangen, der dich zur Lustlosigkeit bewegt hat.


bwergen

Hallo,

danke, hat geklappt, ich habe folgendes benötigt:

Liste229 (das ist die angezeigte Liste) hat eine Abfrage als Datensatzherkunft. In Formular "Beim Anzeigen" => Code eingeben habe ich wie folgt verwendet: "Me!Liste229 = Me!Text30". Und schon werden die Einträge nacheinander durchmarkiert, sofern sie durchgeklickt oder gesucht werden.

Gruß,
bwergen