Zusammensetzen eines Strings dauert sehr lange

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

smguenther
**
Beiträge: 23
Registriert: So, 22.04.2007 14:07

Zusammensetzen eines Strings dauert sehr lange

Beitrag von smguenther »

Hallo,

ich setze mit dem folgenden Code die Ergebnisse einer SQL-Abrage in einem String zusammem um mir das Ergebnis am Ende in einem Dialog ausgeben zu lassen:

Code: Alles auswählen

	
    ResultSet=Statement.executeQuery(sSQL)
    DialogLibraries.LoadLibrary("Standard")
    Dlg=CreateUnoDialog(DialogLibraries.Standard.Dialog2)
    ps = Dlg.PosSize
    Dlg.setPosSize(ps.x,ps.y,"1380","900",com.sun.star.awt.PosSize.POSSIZE)
    Dlg.Model.Title="Ergebnisse"
    MyControl=Dlg.GetControl("ListBox1")      

	msgbox "Zwei"

  	i=0
	' Wenn ResultSet Daten enthält, werden die einzelnen Wert ermittelt
  	if not isNull(ResultSet) then
		while resultset.next
			'Zuweisen der einzelnen Felder zu Ergebnisstrings
			Werkstoff = ResultSet.getstring(2)
			Werkstueck = ResultSet.getstring(3)
			Anwendungsart = ResultSet.getstring(4)
			GewErgebnis = ResultSet.getstring(5)
			Maschine = ResultSet.getstring(6)
			Branche = ResultSet.getstring(7)
			Qualitaet = ResultSet.getstring(8)
			Abmessung = ResultSet.getstring(9)
			SANR = ResultSet.getstring(10)
			Einsatzparameter = ResultSet.getstring(11)
			SpezProduktanfor = ResultSet.getstring(12)
			Wettbewerb = ResultSet.getstring(13)
			Kommentare = ResultSet.getstring(14)			

			' Zusammensetzen der einzelnen Felder zu einem Ergebnisstring 
			Teilergebnis = Werkstoff & " == " & Werkstueck & " == " & Anwendungsart & " == " & GewErgebnis & " == " 
			Teilergebnis = Teilergebnis & Maschine & " == " & Branche & " == " & Qualitaet  & " == "
			Teilergebnis = Teilergebnis & Abmessung & " == " & SANR & " == " & Einsatzparameter & " == "
			Teilergebnis = Teilergebnis & SpezProduktanfor & " == " & Wettbewerb & " == " & Kommentare
						
			' Für jedes Ergebnis wird der Zähler um 1 erhöht
			i = i + 1
			MyControl.addItem(Teilergebnis,i)						
		wend
	Dlg.Execute()
	msgbox "Drei"
Zwischen dem Erscheinen der Messagebox "Zwei" und der Messagebox "Drei" vergeht mehr als eine Minute, wobei ich im schlimmsten Fall 1500 Datensätzen mit 16 Feldern zusammenfügen. Kann ich meinen Code noch optimieren oder ist dies schon das Optimum, was sich bei einer 2 GHz CPU und 512 MB RAM realisieren läßt?

Danke für jeden Hinweis & Tipp,

Stefan
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Zusammensetzen eines Strings dauert sehr lange

Beitrag von Toxitom »

Hey Stefan,

hmm, das wird schon so stimmen. Bei 1600 Datensätzen - also 1600 Schleifendurchgängen - da finde ich ca. 1 Minute noch richtig gut :-)

Das ist eben Basic - und die Wege sind lang..... Möglicherweise kommst du schneller, wenn du zuerst eine Abfrage in der Datenbank Engine erzeugts (also vielleicht mit Concat Strings verbinden) und dann die Abfrage als ganzes einliest?

Nur so eine Idee.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zusammensetzen eines Strings dauert sehr lange

Beitrag von komma4 »

Stefan,

---ungetestet---

* handelt es sich um die interne HSQLDN als DB engine?

* IIRC: es werden mit dem defaultwert max. 100 Datensätze abgerufen: hier lässt sich bestimmt auch noch etwas optimieren; siehe viewtopic.php?f=8&t=14334&p=57741&hilit ... set#p57741


* setze Deinen String schon in der Abfrage zusammen (Konkatinierung; Syntax je nach zu verwendendem SQL):

Code: Alles auswählen

SELECT  " A =="  && a && "B ==" && b ....
So erhälst Du nur eine Ergebnisspalte. Ich fürchte, dass erst die Zuweisung zu einer Variablen, dann deren Verkettung zu lange braucht.


Mal sehen, was der giftige Thomas dazu zu sagem hat :-)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zusammensetzen eines Strings dauert sehr lange

Beitrag von komma4 »

und da hat er schon.

Also, ich finde das dauert zu lange.

...muss ins Büro, BFN
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten