Office: (Office 2007) SKAT

Helfe beim Thema SKAT in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; In der Anlage ein Vorschlag, der sich bzgl. Temp-DB und Zeitmessung an einem Vorschlag von Nouba orientiert. Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Franz Rueh, 25. Juli 2012.

  1. SKAT


    In der Anlage ein Vorschlag, der sich bzgl. Temp-DB und Zeitmessung an einem Vorschlag von Nouba orientiert.
     
  2. Eberhard, ich bin beeindruckt von der verschachtelten SQL, die hinter den Abfragen steckt. Ich brauche da noch länger, um sie zu analysieren und mir verständlich zu machen.
    Andererseits gibt es ein Problem bei der Abfrage. Beim Start der DB gibt es die 1. Fehlermeldung: Fehler 3709 Der Suchschlüssel wurde in keinem Datensatz gefunden in Startup
    Wenn ich das wegklicke, dann kommt nach der Zeitmessung das Übersichtsformular mit den 3 Buttons. Möchte ich das Ergebnis mittels temporärer Tabelle, kommt die Fehlermeldung: ... findet die Eingangstabelle oder Abfrage tblErgebnisseOption nicht. Ich habe mich ein bisschen durchgeklickt und herausgefunden, dass die Abfrage qdelErgebnisseOption darauf zugreifen möchte.

    Franz
     
    Franz Rueh, 30. Juli 2012
    #17
  3. Du solltest die DB erst richtig entpackt auf die Festplatte legen. Beim Starten wird eine Temp-DB im Temp-Verzeichnis angelegt bzw. es wird der Versuch dazu übernommen. Dieser Versuch scheitert vermutlich bei Dir auf Grund eines für mich nicht nachvollziehbaren Grundes.

    Der Unterschied zwischen beiden Varianten ist eigentlich nur, dass in einem Fall die Abfrage qselErgebnisseOption direkt weiterverwendet wird und im anderen Fall die Inhalte der Abfrage in die Tabelle tblErgebnisseOption, die ihrerseits wieder vollindiziert ist und im folgenden eine Indexnutzung weitergeben kann, eingetragen werden. Bei stichprobenartiger Testung ergaben sich bei mir dadurch Performanceunterschiede um den Faktor 17 ... 25.
     
  4. SKAT

    Ich möchte nicht lästig sein, aber ich habe bzgl. der temporären Datei das auf einem anderen Computer mit Win7 und Access 2010 ausprobiert, und es geht auch nicht. Auf einem Laptop mit WincXP und Ac2003 funktioniert das Ganze einwandfrei!!! Und dort konnte ich auch feststellen, dass die temporäre Tabellenabfrage tatsächlich wesentlich schneller als die "normale" ist. Vielleicht hat jemand eine Idee, wie die Codierung für die Erstellung der TempDB mit der Temp-Tabelle für Acc2007 bzw. Acc2010 abgeändert werden muss. Es wäre jammerschade, wenn die superschnelle Abfrage nicht genützt werden könnte.

    Franz
     
    Franz Rueh, 30. Juli 2012
    #19
  5. Wenn das Temp-Directory nicht beschreibbar ist, kannst Du auch ein beliebiges anderes wählen, z.B. auch das eigene Arbeitsverzeichnis (CurrentProject.Path) oder ein Unterverzeichnis davon. Dort hast Du dann ganz sicher Schreibrechte.

    Die Idee des Temp-Verzeichnisses ist doch nur, dass Temp-Daten eigentlich genau dahin gehören - und dass eine Temp-Tabelle besser nicht in der eigenen Anwendung physisch liegt, sondern in einer dafür vorgesehenen DB.
    So hat sich dann nur das Betriebssystem um die Müllbeseitung zu kümmern.

    Code:
     
  6. Eberhard, die TempDB lässt sich auch mit dieser Änderung offensichtlich nicht erzeugen - es kommt wieder die gleiche Fehlermeldung - Fehler3709(Der Suchschlüssel wurde in keinem Datensatz gefunden.)in Startup. Danach dann wiederum die 2. Fehlermeldung - Fehler3078(....Eigabentabelle tblErgebnisseOption nicht gefunden...

    Lerider keine bessere Nachricht an dich
    Franz
     
    Franz Rueh, 30. Juli 2012
    #21
  7. Gibt es da ein Verweis-Problem (DAO)?

    Ansonsten kannst Du die erzeugte Temp-DB in den Dateityp MDB umbenennen und dann öffnen und vergleichen, ob es da eine Tabelle mit fünf indizierten Feldern gibt oder ob die Erstellung an irgendeiner Stelle scheitert.
     
  8. SKAT

    Verweise gecheckt, kein Problem, DAO dabei. Ich habe die Temp-DB umbenannt, es wird offensichtlich gar keine DB erzeugt - es gibt nichts zu sehen, es gibt keine weiteren oder anderen Fehlermeldungen.

    Franz

    Korrektur: Habe jetzt entdeckt, dass doch eine Skat2_2Skat2_2.tmdb erzeugt wird, allerdings nicht im Unterordner, sondern im Hauptornder - habe bisher nur im Unterordner, in dem die entzippte DB liegt, nachgesehen. Dann habe ich das Format auf mdb geändert und gesehen, dass die tblErgebnisseOption vorhanden ist mit folgenden Feldern, aber keinem einzigen Datensatz: SpielerNr, Punkte, Gewonnen, Verloren, ErgebnisNr. Eine Indexspalte ist nicht zu sehen. Aufgefallen ist mir auch die Benennung der Temp-DB: das Skat2_2 ist verdoppelt!

    Franz
     
    Franz Rueh, 30. Juli 2012
    #23
  9. Jetzt wird es merkwürdig => Prüfen, was in der Pfadvariablen zu CreateDatabase steht.

    Wo sollen Datensätze herkommen in einer neu erstellten DB? Die alte wird ja im derzeitigen Code vorher gekillt.
    Das Füllen der Tabelle erfolgt erst mit Buttonklick zu Abfrageausführung. Da gibt es dann auch zwischenzeitlich eine Anfügeabfrage.

    Code:
    Nö. Einen Index sieht man in den Feldeigenschaften beim Tabellenentwurf oder über einen Assistenten: siehe Bild und Beschreibung

    Und falls eine Temp-DB zu viele Schwierigkeiten macht (die Begründung für Temp hatte ich geliefert), kannst Du gleichwertig für die Abfrageausführung ein statisches (zusätzliches) Backend (MDB, ACCDB) verwenden oder die Tabelle schlicht im Frontend führen. Dann hast Du eben da größere Aufblähaktionen, wobei "größer" relativ ist. Datensätze anlegen und löschen (hier im Beispiel sind es nur 909) ist für viele so normal und üblich, das sie kein Verständnis für das hier verwendete Temps-Zeugs aufbringen können und werden.
     
  10. Mir wäre die Führung der Tabelle im Frontend am liebsten, aber ich verhake mich bei der Abänderung deines Codes immer wieder, sodass ich das nicht hinbekomme. Kannst du mir dafür noch den einen oder anderen Hinweis geben?

    Danke, Franz

    Zusatz: Könnte sich bitte jemand mit der Konfiguration Win7 und Acc2007/2010 die Skat-DB downloaden und ausprobieren, ob bei ihm das mit der Temp-DB funktioniert. Vielleicht kommen wir so der Sache auf die Spur.
     
    Franz Rueh, 30. Juli 2012
    #25
  11. Das Problem mit der temporären DB ist gelöst! Ich habe ja die Beispiel-DB auf Acc2000 "runterkonvertiert", sie aber auf meinem Rechner mit Acc2007 geöffnet - und Acc2007 kann natürlich keine mdb oder auch tmd erzeugen, sondern nur eine accdb bzw. taccdb. Nach entsprechende Abänderung des Codes funktioniert die Sache einwandfrei.
    Eberhard, vielen. vielen Dank!!! Ich bin jedoch noch immer am Staunen und Lernen, wie du es gemacht hast.
    Dazu eine konkrete Frage: Wie entwickelt man eine so komplexe SQL, wie sie z.B. hinter der Abfrage qselErgebnisseOption steckt? Ich kann mir nicht vorstellen, dass man einen solchen Code "runterschreibt". Das was bei dir in einem Code steckt, sind bei mir x einzelne Abfragen.

    Franz
     
    Franz Rueh, 30. Juli 2012
    #26
  12. Durch Zusammenkopieren von Einzelabfragen oder wirklich durch Schreiben (dann von innen nach außen):
    Code:
    Hier wird noch als Tabellenalias der Name der obigen Abfrage verwendet, aber man kann dann auch einen beliebigen anderen Tabellenalias verwenden. Wenn man die gleiche Unterabfrage mehrfach in einer zusammengesetzten Abfrage verwendet, stellt sich dann sowieso die Frage nach Bezeichnungen, die der Übersicht dienen.

    Ich fasse eben gerne mehrere Teilabfragen zu einer "richtigen" Abfrage zusammen, die sich dann nur auf Tabellen und deren Felder bezieht und somit keine Abhängigkeiten von irgendwelchen anderen Abfragen hat.

    Außerdem habe ich dann eine bessere Übersicht über die Abfrage. O.K. bei längeren und komplexeren Abfragen sollte die Anweisung formatiert sein a la SQLFormatter, und etwas Übung braucht man auch dazu.
    Es ist ja guter Stil und ein Performancetipp, in einer Abfrage nur die Felder und Datensätze einzubeziehen, die wirklich nötig sind. Wenn ich das Zusammenwirken auf einen Blick habe, ist das für mich übersichtlicher als wenn ich zwischen 5 ... x Abfragen hin- und herswitche.
    So sieht man ganz schnell
    - überflüssige ORDER BY-Anweisungen, die man gerne mal bei Einzelabfragen anlegt,
    - überflüssige Felder, wo man anfangs geglaubt hat, dass man sie auch braucht,
    - ungünstige Schachtelungsreihenfolgen der Teilabfragen.

    Natürlich kann das Ganze aber auch mit einzelnen Abfragen und einer entsprechenden guten Abstraktion im Kopf stattfinden ...

    Die eigentliche Antwort auf Deine Frage ist allerdings: ÜBEN.
     
  13. SKAT

    Hallo,
    wenn du dir mal die Mühe gemacht hättest, den Code im Unterbrechungsmodus zu testen, so hättest du feststellen können, dass es ein Problem mit den Sicherheitseinstellungen gibt.
    Stelle den Speicherort der temporären DB als "vertrauenswürdig" ein.
    Das ist nicht zutreffend. Wie kommst du darauf?
    Erstellt wird die MDB problemlos, nur kann sie anschließend nicht geöffnet werden. *tongue.gif*
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Anne Berg, 7. August 2012
    #28
  14. Anne, danke für deine interessante Rückmeldung.
    Ich habe mir dehr viel Mühe gemacht, den Code zu testen und Änderungen vorzunehmen, aber ich bin kein Profi und mache die Access-Programme als Hobby, das mit meinem Beruf nicht das Geringste zu tun hat. Mein Hauptsächlicher Weg ist learning by doing und das Verwerten von Tipps und Hilfestellungen aus diesem Forum. Ich muss hier auch gestehen, dass ich bisher von einem Testen im Unterbrechungsmodus nichts gewusst habe - werde mich diesbezüglich schlau machen.
    Den Speicherort der temporären DB habe ich von allem Anfang an als verrauenswürdigen Speicherort in den Access-Optionen hinzugefüt, aber das hat das Problem nicht gelöst.
    Lezteres war einfach meine laienhafte Schlussfolgerung, nachdem das mit der accdb bzw. taccdb geklappt hatte.
    Natürlich würde mich noch immer interessieren, wie die Erzeugung bzw. das Öffnen einer Temp-mdb funktioniert.

    Franz
     
    Franz Rueh, 7. August 2012
    #29
  15. Hi,

    noch einmal zu:
    Ich habe inzwischen festgestellt, dass nach dem Fehler "3709" noch ein weiterer geworfen wird: Code:
    Die mdb oder tmdb kann durchaus erstellt, aber anschließend nicht verwertet werden, es knallt beim TransferDatabase.

    OK, aber auch das Problem sollte lösbar sein, wenn man die aktuelle Access-Version feststellt oder wo möglich eine accdb einsetzt und die Dateiendung abfragt.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Anne Berg, 7. August 2012
    #30
Thema:

SKAT

  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