MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 11.08.2017, 22:48   #16
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

DomSumme und DomAnzahl bremsen aus

Ja, und das ist systembedingt.

Erklärung: Eine Domänenaggregatfunktion holt genau einen Wert. Dabei ist sie eine vollständige Abfrage, verpackt in eine Accessfunktion.
Wenn man jetzt bspw. 14 Werte holt, entspricht das 14 einzelnen Abfragen. Das ist so, als wenn man 14 Flaschen Wasser benötigt und dazu für jede Flasche einzeln zum Getränkemarkt läuft. Solcher Aufwand addiert sich. Die oben vorgeschlagene Ersatzfunktion ändert daran nichts Wesentliches.

Die Datenherkunft für die Domänenaggregatfunktion ist wie gezeigt selber eine Abfrage. Die muss dann auch jedesmal ausgeführt werden. Diese Abfrage enthält Schwächen: Die Sortierung ist für die Folgeabfrage unnütz, muss aber ausgeführt werden (Aufwand). Das formulierte Kriterium lässt keine Indexnutzung zu (verschenkte Performance). Um im verwendeten Bild fortzufahren: Der Getränkemarkt liegt nicht um die Ecke, sondern in einem anderen Stadtviertel.

Wenn man nun 14-mal ins andere Stadtviertel läuft statt sich um die Ecke gleich einen ganzen Kasten Wasser zu schnappen, so braucht das eben Zeit, und es wäre verwunderlich, wenn man sich darüber wundert.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 11.08.2017, 23:29   #17
maine-coon
Threadstarter Threadstarter
MOF User
MOF User
Standard

Okay, hier nochmal in allen Einzelheiten mein Vorhaben.

Meine Ausgangstabelle enthält derzeit ca. 31.000 Datensätze.
Und ein Feld in dieser Tabelle heißt WERKZEUG.
Ein weiteres Feld heißt MENGE und ein drittes Feld heißt UMSATZ.
Hier mal ein Beispiel, was im Feld WERKZEUG drin steht.
Fräser 76530 PKD Ø 14 x 2 xØ 16 x 92 Z= 2 TC SP

Jetzt habe ich eine Abfrage genommen mit nur dieser einen Tabelle. Verknüpfungen brauche ich nicht.
Als Filter nehme ich, wie schon zuvor beschrieben, diesen Super-Tipp hier und passe ihn für die anderen Bedingungen einfach an.
Code:

SELECT  Sum(Menge)  AS SummevonMenge,
	Sum(Umsatz) AS SummevonUmsatz
        FROM Werkzeug_Artikel 
        WHERE Werkzeug 
        LIKE "*PKD*"
	OR Werkzeug 
        LIKE "*CVD*"
Zuerst habe ich die Ergebnisse der 14 Textfelder mit der Funktion DomSumme gehabt. Doch wie jetzt zuletzt von Eberhard beschrieben bremst das die DB total aus.
Dann kam die Variante DomWert ins Spiel, die aber unwesentlich schneller ist.
Also habe ich jetzt zuletzt 7 kleine Formulare, die nur die 2 Datenfelder aus der Abfrage haben nebeneinander in die Registerkarte gelegt.
War ein bisschen Arbeit, aber jetzt klicke ich auf diese Registerkarte und die Werte sind sofort da.

Vermutlich ist das auch noch nicht die Top-Lösung. Aber meine Access-Kenntnisse sind sehr bescheiden und von SQL verstehe ich fast gar nichts.
Ich habe auch nicht vor mir jetzt die SQL Programmierung vorzunehmen. Dafür habe ich keine Zeit und ist diesen Aufwand für die kleine DB nicht wert.
Daher bin ich froh darüber, wenn ich hier im Forum die eine, oder andere Lösung bekomme, auch wenn ich diese nicht so richtig verstehe.

Gruß Achim
maine-coon ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2017, 13:46   #18
maine-coon
Threadstarter Threadstarter
MOF User
MOF User
Standard

Ich hätte da nochmal eine wichtige Frage.
Wird beim Weiterschalten zum nächsten DS immer die Berechnung aktiviert?

