Neuigkeiten:

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

Mobiles Hauptmenü

Zugriff auf Zeilen eines Endlos-Formulars

Begonnen von crystal, April 07, 2016, 22:46:58

⏪ vorheriges - nächstes ⏩

crystal

Hello again,

ich bin am verzweifeln.

Ich habe ein Form (das mal subform werden soll). Darstellung: Endlos-Formular. Ich selektiere ein paar Datensätze, die mir richtig zeilenweise angezeigt werden.
In einem der Felder habe ich eine Farbe als long.
Jetzt möchte ich, dass ein bestimmtes Feld jeder Zeile als .Backcolor den Wert meines Farbfeldes bekommt, etwa so:

txtTest.backcolor = txtFarbe

Aber egal wo ich das hinein schreibe (load, current) - immer wird das Feld txtTest in JEDER Zeile bunt, obwohl in jeder Zeile ein anderer Wert im Farbfeld txtFarbe steht.

Setze ich den Cursor in eine der Zeilen, werden ALLE Zeilen mit der Farbe des aktuellen Datensatzes gefärbt (Code in form_current).

Es gelingt mir nicht, mein Feld in jeder Zeile individuell zu färben, auch nicht mit me.recordset(i).

Was mache ich falsch? Auch mit per VBA codierter bedingter Formatierung nach dem Muster

txtTest.formatcondition(0).backcolor = txtFarbe

kriege ich es nicht hin.

Kann es sein, dass Access bei Endlos-Formularen Code nur einmal aufruft? Oder anders gefragt: wie kann ich Acces dazu überreden, einen Code für jede Zeile eines Endlos-Formulars aufzurufen und dabei nicht alle Zeilen des Formulars zu verändern?

Sorry, wenn ich hier so viele Fragen zu Ufos etc. einstelle. Ich verstehe einfach das Access-Ojectmodell nicht so ganz oder ich stoße an Grenzen, die nicht vorgesehen sind.

Wenn ich wüsste wie, würde ich eine schöne Ufo-Klasse schreiben... Oder kennt jemand eine?

Danke im Voraus.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MaggieMay

-- Antwort passt nicht - daher gelöscht - sorry --

PS:
Wenn überhaupt kann das wohl nur per Bedingter Formatierung funktionieren.
Freundliche Grüße
MaggieMay

DF6GL

Hallo,

vielleicht hilft das ja etwas weiter:

http://lebans.com/formatbycriteria.htm
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

datekk

... Vielleicht ein noch eine Möglichkeit..

Falls das Formular nur zum Anzeigen und nicht zum ändern von Daten dient, könnte man das mit einem Bericht erledigen. Berichte erlauben die individuelle zeilenbasierte Formatierung von Steuerelementen via

Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

LG
datekk
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

crystal

Hallo und vielen Dank für eure Antworten!
Von Lebans gibts ein paar interessante Ideen, leider zumeist für acces97 und ich kann seine DBs nicht öffnen. Ich fand aber eine DB für A2000 mit der ich mich jetzt erstmal beschäftige.
Die Idee mit dem Bericht ist auch interessant - muss ich auch erst probieren. Würde schon passen, weil ich die Daten nicht verändern will.

Schade, dass Access keine direkte OPtion bietet. Vielleicht im nächsten Release... Bis dahin muss man eben basteln.

Also erstmal vielen Dank!
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MaggieMay

Hi,

was genau bekommst du denn mit der bedingten Formatierung nicht hin?
Freundliche Grüße
MaggieMay

crystal

Hallo alle,

nach längeren Recherchen und Versuchen habe ich jetzt folgende Lösung für meine Applikation als den besten Kompromiss gewählt.

