Neuigkeiten:

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

Mobiles Hauptmenü

Endlosformular Textfeld als Array

Begonnen von netghost, April 20, 2017, 11:58:59

⏪ vorheriges - nächstes ⏩

netghost

Hallo!

Also, es ist gefühlte tausend Jahre her, daß ich mit Access was gemacht habe und quäl mich da jetzt durch. Eventuell kannmir wer helfen, suche schon seit Tagen eine Lösung, aber offensichtlich hat das noch keinr gebraucht oder ich bin vollkommen auf dem Holzweg


Also: ich habe eine Tabelle mit Getränken, die eine minimale und eine maximale Füllmenge haben.

Soweit so gut.

Aus dieser habe ich ein Formular gemacht - es werden also alle Getränke in einem Endlosformular angezeigt, zusätzlich eben die minimale und maximale Füllmenge.

Jetzt mein Problem:

im Formular soll daneben ein Eingabefeld sein, in welche der User die tatsächliche Füllmenge eingibt. das geht schon mal nicht, da im Endlosformular der erste wert für alle DS übernommen wird.

Zusätzlich soll natürlich abgefragt werden, ob die eingegebene Füllmenge innerhalb der beiden Werte min und max liegt, sowie ob es zuwenig oder zuviel ist. dazu soll dann noch ein Label geschalten werden.

Diese Eingaben muß ich dann weiterverarbeiten für einen Bericht.

Anscheinend ist zwar das Textfeld im Endlosformular ein Array - kann ich Textboxen über Index ansprechen/steuern?   Da0 sich der Label schaltet bei LostFocus bei jedem einzelen textfeld?

Kann ich verhindern, daß der erste eingegebene wert bei allen anderen DS übernommen wird?

Oder geh ich das komplett falsch an?

bitte Hilfe


MzKlMu

#1
Hallo,
ZitatKann ich verhindern, daß der erste eingegebene wert bei allen anderen DS übernommen wird?
gar nicht, der wird auch nicht übernommen auch nicht für den ersten Datensatz, der wird nur angezeigt. Das hat auch mit einem Array nichts zu tun. Access braucht keine Arrays. Für die tatsächliche Füllmenge muss es zwingend auch ein Tabellenfeld geben an das das Formularfeld gebunden werden muss, sonst ist Dein Vorhaben nicht möglich.

Das mit dem Label habe ich nicht verstanden, was soll das Label anzeigen/bewirken ?
Gruß Klaus

Beaker s.a.

Hallo,
ZitatZusätzlich soll natürlich abgefragt werden, ob die eingegebene Füllmenge innerhalb der beiden Werte min und max liegt, sowie ob es zuwenig oder zuviel ist. dazu soll dann noch ein Label geschalten werden.
Private Sub FuellMenge_AfterUpdate
   If Me!FuellMenge < Me!MinFuellMenge Or Me!FuellMenge > Me!MaxFuellMenge Then
   DoCmd.OpenReport ...
End Sub


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

Holzweg.

Ein Getränk hat eine Füllmenge? Für mich hätte eher ein Behältnis eine solche Eigenschaft. Ich würde aber, wenn man schon an eine Datenbank denkt, mehrere gleichartige und auch mehrere verschiedene Behältnisse erwarten, so das EINE Eingabe merkwürdig erscheint.
Wasser: Glas, Flasche, Kasten, Faß ...

ZitatZusätzlich soll natürlich abgefragt werden, ob die eingegebene Füllmenge innerhalb der beiden Werte min und max liegt, sowie ob es zuwenig oder zuviel ist. dazu soll dann noch ein Label geschalten werden.
Wenn dem Anwender bei angezeigten Grenzen nicht klar wird, ob sein Wert darin liegt ... ist er dann weniger blind bei zusätzlichen gleichartigen Informationen?

ZitatKann ich verhindern, daß der erste eingegebene wert bei allen anderen DS übernommen wird?
Individuelle Eingaben für einzelne Datensätze würde man in einem gebundenen Steuerelement vornehmen. Dann hätte man datensatzbezogene Inhalte (wie bei den anderen Feldern sichtbar).
Also ja.

ZitatEndlosformular Textfeld als Array
Wo außer im Thementitel kommt ein Array vor?
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
ich denke, das mit den Getränken ist (wieder mal) eine vereinfachende Darstellung die dann mit der Realität nichts zu tun hat.
Gruß Klaus

netghost

