- 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
$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
; Jetzt aber:
For $i = 0 To UBound($arErgebnis) -1
ConsoleWrite($arErgebnis[$i] & @CRLF) ; liefert Array-Fehler !!
Next
; der Hammer:
For $i = 0 To UBound($arErgebnis) -1
ConsoleWrite($arErgebnis[$i][0] & @CRLF) ; liefert das korrekte Ergebnis obwohl 1D-Array !!
Next