1. Ich definiere ein Formular mit genau 4 Zeilen.
2. Wenn im Recordset mehr als 4 Zeilen/Records vorhanden sind, aktiviere ich Buttons "Nächste" und "Vorige" und stelle dann wieder 4 Datensätze dar.
3. Ist zwar etwas mühsam, aber so kann ich jedenfalls
- jedes Feld in jeder Zeile direkt adressieren, ohne andere Felder dadurch zu verändern
- jedes Feld direkt und individuell verändern (z.B. backcolor), ohne bedingte Formatierung benutzen zu müssen
- dem Anwender das Gefühl eines Endlos-Formulars geben
3. Access ist in Puncto Endlos-Formulare und Unterformulare einfach nur schlecht konzipiert und programmiert. Das Objekt-Modell hat hier deutliche Lücken, die vielleicht eines Tags geschlossen werden.
4. Ich habe zu diesem Thema längere Artikel und Meinungen auch aus englischen Quellen gelesen und bin zu dem Schluss gekommen, dass ich Access nicht durch halb durchdachte Funktionen wie bedingte Formatierung austricksen will, die sich interessanterweise immer nur auf genau einen Record bezieht.
5. In Zukunft werden wir es vielleicht einfacher haben, wenn Microsoft dieses Problem endlich erkennt und Access wirklich objektorientiert aufbaut. Schaut man sich die endlosen Einträge im "Überwachungsfenster" an, kann es einem schlecht werden...

Ich setze diesen Thread auf "erledigt", auch wenn er das eigentlich nicht ist. Aber es gibt in Access bis Version 2016 m.E. einfach keine vernünftige Lösung.
Schade, Microsoft. Es ist einfach nur wieder ein weiterer Beweis für undurchdachte und halbherzige Produkt-Pflege und -Entwicklung, wie sie Microsoft seit Garagen-Tagen offenbart.
Immerhin schafft MS dadurch eine Unmenge an Arbeitsplätzen für Spezialisten, die sich mit undokumentierten Features der "Produkte" einigermaßen auskennen. Wenn ich mir allein die Hilfe-Seiten zu Access in schlampig (weil automatisch) übersetzten Texten anschaue...

Ich danke allen, die mit ihren Vorschlägen und Ideen zu diesem und andreen Threads beigetragen haben.

Gruß,
ein durchaus enttäuschter Access-Anwender (eines MS-Programms, das seit gefühlten 20 Jahren nicht substantiell weiter entwickelt wurde).



Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Xoar

Ich denke sowas in der Art habe ich mit bedingter Formatierung auch gelöst. Habe nen Endlosformular und dynamische Werte für Farbcodierungen in den Feldern. In der bedingten Formatierung kann man doch über einen Ausdruck sagen, dass er je Feldinhalt das Feld in bestimmte Hintergrundfarben darstellt.

MaggieMay

#8
@crystal:

eine derart negative Meinungsäußerung ist selten zu lesen. Ich vermute, dass du die Funktionsweise von Access - insbesondere von Access-Formularen - nicht verstanden hast und dass du Reaktionen erwartest, die einfach nicht umsetzbar sind.

Das fängt bereits an bei deiner Einstiegserklärung:
ZitatIch definiere ein Formular mit genau 4 Zeilen.
was völlig unsinnig ist, weil ein Endlosformular stets die Anzahl Zeilen entsprechend dem Abfrageergebnis liefert.

Übrigens hast du meine Frage:
Zitat von: MaggieMay am April 08, 2016, 16:11:10was genau bekommst du denn mit der bedingten Formatierung nicht hin?
in keiner Weise beantwortet - oder was habe ich übersehen?

PS:
Könnte es sein, dass du nicht weißt, was mit dem Begriff "Bedingte Formatierung" gemeint ist??
Freundliche Grüße
MaggieMay

crystal

@MaggieMay
Sorry, wen ich auf deine Frage nicht direkt oder sofort geantwortet habe. Wegen meiner eigenen Recherchen hielt ich das für nicht mehr erforderlich...

Gleichviel - zunächt zu meiner Idee:
Ich würde natürlich ein ungebundenes Formular mit 4 Zeilen erstellen und die Zeilen per VBA aus einem recordset besetzen, den ich zuvor in ein Array einlese (mit .getrows geht das ja sehr schnell und einfach). Das ist dann nicht unsinnig.

Ich denke, ich habe die Funktionsweise von Access(-Formularen) schon richtig verstanden. Wird ein Formular als Einzel-Formular dargestellt, kann man innerhalb der Grenzen (Felder) dieses Objekts (dieser Klasse) umfangreiche, fast beliebige Änderungen etc. machen.