Auch wenn es jetzt deutlich schneller läuft, bleibt ein kleiner " wie soll ich sagen, bremsender Beigeschmack" haften.
Diese 7 Formulare in der einen Registerkarte rufe ich doch nicht ständig auf. Diese Werte ändern sich erst dann wieder, wenn ich Daten hinzufüge.

Daher meine Frage. Kann man diese Berechnungen irgendwie vorübergehend deaktivieren?
Oder vielleicht mit einem CommandButton die 7 Abfragen manuell aktualisieren?

Gruß Achim
maine-coon ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2017, 16:25   #19
elmar
MOF Meister
MOF Meister
Standard

Hier findest Du noch eine Ersatzlösung für Domänenaggregatfunktionen (IDBE Toolssammlung)

__________________

WIN 7 PROF 64, ACCESS 2003 Wissenswertes: ACCESS-FAQ *** Habe mit ACC2007/10/13 nichts am Hut...
Hilfreiche Antworten kann es nur bei verständlichen Fragen geben! Anleitung dazu: Hier klicken | Auch hilfreich: Einführung in die Datenbank Microsoft Access. | Die Nachteile von Nachschlagefeldern
elmar ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2017, 17:13   #20
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Wird beim Weiterschalten zum nächsten DS immer die Berechnung aktiviert?

Das kommt darauf an: Ist eine Berechnung im Steuerelementinhalt hinterlegt (ein DLookup wäre auch eine Berechnung), dann darfst Du damit rechnen. Ist das Formular an eine Abfrage gebunden, wird die Abfrage beim Laden des Formulars einmalig ausgeführt, die Textfelder zeigen dann nur Inhalte an.


Zitat:

Die oben vorgeschlagene Ersatzfunktion ändert daran nichts Wesentliches.

Siehe #16: Wenn man sich ein Paar gute Laufschuhe anzieht, kann man bei den 14 Läufen zum Getränkemarkt etwas besser laufen als in Straßenschuhen, ob das für eine wesentliche Verbesserung führt, mag jeder für sich beurteilen.

Das einmalige Wasserholen (einzelne alles berechnende Abfrage) könnte etwa so aussehen:
1) Anlegen einer Kriterientabelle
Code:

Gruppe    Bezeichnung    Kriterium
1         Profi          PKD
1         Profi          CVD
2         Amateur        ABA
2         Amateur        OHNE
...
Mit dieser Tabelle kann man die verschiedenen Kriterien besser und vor allem auf einmal in die Abfrage einbringen. Außerdem lassen sich die Tabelleneinträge besser variieren und pflegen (über eine GUI auch durch Benutzer) als wenn sie hardcodiert in einer Anweisung stehen

2) Einbindung der zusätzlichen Tabelle in eine Abfrage, die als Datenherkunft für ein einfaches gebundenes (Endlos)Formular dient:
Code:

SELECT 
   U.Gruppe, 
   SUM(U.Menge) AS Mengensumme, 
   SUM(U.Umsatz) AS Umsatzsumme 
FROM 
   (
      SELECT 
         K.Gruppe, 
         W.Menge, 
         W.Umsatz 
      FROM 
         Werkzeug_Artikel AS W, 
         Kriterientabelle AS K 
      WHERE 
         W.Werkzeug LIKE "*" & K.Kriterium & "*" 
   ) AS B 
GROUP BY 
   U.Gruppe
Die Felder Werkzeug und Gruppe sollten indiziert sein (siehe Grundlagen - SQL ist leicht (8) - Index).

Für eine richtige Lösung (noch performanter) würde man das Feld Werkzeug in atomare Informationen zerlegen. Dann könnte man auch da indiziert auf Gleichheit prüfen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (12.08.2017 um 17:16 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2017, 19:01   #21
maine-coon
Threadstarter Threadstarter
MOF User
MOF User
Standard

Ich werde mal versuchen das alles zu verarbeiten.
Vielleicht gelingt es mir ja.

Vielen Dank auf jeden Fall..
Gruß Achim
maine-coon ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2017, 20:05   #22
ebs17
MOF Guru
MOF Guru
Standard

Code:

   ) AS B
