Neuigkeiten:

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

Mobiles Hauptmenü

Abfragewerte in VBA weiterverarbeiten

Begonnen von CadianKeyWarrior, März 28, 2024, 16:34:50

⏪ vorheriges - nächstes ⏩

CadianKeyWarrior

Hallo,

ich arbeite seit einiger Zeit an einem Projekt und bin nun auf etwas gestoßen, bei dem ich nicht weiter komme. Ziel des Projekts ist eine möglichst komfortable Dateneingabe für Nutzer, die selbst nicht Accesskundig sind (wobei ich gefühlt auch noch dazu gehöre). Der Aufbau ist wie folgt: Ich habe eine recht umfangreiche Tabelle mit Produkten und deren zugehörigen Spezifikationen. Jedes Produkt hat zwischen 2-7 unterschiedliche Spezifikationen und für jede Spezifikation müssen vier Felder ausgefüllt werden. Ich habe nun also ein Formular erstellt, mit der Tabelle verknüpft und alle entsprechenden Felder der Tabelle ins Formular gezogen, so dass die Wert eingetragen werden können. Klappt so weit ganz gut, nur übersichtlicher als eine Excel-Tabelle ist es deswegen nicht.

Daher war die Idee ein Kombinationsfeld einzufügen, bei dem man per Dropdown das Produkt auswählt und dadurch dann die Anzahl der Felder auf dem Formular eingrenzt. Also mehrere normalisierte Tabellen erstellt mit IDs und Kombinationstabellen mit Referenzen wie es mir hier im Forum empfohlen wurde. Im Anschluss die entsprechenden Abfragen erstellt. Soweit klappt alles. Die Abfragen geben die gewünschten Spezifikationen wieder.

So weit, so gut. Jetzt will ich mit VBA die einzelnen Textfelder ansteuern und ihre Sichtbarkeit sowie ihre Position auf dem Formular ändern. Damit die benötigten Felder ganz oben am Formular angezeigt werden. Den Code hab ich schon geschrieben, klappt im kleinen auch so weit, aber die Verbindung von Abfrage und VBA will mir nicht gelingen. Ich habe sowohl versucht die Abfragen separat zu erstellen und dann im Code aufzurufen als auch die SQL-Abfrage direkt im Code zu schreiben, jeweils mit der Verwendung von Recordset. Hier bekomme ich jedoch den Laufzeitfehler 3061. Da die Abfragen für sich funktionieren, muss der Fehler an einer anderen Stelle sein.

Laut Recherchen ist es wohl oft problematisch, Kombinationsfelder vom selben Formular für die Abfrage als Parameter zu verwenden? Der Aufbau ist sozusagen: Formular, darauf das Kombinationsfeld, Abfrage1 verwendet das ausgewählte Produkt als Parameter und Abfrage2 gibt anhand der Ergebnisse von Abfrage1 die Spezifikationen zurück, welche ich dann in Variablen (oder einem Array) speichern möchte. Muss ich dann Abfrage1 noch triggern? Oder reicht es Abfrage2 zu triggern?
Gefühlt ist Access ein Loch ohne Boden und je mehr ich mich einlese, desto weniger verstehe ich es.

In kurz: Was ist der beste Weg, um Strings die von einer Abfrage zurückgegeben werden, in VBA weiterzuverwenden? Übersehe ich einen deutlich einfacheren Weg das ganze zu lösen?

Freundliche Grüße

ebs17

ZitatJetzt will ich mit VBA die einzelnen Textfelder ansteuern und ihre Sichtbarkeit sowie ihre Position auf dem Formular ändern.
Sehr unüblich. Nachprogrammierte "Dynamik" ist desweilen ein Zeichen von ungenügender Vorplanung und Strukturierung.