Ich wollte natürlich nicht den gesamten Aufbau der DB hier darstellen. Und ich habe Vorgaben von meinem Chef, die ich umsetzen muß. Das gefäß ist nicht genormt und die Überprüfung der Füllmenge ist nur ein Teil. Es sollen nämlich auch Auslaufzeiten und Pulvermenge angegeben werden können. Das soll dann eine Auswertung geben, ob das Gerät, welches die Getränke ausgibt, die vorgeschriebenen werte im Durchschnitt einhält. Denn ist eine Füllmenge zu gering oder zu groß, muß das Gerät nachjustiert werden. Außerdem sind ja mehrer Automaten im Einsatz, welche dadurch überprüft werden und ausgewertet werden sollen.

In einer anderen Sprache würde ich das so machen, daß ich eine Schleife erstelle, die zu jedem Getränk einen bestimmten wertebereich zuläßt und die Eingabe in einer schleife beim jeweiligen Index prüft und dann die Antwort zuviel, zuwenig oder OK rausschreibt. Da nicht Ich dieses Programm bedienen werde, sondern ein Techniker vor ort, der mit unterschiedlichen geräten zu tun hat und nicht in den wertebereich eingreifen können soll und nur die Ausgabe erhält und anhand derer feststellen muß, ob das gerät neu einzustellen ist oder nicht, finde ich manche Kommentare hier wenig hilfreich.

Sofern ich das richtig verstanden habe, kann ich im Access nur dann ein Feld irgenwie abfragen, wenn es eine Tabelle gibt, die ein solches Feld beinhaltet. Was mich jeztzt dazu bringt, mein DB-design ändern zu müssen.

das Teil ist ja an sich schon fertig, allerdings nur als Shareware, die eben keine Auswertung für mehrere maschinen und deren Verhalten macht, sondern hardcoded nach den werten prüft, die eingegeben wurden und am Ende eine Datei rausschreibt, die nur für eine spezielle maschine an einem Ort gilt.

Da mein Chef aber natürlich wissen möchte, welche automaten wo welches Verhalten zeigen und wie gewartet werden müssen und die Anwendung samt DB standalone auf einem Laptop laufen soll, bei dem keine Internetverbindung vorhanden ist , dachte ich an Access mit runtime

Leider hat Access eine andere interne Logik, als wenn ich das mit java, PHP und ner Weboberfläche machen würde und da hab ich noch einiges nachzuholen.

Das mit dem Label: ich kann im VB eine Beschriftung ändern. Und diese Beschriftung (Label) gibt es ja in Access auch. Und die kann ich mit .caption ansprechen.

Leider hab ich kein Manual gefunden, in dem Befehle wie DoCmd oder DSLookup aufgeführt oder deren Syntax erklärt werden - also kein befehlsverzeichnis für Access-VBA , nur vereinzelte beispiele

Die abfrage an sich ist mir ja klar - also, wie ich den Wert gegen Min und Max prüfe - allerdings eben nicht, wie ich das in einem Endlosformular abfangen würde

hätte es eben über ein Array gemacht. So wie es aussieht, muß ich also meine Datenbank ändern - danke an MzKlMu, das war der hilfreichste Kommentar

MzKlMu

#6
Hallo,
Du kannst mit Sicherheit davon ausgehen, dass Du keine Schleife in irgendeiner Form benötigst. Das Problem dürfte mit einer einfachen Abfrage (SQL) ohne irgendetwas programmieren zu müssen zu lösen sein. Ohne Index, den es bei Access so wie Du das denkst gar nicht gibt.
Du kannst weiterhin davon ausgehen, dass alle Werte mit denen Du etwas machen/rechnen/vergleichen willst in Tabellenfeldern gespeichert sein müssen. Die Betonung liegt auf müssen.

ZitatDie abfrage an sich ist mir ja klar - also, wie ich den Wert gegen Min und Max prüfe - allerdings eben nicht, wie ich das in einem Endlosformular abfangen würde
Was willst Du da abfangen, bzw. was verstehst Du darunter ?
Das Formular an die Abfrage (mit Min/Max Vergleich) binden und fertig. Da muss nichts abgefangen werden. Im Reglefall wird ein Formular ohnehin an eine Abfrage (Basis=Tabelle) gebunden und nicht an die Tabelle direkt. Nur über eine Abfrage sind z.B. zuverlässige Sortierungen möglich.

Weiterhin scheinen Dir wichtige Grundlagen im Umgang mit Access zu fehlen. Ein Formular kann keine Daten speichern, das machen nur Tabellen. Und ein Formularfeld das Daten anzeigt für einen Datensatz muss an ein Tabellenfeld gebunden sein.