Da sollte man erwarten, dass dies auch möglich ist, wenn man zur Ansicht Endlos-Formular wechselt. Aber genau hier scheitert Access, weil jetzt die Darstellungs-Klasse nicht mehr für jeden (dargestellten) Record instanziert wird.

Bedingte Formatierung, alternativer Hintergrund werden zu einem Zeitpunkt berechnet, der m.E. noch vor Load liegt und für den es keinen Event gibt (z.B. OnFillData oder sowas), bei OnCurrent ist das Formular bereits komplett dargestellt. Nimmt man nun Veränderungen vor, wirken sie sich auf alle "Objekt-Klone" aus, weil es eben keine separaten GUI-Objekte gibt.

(Ich habe mich durch viele, viele und lange englische Texte in Foren und bei MSDN gewühlt und die Informationen zu den obigen Absätzen zusammengefasst.)

Ich glaube, die bedingte Formatierung ist als "Zufalls-Feature" entstanden, als MS Code für den Alternativ-Hintergrund "eingebastelt" hat (ist ja auch noch nicht im Eigenschaften-Blatt erreichbar).

Ich glaube auch, dass MS in einem zuküftigen Access-Release die Möglichkeit einbauen wird, auch in Endlos- oder Unterformularen den Kontext auf den jeweiligen Record zu begrenzen; dazu muss nur das Konzept angepasst werden. Heute ist Access m.E. noch immer ein Relikt aus linearer, prozeduraler Programmierung und daher eben nicht vollständig objektorientiert. Das zeigt sich IMHO auch darin, dass VBA noch nicht durch .Net ersetzt wurde. Deshalb auch mein Statement, dass sich in Access seit sehr vielen Jahren substanziell nicht viel geändert hat. MS tendiert leider dazu, vorhandene Programme nicht grundlegend neu zu entwickeln, sondern mehr oder weniger nur Bugfixing zu machen oder auf dringende Wünsche einzelner Großkunden einzugehen.

Aber es gibt Hoffnung. Mit W10 hat MS völlig neue Programme eingeführt (Edge). Vielleicht wird es bald ein Access-2 geben. Die Zeit dafür wäre reif, denn Access hat zu viele Jahre lang keine wesentlichen Neuerungen erfahren, und ist daher für den professionellen Einsatz noch immer keine umfassende Lösung. Es ist eine Lösung für Privat- und small-office-Anwender. Das ist auch OK und man muss eben mit den konzeptionellen Grenzen und Fehlern leben. Leider ist es oft schwierig, diese Grenzen zu erkennen, weil sie von Marketing verschwiegen werden.

Ähnliche Meinungen habe ich übrigens auch zu anderen (Office-)Produkten von MS. Erst in jüngster Zeit scheint es bei MS Menschen zu geben, die bereit sind, das Tor der Garage zu öffnen, in dem einst MS entstanden ist und uns seither immer wieder mit unfertigen, gebastelten Produkten getäuscht hat.


Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MaggieMay

#10
@crystal:
Zitat von: crystal am April 11, 2016, 13:10:16
Ich würde natürlich ein ungebundenes Formular mit 4 Zeilen erstellen und die Zeilen per VBA aus einem recordset besetzen, den ich zuvor in ein Array einlese (mit .getrows geht das ja sehr schnell und einfach). Das ist dann nicht unsinnig.
Vielleicht nicht unsinnig aber auch wenig sinnvoll weil unflexibel. Wenn es dann doch mal mehr Zeilen werden sollen, kannst du alles wieder anpassen, ein Endlosformular dagegen wächst automatisch mit, außerdem sind die Daten direkt änderbar.
ZitatAber genau hier scheitert Access, weil jetzt die Darstellungs-Klasse nicht mehr für jeden (dargestellten) Record instanziert wird.
Dieses "nicht mehr" ist eine Fehleinschätzung, auch in einem Einzel-Formular gilt die Formatierung für alle Datensätze, jedoch siehst du ja nur jeweils einen davon und merkst das demnach nicht.
ZitatBedingte Formatierung, alternativer Hintergrund werden zu einem Zeitpunkt berechnet, der m.E. noch vor Load liegt
Das dürfte ebenfalls ein Irrtum sein, denn die bedingte Formatierung wird ja für jeden einzelnen Datensatz angewendet und genau darum ist sie ja für Endlosformulare DIE Lösung, daten(satz)abhängige Formatierung umzusetzen.
ZitatNimmt man nun Veränderungen vor, wirken sie sich auf alle "Objekt-Klone" aus
Das ist richtig, gilt aber eben nicht für die "Bedingte Formatierung", die nicht über die Steuerelementeigenschaften sondern über das Format-Menü eingestellt wird.
Zitatist ja auch noch nicht im Eigenschaften-Blatt erreichbar
Das wird sicherlich auch nicht kommen - wozu auch? Denn es braucht ja schon ein eigenes Menü, um die (Eingabe-)Möglichkeiten auszuschöpfen.
ZitatIch glaube auch, dass MS in einem zuküftigen Access-Release die Möglichkeit einbauen wird, auch in Endlos- oder Unterformularen den Kontext auf den jeweiligen Record zu begrenzen
Das muss nicht erst erfunden werden, genau das leistet die Bedingte Formatierung. Allerdings sind die Möglichkeiten beschränkt, was ich bedauerlich finde.

