Abfrage zeilenweise auslesen mit While Result.Next

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

NTClient
****
Beiträge: 106
Registriert: Di, 19.07.2005 16:09

Abfrage zeilenweise auslesen mit While Result.Next

Beitrag 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!
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfrage zeilenweise auslesen mit While Result.Next

Beitrag 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
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Abfrage zeilenweise auslesen mit While Result.Next

Beitrag 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
NTClient
****
Beiträge: 106
Registriert: Di, 19.07.2005 16:09

Re: Abfrage zeilenweise auslesen mit While Result.Next

Beitrag 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!
Antworten