Mai 25, 2022, 12:56:10

Neuigkeiten:

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


Kombifeld im Formular zur Parameterangabe in Abfrage mit Ausgabe ins Formular

Begonnen von Janky, April 01, 2022, 17:13:14

⏪ vorheriges - nächstes ⏩

MzKlMu

Hallo,
@Maxel
auch nebenbei.
Für mich ist hier die Mehrzahl logischer.
Ich würde hier die Tabelle auch "tblVerkäufe" nennen und den Primärschlüssel aber als Einzahl "VerkaufID".

Die Tabelle beinhaltet mehrere Verkäufe mit jeweils einem Verkauf. Ist für mich völlig logisch.  8)
Ist aber denke ich Ansichtssache.

Gruß
Klaus

Janky

ich hab jetzt alle ä, ö usw. ersetzt. Hatte anfangs nicht bedacht dass das ja auch Sonderzeichen sind. Hatte zunächst nach /#? usw gesucht um die zu verbannen  ::)

DF6GL

Hallo,



ZitatWas wäre der Vorteil von allem in einer Tabelle und wie soll das mit der Unterscheidung dann funktionieren?


Der Vorteil ist nur db-technischer Natur. Die Tabellen unterscheiden sich nicht im logischen Sinn ihrer Tabellenfelder, diese müssen nur so gekennzeichnet werden, zu welcher Kategorie sie gehören. Die Unterscheidung geschied halt durch einen Feldinhalt und nicht durch separate Tabellen.



@Maxel:

ZitatIch verstehe nicht, warum man eine Tabelle tblVerkäufe nennen muss - abgesehen vom Sonderzeichen ä.

Das muss man nicht, und es ist auch kein Dogma. Und  die Umlaute gehören auch nicht zu den Sonderzeichen.

(Viel) wichtiger sind die "echten" Sonderzeichen (außer Unterstrich).


Klaus hat dazu ja schon eine Erklärung zur Pluralität gegeben.



Wenn die DB international aufgestellt sein sollte, wäre allerdings eine komplette Benamsung mit englischen Namen (Bezeichnungen), die keine Ümlaute enthalten, eher angebracht. Aber selbst mit einer in arabischer Schrift verfassten DB und deutschem Access hatte ich (bis auf die Tatsache, dass ich kein arabisch lesen kann ;-) , keine Probleme in dieser Beziehung.   8)





Janky

Hallo, dann lasse ich es lieber wie es ist. habe keine Ahnung wie ich das genau umsetzten soll und ich verzweifle an den anderen Baustellen schon genug. Sitze jetzt seit du die geänderte DB hochgeladen hast hier und versuche die aktualisierungsabfrage zum laufen zu bekommen. Aber außer Fehlermeldungen ist lange nichts passiert. Jetzt hat er die Tabelle plötzlich um Datensätze für eine neue Farbe ergänzt obwohl er eine Fehlermeldung ausgegeben hat, hat bei der ArtikelID jedoch nicht von 720, sondern bei 1441 weitergezählt.
Habe langsam das Gefühl ich habe für Access ein paar Gehirnwindungen zu wenig und sollte mich auf CAD konzentrieren. Dummerweise muss ich trotzdem irgendwie dieses Fach bestehen...

DF6GL

Hallo,

gibst Du immer so schnell auf?

Zitat von: undefinedhat bei der ArtikelID jedoch nicht von 720, sondern bei 1441 weitergezählt.

Und um wieviele reale  Datensätze handelt es dabei?  Der Autowert zählt grundsätzlich beim Einfügen immer weiter, auch wenn vorherige Datensätze gelöscht werden. Das ist normal. Wenn der Autowert wieder bei 1 beginnen soll, dann ist der Tabelleninhalt komplett zu löschen und die DB zu "komprimieren/reparieren".






In der anhängenden Datei habe ich die Abfrage teilweise komplettiert. Du musst sie nur um die (Schlüssel-)Felder für Größen und Bearbeitungen erweitern.

Die tblArtikel ist inhaltlich gelöscht und die Db komprimiert/repariert, so dass "ArtikelID" wieder bei 1 beginnen kann.


Wenn die Abfrage alle (erwarteten) 720 DS generiert hat und nochmal ausgeführt wird, sollte eine Fehlermeldung bezgl. Schlüsselverletzung auftauchen und kein weiterer DS angefügt werden.


Wird dann eine neue Farbe (oder bei anderer Tabelle) hinzugefügt und die Abfrage ausgeführt, wird sie auch eine Fehlermeldung anzeigen, aber die neuen passenden Artikel einzufügen.