Zitat... Laufzeitfehler 3061. Da die Abfragen für sich funktionieren, muss der Fehler an einer anderen Stelle sein.
Offensichtlich hast Du Formularbezüge fest in die Abfragen eingebaut. Je nach konkreter Abfrageverwendung funktioniert das oder eben nicht. Im zweiten Fall kann die ACE den Formularbezug nicht in einen Wert auflösen und klagt daher über fehlende Parameter.
Was ist der "beste" Weg, um Parameter zu übergeben? Es kommt darauf an.
Grundlagen - SQL ist leicht (16) - Abfragen mit Parametern
Um Inhalte von Abfragen nach VBA zu transportieren, bleibt nur ein Recordset und dessen Auswertung, oder die Abkürzung über Domänenaggregatfunktionen (DLookup & Co.), die aber dann nur jeweils einen Wert zurückgeben können.
Mit freundlichem Glück Auf!

Eberhard

DaWei

#2
..falscher Eintrag. Sry

CadianKeyWarrior

Hallo Eberhard, danke für deine Antwort.

Zitat von: ebs17 am März 28, 2024, 17:03:37Sehr unüblich. Nachprogrammierte "Dynamik" ist desweilen ein Zeichen von ungenügender Vorplanung und Strukturierung

Hast du einen Alternativvorschlag, wie du in meinem Fall vorgegangen wärst?

Danke für dein Link. Ich hab mir zuvor bereits Teil 19 deines Tutorials zu Gemüte geführt und werd mir nun diesen Part durchlesen. Immerhin weiß ich jetzt, wonach ich ausschaut halten muss.

ebs17

Deinen Fall kenne ich nicht.
Man könnte sich aber für die Felder genauer interessieren, die da verschoben/versteckt werden sollen. Was haben die für ein Problem?
Meistens schaut man sich das gut durchdachte Datenmodell (Beziehungsbild) an. Dort beginnt nämlich Planung, und nicht selten liegen dort die ersten Baustellen.
Mit freundlichem Glück Auf!

Eberhard

CadianKeyWarrior

#5
Mein Fall ist, dass ich die Dateneingabe, die bisher in Excel stattgefunden hat, nun in Access machen möchte. Anstelle sich durch hunderte Spalten von Spezifikation zu scrollen, sollen nur die benötigen angezeigt werden. Gefühlt sollte Access doch prädestiniert dafür sein? Ich bin jedoch noch eher ein Anfänger in Access und schlag mich jetzt seit Wochen mit ChatGPT, Youtubetutorials und sonstigem durch, komme aber einfach auf keinen grünen Zweig. Für 1-2 Sätze wie du diesen Fall angehen würdest, wäre ich also sehr dankbar.

Beaker s.a.

Hallo,
Poste ein Bild des Beziehungsfensters. Vorher wird da keiner Hilfe
leisten können.
Ich vermute, dass die Beziehung(en) zwischen Spezifikationen und
Produkten nicht korrekt angelegt ist/sind, wenn überhaupt vorhanden.

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)

MzKlMu

#7
Hallo,
beschreibe die Tabelle(n) und deren Felder genauer. Mit einer Tabelle wird das bei Access ohnehin nicht funktionieren. Man kann auch nicht so ohne weiteres eine Excel Tabelle nach Access übertragen. Access Tabellen erfordern einen völlig anderen Aufbau als Exceltabellen. Das ist nicht vergleichbar, noch nicht mal ansatzweise.
Du brauchst eine Tabelle für die Produkte, eine Tabelle für die Spezifikationen und eine Tabelle zur Zuordnung der Spezifikation und die jeweilgen Werte. Mal als ganz grobe Einschätzung.
Alle Tabellen brauchen auch Beziehungen, dazu sind die Primärschlüssel und die jeweilgen Fremdschlüssel in Beziehung zu setzen.
Ohne diese Tabellenaufteilung und Beziehungen wirst Du mit Access nicht zum Ziel kommen.

Bei korrektem Aufbau der DB wirst Du hier zunächst mal kein VBA benötigen. Und Felder verschieben und unsichtbar/sichtbar machen wirst Du mit Sicherheit auch nicht benötigen. Auch irgendwelche Trigger und sonstige Scherze sind überflüssig.