Kannst Du mal ein Bild des Beziehungsfensters (das hoffentlich angelegt wurde) hier zeigen ?
Ohne Beziehungen keine funktionierende Datenbank !
Gruß Klaus

netghost

Morgen.

Also ganz blöd bin ich ja nicht. Klar gibt es Beziehungen.  Und ja, Mir fehlen wichtige Grundlagen für Access, ist ja auch ewig her.

na gut, anbei der Screenshot

Allerdings muß ich dieses Modell ohnehin ändern. Das schaffe ich schon. Die Frage ist m.E. eh schon beantwortet - allerdings würde ich sie erst auf fertig setzen, wenn die Lösung funktioniert.

denke da an eine weitere Tabelle, die halt aus einer Tabellenerstellungsabfrage erstellt wird. in der ich dann halt Parameter abfragen muß - eben, wie sind die tatsächlichen werte, die vor Ort eingegeben wurden

Glaube, damit geht es dann


MzKlMu

#8
Hallo,
zu was eine weitere Tabelle ?
Die Füllmenge gehört als Feld in die Tabelle "tbl_getr_masch".

Oder, wenn die Füllmengen zu einem bestimmten Dateum von einem Techniker festgehalten werden müssen, so fehlt eine weitere Tabelle mit einem Datum, einem Fremdschlüssel (FS) zum Techniker, einem Feld für die Füllmenge und einem FS zur Kombinationstabelle "tbl_getr_masch". Zu diesem Zweck benötigt dann die Tabelle "tbl_getr_masch" einen eigenen Primärschlüssel (Autowert und nicht der zusammengesetzte PS).

Und noch was, wer glaubt, eine Tabellenerstellungsabfrage zu brauchen, hat meist ein falsches Datenmodell.
Ich denke, hier sind noch erhebliche Änderungen am DB-Design notwendig.

Wobei ich aber zugeben muss, dass ich die Zusammenhänge nicht ganz durchschaue.
Gruß Klaus

netghost

oke, du meinst also, in der Zwischentabelle - ja, zu dem Schluß bin ich auch gekommen.
ich geb zu, Access verwirrt mich - hatte das als einfach in Erinnerung.

Naja, die zusammenhänge: ein techniker - mehrere Standorte - aber ein Standort kann auch mehrere Techniker haben.

Ein Standort kann mehrere maschinen haben.

Eine maschine kann mehrere Getränke anbieten, ein Getränk kann bei verschiedenen maschinen vorkommen.

Ein Getränk hat eine min/max Fuellmenge, Auslaufzeit, Pulvermenge - und eben eine tatsächliche Fuellmenge, Auslaufzeit, pulvermenge

dazu kommen noch reiningungszustände, die ich aber noch nicht als Tabelle angelegt habe, da da noch das reinigungsobjekt pro Maschine und der reinigungszustand des Objektes pro maschine dazukommen müßte.





MzKlMu

Hallo,
ich habe meinen Beitrag in #8 noch ergänzt, bitte noch mal lesen.
Gruß Klaus

netghost

oke - ich hätte das Datum einfach das aktuelle genommen, welches ich in nem Formular ja so einfügen kann.

Also gut - nochmal über die DB hirnen.  ja, das ich dann den zusammengesetzten Schlüssel nicht so lassen kann, ist klar




Danke auf jeden Fall

MzKlMu

Hallo,
Zitatoke - ich hätte das Datum einfach das aktuelle genommen, welches ich in nem Formular ja so einfügen kann.
Aber das Datum muss doch auch gespeichert werden, wenn Du in einem Formular anzeigst, ist das doch zu jedem Zeitpunkt an dem Du das Formular öffnest anders (eben aktuell) und das kann und darf doch nicht sein. Wenn Du dann morgen das Formular anzeigst, steht dann ein anderes Datum drin. Das Datum muss zwingend als Tabellenfeld vorhanden sein.
Gruß Klaus

netghost

ja, verstanden. Ich seh schon, so mal eben in Access was machen, ist halt doch nicht so einfach wie gedacht.

Alleine dieser Ausdrucksgenerator treibt mich in den Wahnsinn

Ich krieg das hin.

Danke, Klaus

Beaker s.a.

Hallo,
ZitatAlleine dieser Ausdrucksgenerator treibt mich in den Wahnsinn
Das geht wohl nicht nur dir so  ;). Ich frage mich inzwischen wozu der überhaupt
gut sein soll. Ist so ähnlich wie bei Macros, verwendet wohl kaum jemand.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)