... muss natürlich heißen:
Code:

   ) AS U
Der deklarierte Tabellenalias muss natürlich mit dem verwendeten übereinstimmen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.08.2017, 10:37   #23
fredfred
MOF Profi
MOF Profi
Standard

Zitat:

LIKE "*PKD*"
OR Werkzeug
LIKE "*CVD*"

Warum Like und mit 2 Sternen ?
PKD und CVD sind doch feststehende Bezeichnungen für eine Gruppe und nicht Wortteil eines Begriffs ??
also:
Code:

...="PKD" OR Werkzeug ="CVD"

Zitat:

Fräser 76530 PKD Ø 14 x 2 xØ 16 x 92 Z= 2 TC SP

oder heißt das etwa dass die komplette Werkzeugbeschreibung so in einem Feld steht ??? Hilfe!

Geändert von fredfred (14.08.2017 um 10:44 Uhr).
fredfred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.08.2017, 11:32   #24
gpswanderer
MOF Guru
MOF Guru
Standard

Hallo,

Zitat:

oder heißt das etwa dass die komplette Werkzeugbeschreibung so in einem Feld steht ???

ja, das heißt es. Siehe seine Erklärung in #17 und der Hinweis von Eberhard in #20, letzter Absatz.

__________________

Gruß
Klaus
Office2010, Win10
gpswanderer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 17:53   #25
maine-coon
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo liebe Experten von Datenbanken.
Ich habe eine Menge rumgetestet und probiert.
Aber im Grunde genommen habe ich nichts hinbekommen.
Ich habe meine 11 Abfragen, die alle nach oben beschriebenen Aufbau
zwar immer noch beibehalten, aber nicht mehr im Gebrauch, weil die DB total ausgebremst wird.
Ich habe die Abfrage als Datenherkunft für ein kleines Formular genommen.
In einer Registerkarte habe ich dann diese 11 kleinen Formulare eingesetzt.
Starte ich die DB braucht es fast 20 Sekunden, bis das Hauptformular da ist.
Filtere ich etwas im Hauptformular, läuft sofort die Eieruhr...

Als ich die 11 kleinen Formulare wieder löschte, startete die DB ins Hauptformular innerhalb 3 Sekunden.

Auf einen Nenner gebracht: Das, was ich hier mit meinem Verständnis gebastelt habe, ist absoluter Mist.

Jetzt kam mir eine neue Idee.
Ich nehme ein Kombinationsfeld und lese hier diese 11 Abfragen ein.
Und wenn ich von einer der 11 Abfragen mal die Zahlen wissen will, brauche ich die nur aufrufen und wieder schließen.

Daher meine Frage:
Wie lese ich die 11 Abfragen als Auswahl in dieses Kombinationsfeld ein?
maine-coon ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 19:29   #26
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

Ich habe meine 11 Abfragen, die alle nach oben beschriebenen Aufbau
zwar immer noch beibehalten

D.h. Hinweise bzgl. Abfragetechnik sind umsonst ...?

Ansonsten: Ob großes Formular, ob kleines Formular oder Kombinationsfeld - die Datenherkünfte werden beim Formularöffnen geladen. Wenn dann 11 sind und diese ungünstig gestaltet sind, dann summiert sich das in benötigte Zeit.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.09.2017, 08:52   #27
Haxnwirt
MOF User
MOF User
Standard

Kann ich mich da mit einhängen.

Ich hätte gern die Summe gebildet über

Code:

Anzahl620 = Nz(DSum("[Menge]", "Planung", "[Dekor]=620"), 0)
Anzahl451 = Nz(DSum("[Menge]", "Planung", "[Dekor]=451"), 0) '535 451
Anzahl448 = Nz(DSum("[Menge]", "Planung", "[Dekor]=448"), 0) '535 448 Landhausdiele Eiche
...
Nun muss ich die Summe über alle bilden. Wenn ich da 50 Einträge habe, sieht das nicht schön aus und ich glaube es geht bestimmt auch eleganter.