@Ekkehard
So wie ich das lese, gibt es nur eine Tabelle und somit auch keine Beziehungen.
ZitatIch habe eine recht umfangreiche Tabelle mit Produkten und deren zugehörigen Spezifikationen.
@CadianKeyWarrior
Hatten wir das Thema nicht schon mal ? Du wolltest dort auch noch antworten.

ZitatAuch wenn ich womöglich erst in ein paar Tagen antworte,
Das war am 23.01.2024 als vor ca. 2 Monaten.
Gruß Klaus

ebs17

#8
ZitatAnstelle sich durch hunderte Spalten von Spezifikation zu scrollen, sollen nur die benötigen angezeigt werden.
In der Datenbank haben Felder (Spalten) einen Namen. Du verwendest im Eingabeformular nur die Namen der benötigten Felder. Das wäre dann sehr schön statisch.
Blöd wäre dann nur, wenn man nicht weiß oder fixieren kann, was "benötigt" wird. Dann wäre die Planlosigkeit schon mächtig eingestiegen.

"hunderte Spalten" ... bei 256 ist Schluss. Ansonsten ist Datenmodellierung ein Thema. Höre auf Klaus, oder suche Dir ein anderes Hobby, wo Realität und Dein Wunschdenken besser zusammenpassen.
Mit freundlichem Glück Auf!

Eberhard

CadianKeyWarrior

Zitat von: Beaker s.a. am März 30, 2024, 16:30:18Hallo,
Poste ein Bild des Beziehungsfensters. Vorher wird da keiner Hilfe
leisten können.

Gerne, hier bitte.

@MzKlMu:
Korrekt ich hatte hier schon mal nach Rat gefragt. Es ging um dasselbe Projekt, jedoch eine andere Baustelle die ich mittlerweile lösen konnte. Ich habe vergessen es auf gelöst zu setzen, sorry. Dabei hast du mir geraten die Tabelle entsprechend aufzuteilen. Dies habe ich dann gemacht. Es gibt jetzt eine Tabelle mit Lieferanten, Produkten, eine mit Spezifikationen und eine Verbindungstabelle (pro Produktgruppe, wovon es vier gibt). Alles mit Schlüssel und Fremdschlüssel und hoffentlich richtig in Beziehung zueinander gesetzt. Die ursprüngliche Tabelle aus Excel ist in etwa so aufgebaut wie im Anhang gezeigt.

Zitat von: ebs17 am März 30, 2024, 17:40:08Höre auf Klaus, oder suche Dir ein anderes Hobby, wo Realität und Dein Wunschdenken besser zusammenpassen.


Es geht mir nicht darum, stur mein »Wunschdenken« durchzusetzen. Ich möchte lernen, was die beste Lösung oder zumindest eine gute Lösung ist. Wenn ich bisher etwas unsinniges oder falsches gemacht habe, dann weil ich es nicht besser wusste.

ebs17

#10
Warum gibt es jeweils vier gleiche Tabellen?
Mit einem zusätzlichen Feld für das verborgene Attribut kommt man auf eine.
Nebenbei: Welche geheimzuhaltenden Informationen lauern in Tabellennamen?

Die "Liste" sieht aus wie eine Kreuztabelle. Die gibt es nicht lt. Beziehungsbild. Was soll diese irritierende Information? Die "Liste" ist vmtl. erzeugbar über eine Kreuztabellenabfrage, die ist aber zum Eingeben gänzlich ungeeignet (interne Gruppierungen und so ...).

So etwas ist schick zum Anschauen, aber zum Arbeiten in einer relationalen Datenbank ungeeignet. Zu Eingabe & Co. orientiere Dich an Tabellen und entsprechenden Formularlösungen für m:n-Beziehungen. Damit kommst Du auch dem genannten Ziel näher.
ZitatZiel des Projekts ist eine möglichst komfortable Dateneingabe für Nutzer


ZitatIch möchte lernen, was die beste Lösung oder zumindest eine gute Lösung ist.
Vorschläge im Forum entsprechen meist Best Practice.
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
Dein Tabellenaufbau ist unbrauchbar. Er entspricht auch nicht den Vorschlägen. Das kannst Du in die Tonne treten (sorry).

