Relationen innerhalb der Datenbank

  • Allgemein

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Relationen innerhalb der Datenbank

    Hallo Leute,
    ich habe ein mittelgroßes Problem. Ich bin mittlerweile was VBA für Excel betrifft recht fit, nun ist aber so, dass ich eine Datei, die jeden Tag per Email ankommt in eine Access Datenbank speichern will und dann via Excel auf diese Datenbank zugreifen will.
    Ich habe mich ein bisschen in Access eingelesen, aber wie ich die Datenbank am besten aufbauen ist mir ein bisschen schleierhaft.
    Folgendermaßen sollte sie funktionieren: Es kommt jeden Tag eine Text Datei (auf Monatsbasis) in der 80 verschiedene Produkte aufgelistet sind. Für jedes Produkt gibt es eine Übersicht, wie lange das Produkt an dem jeweiligen Tag online war. Folglich steht am 1.Tag des Monats nur eine Zeile mit der Onlinezeit unter dem Produkt. Die Text-Datei wächst also mit den voranschreitenden Tagen. Diese Datei soll in Access eingelesen werden und die Daten aus der Text-Datei täglich gespeichert werden.
    Anschliessend soll Excel auf die Datenbank zugreifen und sich die Werte für jedes Produkt raussuchen und damit ausrechnen, ob eine Mindestanforderung der Onlinezeit gegeben ist. Dieses Problem ist jedoch erstmal weiter weg, da ich erstmal versuchen sollte die Datenbank richtig zu erstellen.
    Die Frage ist also: Nach welcher Logik gehe ich am besten vor? Ein Table mit allen Produkten und dann nochmal 80 Tables für jedes Produkt wo die einzelnen Onlinezeit eingetragen werden oder wie benutzt man Access für solch einen Fall am geschicktesten?
    Gibt es einen VBA Befehl der die Datei ordentlich in Excel einliest und anschließend die leeren und nicht benötigten Zellen löscht? Leider kommt es mir so vor, als wäre es wesentlich einfacher die Textdatei mit Excel zu öffnen als mit Access, da in Excel die Formatierung wesentlich sinnvoller und nicht so "verschoben" ist.

    Für jede Hilfe wäre ich sehr dankbar!
    Lg Jule

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „JulesM“ ()

    Ich habe jetzt keine VBA-Lösung parat (meine Access-Basic-Kenntnisse stammen noch aus der Zeit von Version 2.0 :rolleyes: ). Aber trotzdem eine Frage als Anregung:

    Euer Verfahren ist ja sehr kompliziert und damit auch fehleranfällig (Textdatei->AccessDB->Excel). Das muss ja überall ganz sauber hinhauen und die Daten müssen ganz sauber übergeben werden, weil du ja nicht nur drei Programme hast, sondern die ticken auch alle noch völlig anders (Textverarbeitung/Editor->DBMS->Tabellenkalkulation).

    Wenn ihr diesen steinigen Weg geht, muss ich natürlich davon ausgehen, dass ihr aus irgendwelchen Gründen nicht anders könnt. Aber trotzdem: Warum wird nicht an der Stelle, wo die Textdatei erstellt wird, gleich Excel eingesetzt? Und warum dieser Umweg über Access? Lässt sich die Textdatei nicht direkt in Excel einlesen? Die Textdatei ist doch sicher strukturiert, also die Datensätze werden eindeutige Separatoren haben.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D
    Moin Jule,

    habe ähnliches, oder fast identisches Problem gehabt...

    Ich bekomme monatlich ( ist vom Prinzip ja egal ob täglich o. monatlich ) eine Datei in der Artikelnummern und Liefermengen des Monats enthalten sind. Die Liefermengen könnten nun auch Deine Onlinezeiten sein.

    Ich habe in Access eine Tabelle die diese Daten dann speichert, d.h. mein VB-Programm öffnet die Datei ( dieses kommt übrigens aus SAP ) und stellt den Inhalt in einer Listview dar. Mir den Daten der Listview prüfe ich, z.B. die ref. Integrität, d.h. ob z.B. eine gelieferte Artikelnummer auch in den Stammdaten der verknüpften Artikeldaten vorliegt.

    Nach Prüfung wird der Inhalt der Listview, zzgl. einiger anderer Daten ( wer hat wann importiert, einige Zusatzfelder ) in die eine o.g. Access-Tabelle gespeichert.

    Diese Access-Tabelle ist im Kern wie folgt strukturiert :

    Index
    Artikelnummer
    Liefermonat
    Lieferjahr
    Liefermenge
    und einige Zusatzdaten

    Der Index ist bei mir ein Text, dieser ergibt sich aus Artikel & Monatindex. Den Monatindex errechne ich aus Jahr x 12 + Monat. Der Index der Tabelle ist somit eindeutig

    Mit dieser Struktur kann ich abfragen welcher Artikel in welchem Monat geliefert wurde, ich kann die jährlichen Liefermengen abfragen, etc.

    Deine Tabelle würde ich ähnlich aufbauen

    Index
    Produkt
    Online Tag
    Online Monat
    Online Jahr
    Online Datum
    Online Zeit

    Der Index wäre hier Produkt & Onlinedatum.


    Wenn Du nun täglich importierst und Deine Rohtabelle alle Tage des Monats beinhaltet musst Du natürlich abfragen ob in der DB-Tabelle der Index bereits existiert. Wenn ja dann überschreibst Du einfach die Onlinezeit, wenn nein fügst Du diesen neuen Datensatz hinzu.

    Bei mir funktioniert dieses Prinzip sehr gut, in der DB-Tabelle stehen dann alle Artikel und Liefermengen untereinander. Bei mir sind dies bereits so um die 20.000 Datensätze.

    Mfg

    Blaser_07
    Danke für eure Antworten, ich bin mittlerweile auch echt einige Schritte weiter gekommen.
    Jetzt hat sich aber ein neues (für mich unlösbares Problem) ergeben.
    Ich habe jetzt ein Tabelle die "Produkte" heisst. Diese ist verbunden mit der Tabelle "Daten". Öffne ich die Tabelle Produkte, dann erscheint ein plus um die Daten aufzuklappen. Genau so wollte ich das auch.
    Jetzt gibt es das Problem, dass ich davor noch eine Tabelle "schalten" will, die "Länder" heisst. In dieser Tabelle sollen die 5 Länder aufgelistet sein, sprich DE,NL,FR,UK,IT
    Ich möchte, dass beim öffnen der Tabelle Länder sich bei der Anwahl von bspw. "DE" alle Produkte aufklappen, die in Deutschland gelistet sind und man ausgehend davon weiter die Daten zu dem jeweiligen Produkt aufklappen kann.
    Wie ist dies zu bewerkstelligen? Vorallem handelt es sich pro Land um ca. 40 Produkte, wie kann ich die auf einfachstem Wege den Ländern zuordnen ohne in einer Tabelle jedes Einzelne Produkt einzeln einzugeben?

    Danke nochmal vielmals für eure Antworten!
    ich denke, du mußt mal bischen Datenmodellierung machen.

    Also es gibt Länder, Tage, Daten, Produkte

    Wie hängen diese Dinge miteinander zusammen?

    Die Crux wird "Daten" sein, weil darunter kann sich keinSchwein was vorstellen. Suche einen treffenderen Namen dafür.

    Was sind das für Daten, und wozu sind die gut?
    Moin.

    Also erst einmal erlese ich, dass die Datei vom 2. Tag die Daten vom 1. Tag enthält.
    Die Datei vom 3. Tag die Daten vom 1. und 2. Tag.. usw.

    Willst du die Daten jeden Tag einlesen oder nur am Ende des Monats betreffend Auswertungen?

    Ich denke du brauchst eine Tabelle in der jeweils das Produkt und die Daten der Onlinezeiten sind.
    Sprich für jeden Tag nen Datensatz.

    Summieren usw. ist ja für ne Datenbank ein Kinderspiel.
    Du kannst eine Tabelle "Produkt" anlegen in der es zwei Spalten gibt.
    1. ID (eindeutige Nummer)
    2. Name

    Zudem dann eine zweite Tabelle mit drei Spalten:
    1. ProduktID
    2. Datum
    3. Onlinezeit

    Ich weiß nicht ob das alle Informationen sind oO
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Also der Anfangspost ist bereits erledigt, ich habe es nur hier reingepostet, weil ich keinen neuen Thread öffnen wollte.

    Folgendes: Ich habe 2 Tabellen. Tabelle 1 enthält alle Produktnamen. Tabelle 2 Informationen zu den Produktnamen. Ich habe die Tabellen miteinander in Beziehung gesetzt, damit ich aus Tabelle 1 direkt anhand des Klicken auf das "+" Zeichen die Tabelle 2 als Untertabelle sehen kann.

    Das funktioniert soweit auch gut.

    Nun möchte ich aber, dass es eine "Tabelle 0" gibt, in der die einzelnen Produktnamen Ländern zugewiesen werden. Sprich:
    Man öffnet Tabelle 0 und hat dort die fünf Länder (DE,NL....) gelistet. Nebendran soll sich ein + Zeichen befinden indem man die beim aufklappen alle Produkte sieht, die in dem Land gelistet sind. Wie kann ich diese Zuweisungen machen?

    Ich möchte das Problem unbedingt lösen, also wenn ihr Verständnissfragen habt: nur zu!
    Danke
    Du machst dir deine Ländertabelle mit den Feldern:
    ID und Land.
    Dann machst du in deiner Produkttabelle ein zusätzliches Feld "LänderID" und verknüpfst die Tabellen wiederum über Land.ID und Produkt.LänderID
    Dann kannst du über die Tabelle Land mit dem + die Produkte auf machen.

    Meinst du das so?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Ich GLAUBE ja, er will das erstmal innerhalb von Access abbilden.
    Das schaut mir nicht danach aus als würde er versuchen das mit SQL Befehlen und Co abbilden wollen, sondern über Drag & Drop ^^
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    ErfinderDesRades schrieb:

    JulesM schrieb:

    also wenn ihr Verständnissfragen habt

    warum antwortest du nix auf post#5?
    Ich denke, dass ich mit meinen Posts drauf eingegangen bin was ich vorhabe. Die Daten zu den einzelnen Produkten sind 4 verschiedene Zeitangaben, wie lange das Produkt online war. "Daten" war dumm ausgedrück von mir, in meiner Datenbank heisst die Tabelle tatsächlich OnlineTime

    MemoAnMichSelbst schrieb:

    Du machst dir deine Ländertabelle mit den Feldern:
    ID und Land.
    Dann machst du in deiner Produkttabelle ein zusätzliches Feld "LänderID" und verknüpfst die Tabellen wiederum über Land.ID und Produkt.LänderID
    Dann kannst du über die Tabelle Land mit dem + die Produkte auf machen.

    Meinst du das so?
    Ja, das meine ich so. Ist es möglich auch die ProduktID Tabelle mit der OnlineTime Tabelle zu verbinden und dann diese über LandID einzusehen? Sprich: öffnen von LandID, klick auf + um die zugeordneten Produkte zu sehen und dort an den jeweiligen Produkten nochmal auf + um die zugehörigen Online-Zeiten einzusehen.
    Folgende Verknüpfüng wäre dann wohl richtig: LandID-Produkte-OnlineTime. Bisher ist es möglich über die Land Tabelle die jeweiligen Produkte zu sehen und über die Produkt Tabelle die jeweiligen Online-Zeiten. Ich würde aber gerne über die Land Tabelle (über die Produkte) direkt auf die Online-Zeiten zugreifen.

    JulesM schrieb:

    Ich denke, dass ich mit meinen Posts drauf eingegangen bin was ich vorhabe.

    Ja vlt, aber ist das eine Antwort auf post#5?

    Ich kann ihn dir inhaltlich auch nochmal wiederholen:
    IMO, wenn du was sinnvolles hinkriegen willst, mußt du mit Datenmodellierung anfangen - verstehst du, wassichmeine, und stimmst du mir zu?

    Datenmodellierung bedeutet, die wirklichkeit zu betrachten, die Dinge, die vorkommen, und wie sie zusammenhängen.

    Genannt wurden: Länder, Tage, Produkte, OnlineTime

    wie hängen diese Dinge zusammen? Was mir sinnvoll erscheint wäre: ein Land produziert viele Produkte, ein Produkt kommt aus nur einem Land. Das wäre eine 1:n - Relation, Kurzschreibweise:
    Land -> Produkt

    weiter.
    Ein Produkt ist zu vielen Zeiten Online, eine OnlineTime bezieht sich auf genau ein Produkt

    Produkt->OnlineTime

    Tja, mit Tage kann ich grad selbst nix anfangen, es kommen halt täglich onlineTime-Daten rein - also wenn du da Verwendung für hast - ansonsten würdichs fallenlassen, und käme damit zu folgendem sehr einfachen Datenmodell:

    Land->Produkt->OnlineTime

    Wie gesagt: das ist nur eine Einführung in die Denkweise, weil wie die Wirklichkeit ist, weißt nur du.

    Jo, und bisher bist du keine Spur auf diesen Ansatz eingegangen, ob du ihn ühaupt verstehst, oder für sinnvoll hälst. Stattdessen fängst du jetzt an von Tabelle1 und Tabelle2 zu reden, und irgendwas was passieren soll, wenn man iwo hinklickst, und wie man was ausrechnet und Zeugs.
    Das sind aber alles Fragen, die erst behandelt werden können, wenn ein Datenmodell auskonzipiert ist.

    Tabelle 1 und 2 sind natürlich wichtig fürs Datenmodell, aber bitte auch hier: finde einen geeigneten Namen, dass man eine Vorstellung hat, welches Stück wirklichkeit die jeweilige Tabelle modelliert.