SQL Abfrage

  • Hallo zusammen,
    für meine Arbeit muss ich mich mit einen Oracle Server 11g verbinden und dort entsprechende Abfragen durchführen.
    Die Verbindung und eine abfrage bekomme ich auch hin aber wenn ich die Abfrage ausführe zeigt er mir immer nur den ersten Datensatz an, ich weiß aber das es wesentlich mehr Datensätze gibt.
    Das Programm was wir normalerweiße einsetzten kann ich nicht nutzten, da ich über 300 Abfragen hätte und eine Script schreiben das das Programm steuert geht auch nicht da ich das Script nachts laufen lassen müsste bei der Menge.

    Anbei das Script und ich hoffe das mir jemand weiterhelfen kann, was die Ausgabe betrifft.

    Spoiler anzeigen

    #include <sqlite.au3>
    #include <sqlite.dll.au3>
    #include <Array.au3>
    #include <mysql.au3>

    Local $avArray[3][3]


    $conn = ObjCreate( "ADODB.Connection" )
    $DSN = "Driver={Microsoft ODBC for Oracle};" & _
    "CONNECTSTRING=(DESCRIPTION=" & _
    "(ADDRESS=(PROTOCOL=TCP)" & _
    "(HOST="&$Host&")(PORT="&$Port&"))" & _
    "(CONNECT_DATA=(SID="&$SID&"))); Uid="&$User&";Pwd="&$PW&";"


    $conn.Open($DSN)
    $rs = ObjCreate( "ADODB.RecordSet" )
    $rs.open("select trunc(1a) 1, sum (2a) 2, 3a Zeichen from "TABELLE" where datum> '02.09.2014' group by trunc(1a), 3a order by trunc(1a)", $conn )

    $avArray[0][0] = $rs.Fields( "1" ).Value
    $avArray[0][1] = $rs.Fields( "2" ).Value
    $avArray[0][2] = $rs.Fields( "Zeichen" ).Value
    _ArrayDisplay($avArray)

    $conn.close


    Ich musste die Werte entsprechend verändern da es eine interen Abfrage ist.

    Es zeigt mir wie gesagt nur den ersten Datensatz an den er findet, er sollte aber alle Datensätze anzeigen wo das Datum größer als der 02.09.2014 ist.

    Muss ich noch eine entsprechende Schleife einbauen ?

    Die Abfrage würde ich dann gerne in eine Textdatei schreiben lassen bzw. zwecke einfacher Kontrolle in eine Array schreiben lassen.
    Das mit den Array habe och auch schon mal getestet und dabei hat er mir wie gesagt nur einen Datensatz angezeigt.
    Das mit der Textdatei klappt überhaupt nicht.

    Google konnte mir leider keine genauen Tipps geben, ich hoffe einer hier kann mir weiterhelfen.

    Einmal editiert, zuletzt von 20721 (3. September 2014 um 19:36)

  • Es zeigt mir wie gesagt nur den ersten Datensatz an den er findet, er sollte aber alle Datensätze anzeigen wo das Datum größer als der 02.09.2014 ist.
    Muss ich noch eine entsprechende Schleife einbauen ?

    Ja musst du.
    Das RecordSet-Objekt zeigt immer nur auf einen Datensatz.
    Willst du alle haben musst du durchiterieren.

    Grundsätzlich sollte folgender Aufbau hierfür funktionieren:

    [autoit]

    Do
    ; hier per z.b. .Fields den aktuellen Datensatz verarbeiten
    $rs.MoveNext()
    Until $rs.EOF

    [/autoit]

    Die Abfrage würde ich dann gerne in eine Textdatei schreiben lassen

    Viele DBMS können Ausgaben direkt in Dateien ausgeben.
    Bei einer Oracle DB wird das glaube ich über das Spool-Kommando erreicht.

    #include <sqlite.au3>
    #include <sqlite.dll.au3>
    #include <mysql.au3>

    Warum bindest du die SQLite- und Mysql-UDF ein wenn du sie nicht benutzt?

  • Hallo AspirinJunkie,

    Das mit deiner Schleife klappt perfekt.

    Das mit den #include hatte ich noch aus alten Testzwecken, habe ich aber auch schon rasugenommen.

    Damti ist der Fall gelöst und ich bedanke mich.