Danke für eure Antworten

Haxnwirt
Haxnwirt ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.09.2017, 09:05   #28
ebs17
MOF Guru
MOF Guru
Standard

Fünfzigmal DSum verwendet in einem Arbeitsgang?
Es ist immer wieder schön, wenn Hinweise gelesen und verstanden werden: Hier im Thread
So könnte eine (richtige) Abfrage aussehen:
Code:

SELECT 
   Dekor, 
   SUM(Menge) AS DekorAnzahl
FROM 
   Planung 
WHERE 
   Dekor IN(620, 451, 448) 
GROUP BY 
   Dekor
Deren Ergebnis muss man dann nur passend visualisieren => Formular oder Listenfeld statt ...zig Einzelfelder.
Das nachfolgende Summieren über alles bzw. das sofortige Summieren (Verzicht auf Gruppierung) sollte übersichtlich lösbar sein.

Dem Rätsel, warum man zur Ermittlung von Anzahlen summiert, bin ich nicht extra nachgegangen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (14.09.2017 um 09:20 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.09.2017, 09:26   #29
maine-coon
Threadstarter Threadstarter
MOF User
MOF User
Standard

Alles bleibt anders.
Ich habe jetzt eine Tabelle erstellt, in der alle meine Abfragen aufgelistet sind.
Das Kombinationsfeld liest diese Werte ein.
Nach Auswahl eines der Elemente öffnet sich das Formular und zeigt mir die Werte an, die aus der Abfrage kommen.
Dadurch habe ich erreicht, dass meine DB nicht mehr ausgebremst wird, weil ja nur 1 Formular statt wie zuvor 11 mit Werten gefüllt wird.
Das ist die Abfrage
Code:

SELECT Sum(Menge) AS SummevonMenge, Sum(Umsatz) AS SummevonUmsatz
FROM Werkzeug_Artikel
WHERE (((Werkzeug_Artikel.Werkzeug) Like "*PKD*" Or (Werkzeug_Artikel.Werkzeug) Like "*PCD*" Or (Werkzeug_Artikel.Werkzeug) Like "*CVD*" Or (Werkzeug_Artikel.Werkzeug) Like "*DIA*" Or (Werkzeug_Artikel.Werkzeug) Like "*MKD*"));
Mit dem Ereignis öffnet sich das Formular:
Code:

Private Sub kfd_Statistik_AfterUpdate()
  DoCmd.OpenForm kfd_Statistik.Column(1)
 End Sub
Die Werte werden angezeigt.
Ich habe in diesem Formular eine TextBox eingebaut, die den aktuellen Text des Kombinationsfeld bekommen soll. Das Feld heißt "Statistik_For".
Aber ich erhalte immer nur Fehlermeldungen.

Ich habe auch mal versucht die TextBox gegen ein Bezeichnerfeld zu tauschen und dann mit Me.Statistik_For.Caption = kfd_Statistik.column(1) den Text zu übertragen...
Kurz gesagt...Fehler..Fehler...Fehler... Objekt nicht gefunden, oder Nicht Optional......

Kann mir jemand sagen wie die VBA Zeile aussehen muss, damit entweder ein Bezeichnerfeld, oder eine TextBox den Text des gewählten Wert aus dem Kombinationsfeld zu übergeben?
Danke

Geändert von maine-coon (14.09.2017 um 09:37 Uhr).
maine-coon ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.09.2017, 09:33   #30
elmar
MOF Meister
MOF Meister
Standard

Zitat:

Aber ich erhalte immer nur Fehlermeldungen.

Solange Du diese für Dich behälst kannst Du nicht auf Hilfe hoffen.

__________________

WIN 7 PROF 64, ACCESS 2003 Wissenswertes: ACCESS-FAQ *** Habe mit ACC2007/10/13 nichts am Hut...
Hilfreiche Antworten kann es nur bei verständlichen Fragen geben! Anleitung dazu: Hier klicken | Auch hilfreich: Einführung in die Datenbank Microsoft Access. | Die Nachteile von Nachschlagefeldern
elmar ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.