Zu deinen übrigen Ausführungen sage ich jetzt mal lieber nichts....
Freundliche Grüße
MaggieMay

crystal

Hallo MaggieMay,

es ist ja sehr schön, wie du Access und seine m.E. unvollkommene Implementierung verteidigst.

Access ist m.E. nach wie vor ein sehr gutes Programm zur weitgehend freien Gestaltung einer DB-Benutzer-Oberfläche. Es gibt eben Grenzen und "an-implementierte Lösungen" von MS - mit denenen muss man halt leben.

Nichts anderes habe ich anhand oder aufgrund meines Problems und meiner Recherchen erkannt.

Das von MS bereitgestellte Feature der bedingten Formatierung ist IMHO ein Schnellschuss, um plakativ ein paar wenige Aspekte der Darstellung zu zeigen oder zu lösen.  Das Konzept insgesamt aber ist eben nur eine halbherzige Pseudo-Lösung. Alles wäre einfacher, wenn MS nur eine Record-Auflistung bieten würde, in der ein Formular schlicht ein vollständiges Objekt wäre.

Meine angedachte Lösung würde übrigens genau die Flexibilität eines UFos bieten, z.B. scrollen, nur wären meine Felder alle adressier- und veränderbar.

Deshalb hatte ich ja auch anfangs gefragt, ob jemand eine Ufo-Klasse kennt. Ich habe übrigens ein paar Implementierungen entdeckt, in denen das Ufo schlicht vervielfältigt wird und je nur einen Record darstellt. Da müssen die Ufos aber als Dummy vorhanden sein (z.B. 5 Stück) und danach wird es schwieriger...

Natürlich kenne ich die Vorteile von Ufos und Endlos-Formularen. Aber in der Praxis stösst man eben an Access-Grenzen.

Ich gebe mich damit zufrieden und versuche, workarounds zu bauen, die dem Anwender das Gefühl einer einheitlichen und durchdachten Oberfläche gibt. Ich habe gelernt, dass dies mit Ufos nur in beschränktem Maße möglich ist und das ist dann auch OK.

Bitte werfe mir nicht vor, dies und das in Access nicht verstanden zu haben, denn diesen Vorwurf müsste ich auch dir machen. Ich glaube nämlich, dass du Access nicht als unvollkommene und teilweise schlecht implementierte Lösung erkannt hast, in der manche "Lösung" nicht in den Gesamt-Ansatz passt, weil dieser doch wohl eher schwammig festgelegt worden zu sein scheint.

Ich akzeptiere deine Denkweise, z.B. das "Bedingte Formatierungs-Feature" als gegeben hinzunehmen und bis ins letzte auszureizen. Meine Denkweise und die daraus resultierende Kritik am Produkt ist eben etwas anders und ich meine, Umsetzungs-Defizite seitens MS leider zu oft erkennen zu müssen.

Schade, dass du meine anderen Ausführungen nicht kommentierst. Aber dies ist ja auch kein allgemeiner Access-Feature-Thread, sondern nur eine einfache Frage zum Thema Endlos- bzw. Unter-Formular.

