ADO - Objekt, Methode GetRows ==> ArrayFehler

    • Offizieller Beitrag

    Hi,
    wenn man mit einem ADO-Objekt eine Datenbankabfrage macht, kann man mittels GetRows das zurückgelieferte RecordSet in ein Array wandeln.
    Dabei ist mir ein seltsames Verhalten aufgefallen:
    Liefert das Ergebnis nur eine Spalte zurück (also ein 1D-Array), so muß ich auf dieses Array aber als 2D-Array zugreifen!! und als Wert für die zweite Dimension dann 0 einsetzen!
    Also nicht wundern, wenn ihr mal damit arbeitet und plötzlich einen Arrayfehler auftritt - nun wißt ihr wieso. ;)

    Spoiler anzeigen
    [autoit]

    $objConnection = ObjCreate("ADODB.Connection")
    $data_source = "C:/GDILine/Factur/GDI.GDB"
    $connStr = "DRIVER=Firebird/InterBase(r) driver; UID=SYSDBA; PWD=masterkey; DBNAME=" & $data_source & ";"
    $objConnection.Open($connStr)
    $oRecordSet = $objConnection.Execute("SELECT name1 FROM kunden WHERE ort = 'Musterstadt' ORDER BY name1;")
    $arErgebnis = $oRecordSet.GetRows
    ConsoleWrite(UBound($arErgebnis, 2) & @CRLF) ; liefert 1 ==> ist ja auch nur eine Spalte

    [/autoit] [autoit][/autoit] [autoit]

    ; Jetzt aber:
    For $i = 0 To UBound($arErgebnis) -1
    ConsoleWrite($arErgebnis[$i] & @CRLF) ; liefert Array-Fehler !!
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; der Hammer:
    For $i = 0 To UBound($arErgebnis) -1
    ConsoleWrite($arErgebnis[$i][0] & @CRLF) ; liefert das korrekte Ergebnis obwohl 1D-Array !!
    Next

    [/autoit]