Wie unterscheiden sich die jeweils 4 gleich aufgebauten Tabellen ?
Wo willst Du bei dem gezeigten Aufbau Werte eintragen, da gibt es keine Felder dazu.

Wenn man in Tabellen und/oder Feldnamen Teile schwärzen muss um keine Geheimnisse zu erkennen, hat man sowieso was falsch gemacht.
Gruß Klaus

CadianKeyWarrior

Die vier Tabellen gibt es, weil es vier Produktgruppen gibt. Die Produktgruppen sind auch die verborgenen Bereiche. Ich hab für jede Produktgruppe ein Formular. Die Formulare basiere auf der ursprünglichen Liste aus Excel, geben auch die Textfelder auf den Formularen vor (also Spezifikation Wert1 usw.) in die man einträgt und mit dem Button neuem Datensatz hinzufügen dann zur Liste hinzufügt. Was so weit auch funktioniert. Der Anhang »Liste« soll nur zeigen wie diese Liste aufgebaut ist.

Ich habe also Beispielsweise das Formular für Produktgruppe A. Auf dem Formular sind alle Spezifikationsfelder die für Gruppe A von Bedeutung sind z.B. Spezifikation 1-20. Nun wählt der Benutzer Produkt xy aus, welches Spezifikation 1,5,8 braucht, dementsprechend sollen nur noch die Felder für die Spezifikationen übrig bleiben. Das ganze Thema mit den Beziehungen dient also nur dazu das zu filtern.

Zitat von: MzKlMu am März 30, 2024, 23:48:09Dein Tabellenaufbau ist unbrauchbar. Er entspricht auch nicht den Vorschlägen. Das kannst Du in die Tonne treten (sorry).

Schade, ich hatte es zwar schon befürchtet aber doch irgendwie gehofft, dass ich es zumindest verwenden kann und nicht nochmal alles neu machen muss.

ebs17

Ist es für Dich nachvollziehbar, dass, wenn man filtern kann, man mit einer Tabelle und aufbauend auch mit einem Formular viel besser klarkommt, als mit mehreren getrennten Tabellen?

ZitatDie Formulare basiere auf der ursprünglichen Liste aus Excel
Wenn Du Excel in Access nachbaust: Wäre es nicht besser, zum "Original" zurückzukehren?

Wenn dann doch DatenbanK Don't use Yes/No fields to store preferences
Eine Spezifikation ist also sinngemäß keine Spalte, sondern ein Datensatz. Keine Spezifikation => kein Datensatz. Neues kann man einfach unten anfügen. VBA-Rochaden sind sind an der Stelle unnötig.
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
ZitatDas ganze Thema mit den Beziehungen dient also nur dazu das zu filtern.
Nein, die Beziehungen sind für eine Datenbank das A+O, mit Filtern hat das nichts zu tun.

Du brauchst eine Tabelle für die Produktgruppen, eine Tabelle für die Produkte. Diese Tabelle bekommt dann einen Fremdschlüssel zur Produktgruppe. Dann brauchst eine weitere Tabelle in der die zutreffenden Spezifikationen einem Produkt zugeordnet werden.
Und dann braucht es schließlich auch noch eine Tabelle zur Erfassung der Spezifikationswerte des Produktes.

Wenn das alles richtig gemacht ist, wirst Du keine Felder ausblenden müssen. Es werden automatisch nur die Felder gezeigt die einer Produktspezifikation zugewiesen sind. Du brauchst auch keine 4 Formulare, das lässt sich alles mit einem Formular mit einem Unterformular problemlos erfassen.
Bis zu diesem Zeitpunkt wirst Du auch kein VBA brauchen, keinen Buchstaben.

Von dem was Du bis jetzt hast wirst Du nichts verwenden können, Du musst noch mal von vorn anfangen.

Hier mal ein Link zu einem Tutorial:
https://www.access-tutorial.de/

Bevor Du weitermachst, beschäftige Dich damit. Mit dem jetzigen Konzept wirst Du nicht zu einer einfachen Bedienung kommen.
Gruß Klaus