Ich bin mir übrigens völlig sicher, dass du wunderschöne Access-Applikationen baust und bauen kannst.

Gruß!
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MaggieMay

Hi,

ich versteh's einfach nicht...
Zitatjedes Feld direkt und individuell verändern (z.B. backcolor), ohne bedingte Formatierung benutzen zu müssen
Worin siehst du den Nachteil, die Bedingte Formatierung macht doch genau das was du haben willst und du kannst ein Endlosformular nutzen und musst nichts drumherum programmieren.

Du gibst hier pauschale Statements ab, wie "schlecht durchdacht", ohne konkrete Beispiele zu nennen. Auch ist weiterhin unklar, was genau du mit der Bedingten Formatierung nicht gelöst bekommst.

Aussagen wie
ZitatAuch mit per VBA codierter bedingter Formatierung nach dem Muster
txtTest.formatcondition(0).backcolor = txtFarbe
kriege ich es nicht hin.
sind absolut wertlos, denn so kann es ja wohl nicht ernsthaft gemeint sein, mit einem Einzeiler ist es nicht getan. Und wieso überhaupt per VBA? Auch Abhängigkeiten von anderen Datenfeldern lassen sich fest einstellen. Wenn du allerdings beim Anzeigen eines Datensatzes die Farben dynamisch ändern willst, machst du einen Denkfehler, denn die Regel gilt ja wiederum für alle. Statt dessen musst du halt so viele Regeln definieren wie es Bedingungen gibt.

Freundliche Grüße
MaggieMay

crystal

Hi MM,
Danke für deine Antwort.
Deine Aussage

Zitat
Aussagen wie
Zitat
Auch mit per VBA codierter bedingter Formatierung nach dem Muster
Code: [Auswählen]
txtTest.formatcondition(0).backcolor = txtFarbe
kriege ich es nicht hin.
sind absolut wertlos, denn so kann es ja wohl nicht ernsthaft gemeint sein, mit einem Einzeiler ist es nicht getan.

Ist mindestens ebenso "absolut wertlos", oder?

Ich habe meine Lösung mit einem simulierten Endlos-Formular gefunden, kann alle Felder adressieren und deren Aussehen verändern. Mehr brauche ich nicht. Da meine Daten 'Info only' sind, brauche ich mich auch nicht darum zu kümmern, sie änderbar zu machen und zu speichern.

Gut - du bist eine Verfechterin der bedingten Formatierung. Ich nicht.

Du scheinst auf Access zu schwören und es total wunderbar zu finden. Gut. Ich nicht so ganz.

Wenn ich keine konkreten Beispiele für schlechte oder unvollständige oder nur halb durchdachte Implementierungen bringe, dann einfach nur, weil es nicht in diesen Thread passt. Oder willst du hier jetzt im Gegenzug  Beispiele für gelungene Implementierungen auflisten?

Dein Statement
ZitatWenn du allerdings beim Anzeigen eines Datensatzes die Farben dynamisch ändern willst, machst du einen Denkfehler, denn die Regel gilt ja wiederum für alle. Statt dessen musst du halt so viele Regeln definieren wie es Bedingungen gibt.

ist übrigens auch ein Beispiel für eine inhaltslose oder unsinnige Antwort.

Aber egal. Ich komme mit meiner eigenen Lösung zurecht und bedanke mich ausdrücklich für deine Gedanken und die Unzahl an Lösungen, die du in diesem und anderen Foren bereits gefunden und auch für Grenzen, die du aufgezeigt hast.

Bitte akzeptiere einfach nur, dass ich zwar ein Fan von Access bin, Access aber nicht als die 100-Prozent-Lösung betrachte. So auf 80-90 Prozent könnten wir uns einigen.

Adieu
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

datekk

Amen... aber:`

Zitat von: crystal am April 12, 2016, 12:38:13
Da meine Daten 'Info only' sind, brauche ich mich auch nicht darum zu kümmern, sie änderbar zu machen und zu speichern.
Adieu

Öhm.... Was ist mit einem Bericht? Da kannst Du doch auch genau machen was Du willst... ?  :o ::)
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps