Office: Brauche dringend einen Lösungsweg!

Helfe beim Thema Brauche dringend einen Lösungsweg! in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo an euch alle, ich brauche ganz dringend eure Hilfe. Zu meiner Situation: Ich habe zwar Access gelernt aber das ist schon Jahre her. Nun soll... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Blassnase, 28. Oktober 2008.

  1. Blassnase Neuer User

    Brauche dringend einen Lösungsweg!


    Hallo an euch alle,

    ich brauche ganz dringend eure Hilfe. Zu meiner Situation:
    Ich habe zwar Access gelernt aber das ist schon Jahre her. Nun soll ich im Büro ein Formular erstellen, über welches mein Chef eine schnelle Auswertung unserer Datenbank bekommt.
    Das Problem ist folgendes:
    -In einer externen, jedoch kompatiblen Datenbank liegen rund 60 Netzwerkordner, jeder Ordner stellt eine Niederlassung dar.
    -Innerhalb jedes Ordners befindet sich jeweils eine identisch aufgebaute Tabelle, welche die benötigten Daten enthält.
    -Die Tabellen beinhalten die Spalten Preis, Warengruppe, Verkäufe in den Monaten 1-12, Summe der Monatsverkäufe.

    In dem Formular soll man nun die Niederlassung wählen können, den Monat und die Warengruppe. Nach dieser Auswahl sollen die innerhalb der Warengruppe enthaltenen Preisgruppen (alle gleichen Preise innerhalb der Warengruppe zusammengefasst), die zusammenaddierten Verkäufe innerhalb des gewählten Monats, sowie die Einnahmen (also der Preis x die Verkäufe) zu sehen sein!
    Ich weiss, das klingt ziemlich unübersichtlich... mein grösstes Problem besteht erstmal darin dass ich keine Ahnung habe wie ich all die Tabellen überhaupt abfragen kann, da ich ja nur eine einzige dieser rund 60 Tabellen benötige und diese auch noch innerhalb des Formulars auswählbar sein muss.
    Ich hoffe also dass einer von euch also eventuell einen kleinen Denkanstoss für mich hat, wenn möglich ohne SQL und VBA, da ich mich da gerade erst einlese.

    Vielen Dank schonmal und wenn es nicht möglich sein sollte, wäre es nett wenn ihr mir die Gründe dafür nennen könntet, dann könnte ich das wenigstens meinem Chef mitteilen!
     
    Blassnase, 28. Oktober 2008
    #1
  2. miriki Erfahrener User
    Örks... ;-) Das klingt jetzt irgendwie nach "Ich will nach Hamburg fahren, aber möglichst ohne Reifen und ohne Benzin."

    Also, mal gucken... 1. Problem, die Auswahl der Filiale... Du könntest eine Tabelle bauen, in der die Filialen und die zugehörigen Netzwerkordner aufgelistet sind. Dies ließe sich dann in einer ComboBox darstellen, die zur Auswahl im Formular benutzt werden kann. Bis hierhin noch einfach. Das wäre manuell zu pflegen, aber geht dann noch ohne VBA.

    Die Auswahl des Monats geht, denke ich mal so, auch relativ gut über eine ComboBox, die einfach mit den Werten 1;Januar bis 12;Dezember gefüllt ist. (2 Spalten! Zahl und Name!)

    Ich schätze, auch die Warengruppen sind fest vorgegeben? Dann auch hier eine Tabelle mit den Warengruppen als Basis für die nächste ComboBox.

    Ab jetzt spätestens wirst Du um VBA (und SQL) nicht mehr so ganz herum kommen. Das "Change" Ereignis der ersten drei ComboBoxen würde sich hier anbieten, um die eigentliche(n) Auswertung(en) zu erstellen. Alternativ kann auch ein Button herhalten, der nach Einstellung der drei ComboBoxen gedrückt werden muß.

    Was genau da jetzt passieren soll? Hmmm...

    Anhand der 1. ComboBox wird die Tabelle bestimmt, die benutzt werden soll. in der SQL-Syntax wäre das "FROM xxx".

    Die 2. ComboBox bestimmt, welcher Monat benutzt werden soll, die 3. die Warengruppe. Im SQL wäre das "WHERE (feld1=xxx AND feld2=xxx)"

    Um also zuerst einmal alle benötigten Datensätze zu kriegen, hättest Du dann als SQL-Statement:
    Code:
    SELECT
      *
    FROM
      tabelle1
    WHERE
      (feld1 = bedingung1) AND
      (feld2 = bedingung2)
    ORDER BY
      feld1, feld2
    ;
    Das wäre dann schon die Datenquelle für die weitere Auswertung. Mir ist jetzt allerdings noch nicht ganz klar, wie Du die Tabelle wirklich ansprechen kannst. Sind die 60 Dinger als externe Tabelle in die mdb eingebunden, oder was?

    Das mit den Preisgruppen hab ich nicht so ganz verstanden, aber es klingt ein wenig nach SQL ;-) "DISTINCT", "DISTINCTROW" oder ähnlichem, um gleiche Werte zu gruppieren.

    Die Summe von Werten über einen Datenbestand läßt sich über SQL ;-) SUM
    Code:
    sum(feld1) as feldsumme
    berechnen. Die Einnahmen lassen sich auch direkt in SQL ;-) mit
    Code:
    (feld1 * feld2) as feldprodukt
    berechnen.

    Diese SQL-Konstrukte müßtest Du mit VBA zusammenbesteln und dann "abfeuern", das Ergebnis dann per VBA auswerten und im Formular anzeigen.

    Alternativ kannst Du die Abfragen bereits in der mdb vorgeben und später dann per VBA mit den entsprechenden Parametern füllen. Aber um VBA wirst Du kaum herumkommen.

    Gruß, Michael
     
  3. Blassnase Neuer User
    Hallo miriki,

    vielen Dank erstmal für deine Antwort! Also dass ich Sprit und Reifen doch brauche, ist mir inzwischen klar geworden (leider)!!! :-? Für die erste Bedingung hab ich inzwischen auch eine Hilfestellung bekommen. Nur Blick ich da Dank meiner (Un-)Kenntnisse nicht durch!
    So sieht das dann da aus:

    Private Sub Form_Load()
    Dim tbl As TableDef, strList As String
    For Each tbl In CurrentDb.TableDefs
    If Left(tbl.Name, 4) <> "Msys" Then strList = strList & ";" & tbl.Name
    Next
    Me!cmbTabellen.RowSourceType = "Value list"
    Me!cmbTabellen.RowSource = Mid(strList, 2)
    End Sub


    Private Sub cmbTabellen_AfterUpdate()
    Me!lstListe.ColumnCount = CurrentDb.TableDefs(Me!cmbTabellen).Fields.Count
    Me!lstListe.ColumnHeads = True
    Me!lstListe.RowSource = "Select * from " & Me!cmbTabellen
    End Sub

    Nur hab ich ehrlich gesagt eben keine Ahnung was ich damit anfangen soll, bzw wie ich es verwenden soll! Das soll wohl dazu da sein, dass meine Tabellen nach der Auswahl in einem Kombifeld angewählt werden.
    Die Monate sind übriges sowieso nur als Wert angegeben (Mon1- Mon12). was du mit den Warengruppen in eine Tabelle meinst, ist mir jedoch noch nicht so ganz klar... es steht ja ALLES in EINER Tabelle zusammen, also:
    WG (für Warengruppe), VK-Preis, Mon1, Mon2,... , Mon12 (wobei unter den Monaten die Anzahl der jeweiligen Verkäufe steht!)
    In meinem Formular brauch ich dann auch noch die Summe aus dem Preis und der Anzahl der Verkäufe.
    Für das Kombifeld für die Auswahl der anzuzeigenden WG hab ich auch was bekommen, kann damit aber im Prinzip genau so wenig anfangen, sieht dann so aus:

    ub cmbWG_Afterupdate()
    Me.Filter="WG=" & Me!cmbWG &""
    Me.Filteron=true
    End Sub

    Kannst du mir dazu eventuell weiter helfen oder hast vielleicht sogar nen einfacheren Weg???
    Vielen Dank schonmal an alle die mir weiterhelfen möchten!
     
    Blassnase, 29. Oktober 2008
    #3
  4. miriki Erfahrener User

    Brauche dringend einen Lösungsweg!

    Code:
    For Each tbl In CurrentDb.TableDefs
    hiermit werden alle Tabellen in der Datenbank durchlaufen.
    Code:
    If Left(tbl.Name, 4) <> "Msys" Then
    Es werden nur die Tabellen berücksichtigt, deren Namen nicht mit "Msys" anfangen. Das wären dann nämlich die intern benutzten Tabellen.
    Code:
    strList = strList & ";" & tbl.Name
    Und hier wird dann der Name der Tabelle in die Liste aufgenommen.
    Code:
    Me!cmbTabellen.RowSourceType = "Value list"
    Me!cmbTabellen.RowSource = Mid(strList, 2)
    Die Liste wird dann als Datenquelle für die ComboBox gesetzt. Und das wird dann eben direkt beim Öffnen des Formulars (FormLoad) gemacht. Hiermit würdest Du aber nur alle Tabellen erwischen, die auch wirklich in der Datenbank "bekannt" sind. Also Deine externen Tabellen müssen mindestens eingebunden sein, sonst bleibt die Box leer. Wenn Deine 60 Tabellen ein einheitliches Namensschema haben, wäre die "IF"-Zeile auch der richtige Ort, die Suchmaske für die Tabellen anzupassen, damit nicht alle anderen Tabellen ebenfalls in der Liste auftauchen.

    Code:
    Me!lstListe.ColumnCount = CurrentDb.TableDefs(Me!cmbTabellen).Fields.Count
    Me!lstListe.ColumnHeads = True
    Me!lstListe.RowSource = "Select * from " & Me!cmbTabellen
    Wenn die ComboBox sich ändert, wird hier geguckt, wieviele Felder (Spalten) die angewählte Tabelle hat. Dieser Wert wird als Spaltenzahl für die Liste und die Datenquelle auf die Tabelle gesetzt. Es wird also, kurz gesagt, die in der ComboBox angewählte Tabelle in einer Listbox dargestellt.

    "Mon1" ist aber kein Wert, zumindest kein numerischer. Und in der SQL-Abfrage spöäter wirst Du etwas brauchen wie
    Code:
    WHERE month(datum)=suchmonat
    Und da month(datum) einen numerischen Wert liefert, kann dieser auch nur mit einem numerischen Wert verglichen werden. suchdatum muß also numerisch sein.

    Örks... Hmmm... Wer addiert denn da die Verkäufe monatsweise? Die stehen echt schon als Ergebnis in der Tabelle? Das klingt nach einem etwas schrägen Design der Tabellen.

    a) Es ist nicht notwendig, für jeden Monat ein Feld bereitzustellen. Außerdem: Dann müßte das konsequenterweise auch für jedes Jahr gemacht werden.
    b) Summen müssen nicht als Ergebnis in Tabellen stehen, weil es dafür SQL-Funktionen für Abfragen gibt, die das zur Laufzeit berechnen und damit jederzeit aktuelle Ergebnisse liefern und es keine Inkonsistenzen geben kann.

    Es reicht also prinzipiell eine Tabelle "Verkäufe" in der steht:
    Code:
    Artikel   Datum   Anzahl   Preis   Warengruppe
    Per Abfrage läßt sich dann jederzeit darstellen, welcher Artikel in welchem Monat wie oft verkauft wurde und was als Preis-Summe dabei rumgekommen ist. Erweiterungen mit "Mehrwertsteuer" (als Satz, nicht als Betrag!) usw. natürlich möglich.

    Per SQL (oder natürlich auch einer parametrisierten Abfrage) ließe sich dann mit
    Code:
    SELECT
      artikel, datum, anzahl, preis, (anzahl*preis) AS summe, warengruppe
    FROM
      tbl_verkaeufe
    WHERE
      YEAR(datum)=2008 AND
      MONTH(datum)=3 AND
      warengruppe=5
    auflisten, welche Artikel der Warengruppe 5 im Monat März 2008 verkauft wurden. Mit Aggregatfunktionen wie "SUM(summe) AS gesamtsumme" oder "COUNT(artikel) AS gesamtanzahl" lassen sich weitere Informationen auslesen.

    Summen manuell zu pflegen hat 2 entscheidende Nachteile:
    a) Rechenfehler passieren! Die Summe der verkauften Artikel stimmt dann nicht mehr mit der manuell berechneten überein. Wer will da den Fehler finden?
    b) Die Summe ist immer zeitlich versetzt aktuell zur Summe der real verkauften Artikel. Selbst während man noch die Summe eintippt, können schon wieder die nächsten Verkäufe passieren.

    Gruß, Michael
     
  5. miriki Erfahrener User
    Wenn bei euch Warengruppen das sind, was ich bislang als Warengruppen kenne, dann hat man i.a. einen Tabellenaufbau der Art:

    Code:
    artikel   beschreibung   warengruppe   preis   [...]
    -------   ------------   -----------   -----   [...]
    1234567   xxxxxxxxxxxx   123           12,34
    2345678   xxxxxxxxxxxx   234           23,45
    3456789   xxxxxxxxxxxx   345           34,56
    [...]
    
    warengruppe   beschreibung   [...]
    -----------   ------------   -----
    123           xxxxxxxxxxxx
    234           xxxxxxxxxxxx
    345           xxxxxxxxxxxx
    Somit werden ähnliche Artikel anhand Beschaffenheit, Lagerort, Versandart, Kalkulation, Mehrwertsteuersatz, ... in Gruppen zusammengefaßt, um darüber getrennte Statistiken zu ermöglichen. Über die Angabe "Warengruppe" in dem Artikel lassen sich weiterführende Details der Gruppe aus der anderen Tabelle holen, damit man die nicht in jedem Artikel erneut erfassen muß (Vermeidung von Tippfehlern, zentrale Anpassungsmöglichkeit).

    Und eben diese Übersicht der Warengruppen, also die 2. Tabelle da oben, meinte ich. Die wäre dann Datenquelle für eine der ComboBoxen, um die Warengruppe für die Auswertung auswählen zu können.

    Gruß, Michael
     
  6. Blassnase Neuer User
    Hallo Michael,
    naja, auf die Tabelle komm ich später noch zu sprechen, denn die kann ich wie gesagt nicht verändern!
    Jetzt aber nochmal zu dem VBA... kann ich das alles einfach so übernehmen? Irgendwie ja nicht, da dann nichts passiert! Muss ich da noch was anpassen oder zufügen? Ich hab jetzt die letzten Tage probiert da mal durch zu steigen, konnte mich aber auch nicht so richtig drauf konzentrieren!

    Was meinst du denn mit einbinden? Ich hab sie jetzt als Verknüpfung in der Datenbank, reicht das?
    Bekomme ich für sowas irgendwo eine Noob-gerechte, schnell verständliche Anleitung???
    Und zurück zu den Tabellen... ja die sind total besch... designt, weiss ich, kanns aber nicht ändern! Das Jahr muss trotzdem nicht geändert werden, da die Tabelle einfach jährlich überschrieben wird. Und die Tippfehler, naja, da muss ich mich eben auf die Leute verlassen, die die Daten einpflegen! Die Tabellen haben übrigens in etwa das Namensschema "Niederlassung1 -Niederlassung60, können also z.B. mit einem "like"-Filter eingefügt werden! Insgesamt soll ich aber glaub ich irgendwie aus Sch... Gold machen hab ich das Gefühl! Kannst du mir beim vergolden nochmal irgendwie weiterhelfen? ...Oder irgendjemand???
    Vielen Dank!
     
    Blassnase, 2. November 2008
    #6
  7. miriki Erfahrener User
    Oh, ja, doch so einiges. Z.B.:
    Code:
    Me!cmbTabellen.RowSourceType = "Value list" 
    Me!cmbTabellen.RowSource = Mid(strList, 2)
    Hier wird, wie gesagt, die ComboBox "mit Leben gefüllt". Das geht aber natürlich nur, wenn die ComboBox auf dem Formular auch wirklich "cmbTabellen" heißt. Das sollte sie aber schon, denn sonst hättest Du eine eindeutige Fehlermeldung bekommen.

    Das komplette
    Code:
    Private Sub cmbTabellen_AfterUpdate()
    brauchst Du eigentlich eher nicht. Das zeigt ja nur den Tabelleninhalt der ausgewählten Tabelle in einer Listbox an.

    Wenn Du damit "Datei - Externe Daten - Tabellen verknüpfen..." meinst, dann reicht das, ja. Damit tauchen die Tabellen auf dem Karteireiter "Tabellen" im Datenbankfenster auf und werden somit auch von obiger Schleife abgearbeitet.

    Hmmm, ne... Die Tabellen brauchen nicht per SQL eingefügt werden. Die sind ja schon eingebunden. Über LIKE holst Du Dir Daten aus Tabellen, aber nicht die Tabellen selbst.

    Aber die Zeile
    Code:
    If Left(tbl.Name, 4) <> "Msys" Then [...]
    kann dann zu
    Code:
    If Left(tbl.Name, 13) = "Niederlassung" Then [...]
    werden.

    Sollte also Deine ComboBox den richtigen Namen haben, die obige Routine im Formular-Source stehen und Du das Formular neu öffnest, dann sollten in der ComboBox eigentlioch alle Deine "Niederlassung"-Tabellen aufgelistet sein.

    Das ist dann aber auch nur der 1. Schritt. Denn die Auswahl der Statistik hat dann ja noch ein, zwei Schritte mehr...

    Die ComboBox mit den Monaten läßt sich ja noch simpel per konstanter Werteliste füllen, wenn man durch den Assistenten läuft.

    Die ComboBox mit den Warengruppen... Da wirst Du dann schon wieder SQL benötigen, schätze ich mal. Und selbst wenn nicht, um VBA kommst Du nicht herum.
    Code:
    SELECT DISTINCTROW warengruppe FROM tabelle ORDER BY warengruppe;
    Das wäre ein SQL-Source für die Liste der Warengruppen. Das läßt sich aber auch ggf. als parametrisierte Abfrage (Tabellen-Name ändert sich) realisieren. Aber danach mußt Du in einer ähnlichen Schleife wie ganz oben die ComboBox füllen. D.h.:
    a) In einer Schleife alle Datensätze durchlaufen und
    b) mit ";" und Name der Warengruppe aneinanderketten, dann
    c) die RowSourceType der ComboBox auf "Value list" setzen und
    d) die RowSource auf die zusammengebastelte ";"-Liste setzen.

    Und damit hast Du dann zwar 3 ComboBoxen mit Inhalt auf dem Formular. Aber was dann passieren soll, wenn die auf Werte eingestellt sind und ein Button "Start" gedrückt wird, naja das... ;-)

    Gruß, Michael
     
  8. Blassnase Neuer User

    Brauche dringend einen Lösungsweg!

    Hallo nochmal,
    ich hab jetzt ne ganze Weile Bücher zu dem Thema gewälzt und mich mit euren (DEINEN) Hilfestellungen beschäftigt. Auf jeden Fall möchte ich mich hiermit nochmal für die grossartige Hilfe bedanken. Trotz allem musste ich jedoch einsehen (vor allem aber mein Chef, dafür ein besonderes Dankeschön!!!) dass dies nicht mal eben so zu erledigen ist, vor allem da Cheffe ja noch mehr solche Aufgaben hat. Darum breche ich hier erstmal ab und werde erstmal einen Access-VBA-Lehrgang belegen. Ich hoffe dass ich dadurch auch mal so gut werde wie ihr es seid und hier in Zukunft eventuell auch mal zu Problemlösungen beitragen können werde!!!
    Trotzdem freu ich mich natürlich auch weiterhin über Ideen und Anregungen zu meinem Problem!
     
    Blassnase, 19. November 2008
    #8