Der Ursache hierfür liegt darin, weil "Artikelnummer" einen eindeutigen Index besitzt, Dadurch kann ein vorhandener Artikel nicht nochmal, bzw. mehrmals eingefügt werden, was ja sicher sinnvoll ist.

Die Abfrage nutzt die Überwachung des Access-Datenbankmoduls (Jet-Engine, bzw. ACE) aus  (ebs wird mich schlagen  ;D  ).  Man könnte die Abfrage aber auch so gestalten, dass sie durch Überprüfung nur diejenigen DS anfügt, die noch nicht vorhanden sind. Dadurch wird die entspr. Fehlermeldung des DB-Moduls nicht getriggert, weil gar kein Fehler beim Einfügen auftritt.

https://www.ms-office-forum.net/forum/showthread.php?t=304156

(Punkt 3)

Janky

Hallo,
das ist genau das was ich gestern als erstes gemacht habe. Hab dann die Fehlermeldung mit der Schlüsselverletzung bekommen und versucht herauszufinden was das bedeutet. Hab dann geprüft ob die Einstellungen für Indiziert passen. Die Fehlermeldung blieb identisch und ich hab fleißig weitergesucht bis mich die vielen Anleitungen usw. so verwirrt haben bis ich das Gefühl hatte das ich bisher wohl die Logik dahinter vollkommen falsch verstanden habe. Normal gebe ich nicht schnell auf. Ich merke nur dass mir die Zeit wegrennt. Meine Woche Zeitpuffer ist schon verbraucht und ich komme lange nicht so schnell voran wie ich es geplant hatte. Gestern Abend war einfach nicht gut. Aber heute geht's Vollgas weiter. Das ich ja wohl von Anfang an die richtige Richtung eingeschlagen hatte motiviert dann doch ungemein.

DF6GL

Hallo,

hast Du es denn die Abfrage nun soweit fertig gestellt, dass alle Artikel mit ihren Fremdschlüsseln eingetragen werden?

Wenn so, dann  kannst Du Dich ja an die Formulare machen und zunächst überlegen, was mit denen gemacht werden soll.



Tipp:

Der Aufruf (Ausführung) der Abfrage könnte manuell mit der Klick-Ereignis-Prozedur einer Schaltfläche ("btnArtGen" oder ähnlich) im Form "frmArtikel"  realisiert werden.

Ganz komfortabel wird es, wenn jedes Mal nach dem Einfügen eines neuen Datensatzes in eine der  Grundtabellen (tblFarben, tblGrößen, etc )  die Abfrage ausgeführt würde.


(btw:  Das ist nur notwendig, wenn die berechnete Artikelnummer als solche gespeichert werden soll. Letzthin hatte ich ja angedeutet, dass berechnete Werte nicht gespeichert werden sollten. Wenn die zusammengesetzte Artikelnummer nicht gespeichert werden würde, entfiele das ganze Abfrage-Getöns. Ich bin auf die Abfrage-Lösung nur eingegangen, weil ich einen "Lerneffekt" im Auge hatte.)

Janky

Also die Abfrage habe ich wohl verstanden. Also wen ich möchte das alle möglichen Kombinationen gebildet werden Ziehe ich die Tabellen ins obere Fenster, verknüpfe sie nicht miteinander und wähne unten aus jeder Tabelle das Feld aus welches ich haben möchte und gebe an wo dieses Gespeichert werden soll. Die Artikelnummer wird generiert durch die entsprechenden [Codefelder] welche mit & verbunden werden. soweit ganz logisch.
Wenn ich jetzt die Artikelnummer speicher, bräuchte ich in Zukunft immer nur auf Das Feld zugreifen wo sie gespeichert ist.
Wenn ich sie nicht speicher müsste ich ja jedes mal die Zusammensetzung angeben. Warum ist das ein Vorteil? Nur wegen der Datenmenge? Hätte gedacht dass ich Rechenleistung spare wenn ich es einmal berechnen lasse und dann nur noch darauf zugreife.

DF6GL

Hallo

Abfrage: ok.  Nennt sich Cross Join oder kartesisches Produkt (Kreuzprodukt)



Zitatbräuchte ich in Zukunft immer nur auf Das Feld zugreifen wo sie gespeichert ist.


das ist richtig, zeigt aber nur den Stand zu demjenigen Zeitpunkt, an dem die Abfrage zuletzt ausgeführt wurde. 


