SQL mal wieder

  • Hallo ihr lieben,

    ich stehe irgendwie auf dem Schlauch...

    Ich habe in einem Pfad ein paar Xls-Dateien. letztlich brauche ich von denen Dateinamen bestimmte werte... in meinem Fall also 0001-0005 ohne XLS und ohne Pfad... klappt alles supi...

    Beispielwerte:

    0001

    0002

    0003

    0004

    0005

    Mit diesen (in diesem Beispiel 5) Werten möchte ich gerne eine Access-Datenbank abfragen... insgesamt 5 querys, die sich also auf 5 abfragen beziehen, aber immer mit dem Werten 0001-0005.

    Zur verdeutlichung... Query1-5 soll im ersten Schritt mit Wert 0001 durchlaufen werden...

    Danach soll Query1-5 mit 0002 durchlaufen werden usw.

    Um es einfacher zu haben, habe ich die erste Schleife die die Werte 0001-0005 durchläuft auf 1 beschränkt, da es schon beim ausführen der Querys hapert...

    Fehlermeldung:

    The requested action with this object has failed.:

    $adors.Open ($test, $ado)

    $adors^ ERROR

    Ersätze ich den Wert $test durch $query1 funktioniert es, aber halt nicht als Schleife...

    Hilfe :Face:

    Spoiler anzeigen
  • Wie soll Zeile 27 denn auch funktionieren? $test = "$query"&$j - Lass dir sowas zum Debuggen einfach mal in der Konsole ausgeben. Das "$query" ist kein Variablenzugriff, sondern nur ein Text (durch die Anführungszeichen). In $test steht also nach dem ersten Durchlauf $query1.

    Und gerade in dem Moment, in dem ich das schreibe, verstehe ich, was du vor hast. Du willst so direkt auf die jeweilige Variable (Z. 20 bis 24) zugreifen, richtig? Oh je, dein ganzes Skript ist etwas durcheinander... Probier es mal mit folgendem Grundaufbau: Du benutzt nur EINE For-Schleife, welche durch das Array $array_tagaktuelle iteriert (ACHTUNG! Nicht von 1 bis 5, sondern von 0 bis 4!). In dieser setzt du den jeweiligen Query aus dem Basisquery select A_Nr, Afo from tmp_abf1 where wert_ist= und deinem jeweiligen Array-Element $array_tagaktuelle[$i] zusammen. Dann direkt ausführen und Ergebnisse verarbeiten. Dann im nächsten For-Schleifendurchlauf der nächste Query.

  • Mit den 5 ist ein Zufall... in dem Ordner wo ich mir Werte herhole sind 50 drin...

    also 0001-0050... in der Access-DB finden sich diese Werte auch wieder, allerdings in 5 unterschiedlichen Abfragen.

    Letztlich ist das Ziel diese 5 Querys nacheinander für die Werte 0001-0050 abzufragen.


    Daher war mein Ansinnen, die 5 Querys zu schreiben, und diese dann per Schleife zu durchlaufen.

  • Kann ich doch nicht, weil $wert_KST sich doch ändert???!

    Das scheint aber mit der zweiten Schleife zusammen zu hängen... wenn ich die Query1 ausführen lasse, und er soll dieselbige aufgrund der Schleife nochmal durchlaufen (er müsste ja 5x hintereinander das selbe Anzeigen) erhalte ich wieder:

    The requested action with this object has failed.:

    Einmal editiert, zuletzt von Sonderbaar (30. August 2018 um 14:22)

  • Ok, sortieren wir das mal. Du hast i Eingabedateien, für jede Eingabedatei sollen j Queries ausgeführt werden. Normalerweise würde man das im Datenbankkontext mit Prepared Statements lösen, aber ich denke, AdoDB bzw. MS Access können das nicht. Daher behelfen wir uns mit StringFormat, um unsere Queries zu bauen. Außerdem habe ich einfach mal die For-To-Next-Schleifen durch For-In-Next-Schleifen ersetzt, das lässt sich für dich vielleicht leichter lesen. Damit spart man sich den Indexzugriff auf das Array. In jedem Durchlauf der inneren Schleife wird der Query neu zusammengesetzt. Kannst du das nachvollziehen?

    Ich möchte aber auch anmerken, dass du, sollte es wirklich nur um fünf SELECTs gehen, die auch in einem Query ausführen kannst.

    Ich hab dein Skript auch mal grob aufgeräumt, sonst finde ich mich selber da nicht zurecht.