Thema:

Brauche dringend einen Lösungsweg!

Die Seite wird geladen...
  1. Brauche dringend einen Lösungsweg! - Similar Threads - Brauche dringend Lösungsweg

  2. Brauche Dringend Excel Hilfe für meine Bachelorarbeit

    in Microsoft Excel Hilfe
    Brauche Dringend Excel Hilfe für meine Bachelorarbeit: Ich möchte mit einer Excellösung ohne Makros über eine Wertetabelle einen Graphen darstellen. Polynomfunktionen. Es soll der Anfangswert für x eingegeben werden sowie auch der Endwert für x....
  3. (VBA) UserForm codieren, brauche dringend Hilfe!

    in Microsoft Excel Hilfe
    (VBA) UserForm codieren, brauche dringend Hilfe!: Hallo Liebe User!!! Kann mir bitte jemand mit meiner Suchfunktion weiterhelfen, ich mochte eine Art Lager Einrichten und dabei Stückzahl per Button und Textfeld in der Tabelle immer Aktuell...
  4. Brauche dringend Hilfe bei mener VBA Suchfunktion!

    in Microsoft Excel Hilfe
    Brauche dringend Hilfe bei mener VBA Suchfunktion!: Hallo Leute, es handelt sich bei dem Makro um eine Suchfunktion, ich denke das die VBA Profis das Makro verstehen werden. kann mir bitte jemand das Makro so umändern, dass die Suchfunktion...
  5. Excel Tabelle Spalte/Zeile Brauche dringend Hilfe

    in Microsoft Excel Hilfe
    Excel Tabelle Spalte/Zeile Brauche dringend Hilfe: Hallo habe ein Bild mit hinzugefügt mit einer Tabelle mit Monat/Kalenderwoche wie bekomme ich den gelben Kasten auf die Hälfte der 16. Kalenderwoche? Wäre super wenn einer eine Lösung weiß .Danke...
  6. Brauche dringend Hilfe mit SVerweis

    in Microsoft Excel Hilfe
    Brauche dringend Hilfe mit SVerweis: Hallo ich hab ein Problem mit dem Sverweis und ich finde keine Lösung dafür.... und zwar habe ich in einer Tabelle die Kundennummern, in einer anderen Tabelle habe ich die Kundennummern mit...
  7. pivot tabellen/Marktforschung/brauche dringend hilfe!

    in Microsoft Excel Hilfe
    pivot tabellen/Marktforschung/brauche dringend hilfe!: Zurzeit muss ich eine Marktforschung erfassen, da ich das dass erste mal mache habe ich keine ahnung davon wie das gehen soll! Ich muss meine Marktforschung mithilfe einer Pivot tabelle erstellen....
  8. Brauche dringend Hilfe für meine Bachelorarbeit :-(

    in Microsoft Word Hilfe
    Brauche dringend Hilfe für meine Bachelorarbeit :-(: Hallo ihr Lieben, ich bin gerade an meiner Bachelorarbeit und total verzweifelt. Ich bin eigentlich kein Word-Neuling, allerdings stoße ich bei der von den Profs gewünschten Formatierung an...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden