Seite 1 von 1

Abfrage zeilenweise auslesen mit While Result.Next

Verfasst: Mi, 06.01.2021 13:42
von NTClient
Hallo zusammen,

Mit folgender Code will ich den Inhalt einer Abfrage zeilenweise in eine neue Tabelle schreiben:

Code: Alles auswählen


sql= "SELECT  ""zu MiA"", ""AZSollDec"", ""AZIstDec"", FROM ""ID_BuchungenKoGe"" WHERE ""zu MiA"" =" & MA & " AND ""Datum"" between '" & ab_Datum & "' and '" & bis_Datum & "'"
Result = SQLStatement.executeQuery(sql)
n_spalte=Result.columns.count
' n_zeile=Result.rows.count (Methode nicht gefunden)
While Result.Next ()
	Wert1 = Result.getInt ( 1 )
	Wert2 = Result.getFloat ( 2 )
	Wert3 = Result.getFloat ( 3 )
	KommandoInsert = "INSERT INTO """& TabName & """ (""Col1"", ""Col2"", ""Col3"") VALUES (" & Wert1 & ", " & Wert2 & ", " & Wert3 & ", " & ")"
	Result=SQLStatement.executeQuery (KommandoInsert)
WEnd
Frage:
1. Wie bekomme ich die Anzahl der Zeilen der Abfrage? Die Methode Result.columns.count für die Spalten funktioniert. Die Methode Result.rows.count funktioniert nicht :-(
2. Die While-Next-Schleife läuft nur einmal und zwar für die erste Zeile der Abfrage durch. Sie müßte aber n_zeile mal durchlaufen. Geht doch irgendwie, oder?

Gruß Bernd!

Re: Abfrage zeilenweise auslesen mit While Result.Next

Verfasst: Mi, 06.01.2021 16:10
von RobertG
Hallo Bernd,

die Schleife läuft nur einmal ab, weil Du die Variable "Result" in der Schleife neu belegst. Auch das SQLStatement wird da wieder überschrieben. Das dürfte da aber nichts machen, da die Ergebnisse ja im Result-Objekt enthalten sind.

Das kannst Du umgehen, indem Du statt

Code: Alles auswählen

Result = SQLStatement.executeQuery(KommandoInsert)
ein

Code: Alles auswählen

SQLStatement.executeUpdate(KommandoInsert)
ausführst. Schließlich erwartest Du keine Abfrageergebnisse.

Das mit der Anzahl der Ergebnisse ist nicht so einfach. Dazu musst Du erst einmal den Resultset-Type umstellen und dann über

Code: Alles auswählen

DIM iResult AS LONG
IF oResult.last THEN
iResult = oResult.getRow
ELSE
iResult = 0
END IF
die letzte Zeile ermitteln.

Steht alles im Handbuch.

Gruß

Robert

Re: Abfrage zeilenweise auslesen mit While Result.Next

Verfasst: Do, 07.01.2021 10:08
von F3K Total
Moin,
warum einfach, wenn es auch kompliziert geht?
Mein Vorschlag, ohne Resultset, direkt in die Tabelle schreiben.

Code: Alles auswählen

KommandoInsert = "INSERT INTO """& TabName & """ (""Col1"", ""Col2"", ""Col3"")(SELECT  ""zu MiA"", ""AZSollDec"", ""AZIstDec"" FROM ""ID_BuchungenKoGe"" WHERE ""zu MiA"" =" & MA & " AND ""Datum"" between '" & ab_Datum & "' and '" & bis_Datum & "')"
SQLStatement.executeUpdate (KommandoInsert)
Gruß R

Re: Abfrage zeilenweise auslesen mit While Result.Next

Verfasst: Do, 07.01.2021 11:24
von NTClient
Danke Robert für den Hinweis auf's Handbuch. Das bringt mich in der Tat Riesenschritte weiter!!
Danke F3K Total - Warum einfach, wenns auch umständlich geht :-) Genial!
Gruß Bernd!