ZitatWenn ich sie nicht speicher müsste ich ja jedes mal die Zusammensetzung angeben. Warum ist das ein Vorteil? Nur wegen der Datenmenge? Hätte gedacht dass ich Rechenleistung spare wenn ich es einmal berechnen lasse und dann nur noch darauf zugreife.



Der Vorteil einer Einsparung von Rechenzeit (wir sprechen hier und heutzutage von Microsekunden) wiegt nicht die Aktualität der Daten auf. Zudem erspart man sich überflüssige Aktionen, die latente Fehler beinhalten könnten.


Die Datenmenge und Berechnungszeiten in dieser DB ringen Access nicht mal ein müdes Runzeln ab.  ;D


Zitat...dann nur noch darauf zugreife...

Hier stellt sich eben die noch nicht beantwortete Frage, was denn nun anschließend mit der Artikelnummer angestellt werden soll...

Janky

Ziel ist es dass man auswerten kann welcher Kunde hat was wann gekauft. Zudem soll eine Rechnung aus diesen Daten erstellt werden. Die Artikelnummer soll mit auf die Rechnung. Die Artikelnummer soll außerdem die Kommunikation und die Suche nach Artikeln vereinfachen. z.B. wenn eine anfrage kommt ob "Vase Luna Weiß 210mm mit Goldglitzer" 7x und ... und ... auf Lager ist, wäre es einfacher "03010102 7x" als  Anfrage zu bekommen die man dann ganz schnell eintippen kann und den Lagerbestand sieht

Beaker s.a.

Hallo Janky,
Das ist doch alles kein Problem.
Du brauchst eine "tblArtikel" mit einem Autowert als Pk und den Feldern
aus denen deine ArtikelNrn. zusammengesetzt werden sollen (unten F1 - F3
benannt). Über diese Felder legst du dann noch einen eindeutigen Mehr-
felder-Index. Diese Tabelle füllst du einmalig anhand der gezeigten Kreuz-
tabelle.
Nur der Autowert wird dann für alle Beziehungen sowie zum Finden heran-
gezogen. Der Wert an sich hat keine inhaltliche Bedeutung.
Zum Finden eines Artikels auf einem Formular (DS-Herkunft = Abfrage auf
tblArtikel inkl. der berechneten ArtikelNr, s.u.) kannst du z.B. ein ungebun-
denes Kombi einrichten mit der gleichen (aber eingeschränkten, für's Kombi
reichen ja die zwei Felder) DS-Herkunft
"SELECT ArtikelID, F1 & F2 & F3 As ArtikelNr FROM tblArtikel"
Spalten: 2
-Breiten: 0cm, 4cm
automatisch ergänzen = Ja
Da kannst du dann deine ArtikelNr eingeben und mit
Privat Sub DiesKombi_AfterUpdate()
    Me.RecordSet.FindFirst "ArtikelID = " & Me.DiesKombi
End Sub
zu dem DS navigieren.
Wenn du lieber mit Teilen der ArtikelNr suchen oder darauf filtern willst, nimm
ein Textfeld
Privat Sub EinTextfeld_AfterUpdate()
'entweder, findet den 1. DS, der dem Suchmuster entspricht
    Me.RecordSet.FindFirst "ArtikelNr LIKE '*" & Me.EinTextFeld & "*'"
'oder, filtert die DS-Herkunft des Forms auf alle DS, die dem Suchmuster entsprechen
    Me.Filter LIKE '*" & Me.EinTextFeld & "*'"
    Me.FilterOn = True
'wobei ich es bevorzuge hier ohne feste Joker zu arbeiten, und lieber
den Anwendern deren Verwendung erkläre, gerade in deinem Fall
End Sub
Lagerbestände zeigst du in einem UFo oder einem Listfeld an. Voraussetzung, die
Bewegungsdaten haben einen FK zur ArtikelID (s.o.)

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Janky

Vielen Dank für eure Hilfe. Leider merke ich dass ich in jeder Antwort erstmal so viel noch Googlen muss was die Sachen alles bedeuten und mein Wissensstand es selbst mit einer so tollen Hilfe unmöglich macht bis Donnerstag Abend die Datenbank fertig zu haben. Gibt es hier vielleicht jemanden der per Discord Nachhilfe geben könnte? Glaube wenn ich nicht stunden mit der Suche nach Antworten verschwende könnte ich es noch schaffen. Könnte 25€ pro Stunde anbieten. Oder haltet ihr es selbst auf diese Art für aussichtslos
für einem absoluten Noob auf dem Gebiet?