Seite 2 von 2

Re: [Array] gleich mit Elementen vorbelegen - Typ String

Verfasst: Di, 05.04.2011 22:58
von opiWahn
ein wenig weiter bin ich dann mal gekommen.
hab das ganze aufgesplittet in oFeld(10) und oText(10) beide als Variant.
Mittels der ersten Schleife klappt dann auch die Zuordnung:

Code: Alles auswählen

Dim oForm As Object, oEdit As Object
Dim oFeld(10)
Dim oText(10)
Dim TempText
...
	oFeld() = Array("o_anrede", "o_name", "o_titel", "o_strasse", "o_ort", "r_anrede", "r_name", "r_titel", "r_strasse", "r_ort", "langtext")

		for i = 0 to 10
			oText(i) = oForm.getByName(oFeld(i))
		next i
...
Aber hier (in der 2. Schleife) bekomme ich dann die Fehlermeldung: "ungültiger descriptor-index" aus com.sun.star.sdbc.SQLException ?

Code: Alles auswählen

...
		for i = 0 to 10
			oText(i).text= trim(QueryErg.GetString(i))
			if i = 10 then
				TempText = trim(QueryErg.GetString(i))
				oText(i).text = Replace(TempText, Chr(10)+ Chr(13), "")
			end if
		next i
...
Google konnte mit dieser Meldung auch nichts anfangen.

Re: [Array] gleich mit Elementen vorbelegen - Typ String

Verfasst: Mi, 06.04.2011 08:41
von opiWahn
Ich weiß was, was Google nicht weiß :)
Als ich meinen PC, unbd letztlich auch mich, schon zur Ruhe legte dämmerte mir dann auch die Lösung:

Code: Alles auswählen

		for i = 0 to 10
			oText(i).text = trim(QueryErg.GetString(i+1))
			if i = 10 then
				TempText = trim(QueryErg.GetString(i+1))
				oText(i).text = Replace(TempText, Chr(10)+ Chr(13), "")
			end if
		next i
Die Ausgabe der Query kann natürlich nicht bei 0 beginnen!
Dummerweise klemmts jetzt am Replace. Keine Fehlermeldung, aber auch keine Funktion :?

Andere Frage: Wie spreche ich die Checkbox korrekt an bzw. wie prüfe ich ob sie an oder aus ist. Bestenfalls zur gesamten Laufzeit, also in der Zeit zwischen Daten holen/eingeben bis zum Speichern. Ist chkEdit an tuh was (z.b. ReadOnly auf False setzen) wird sie wieder ausgeschaltet setze ReadOnly auf true.

Code: Alles auswählen

		if oEdit.state() then
			for i = 1 to 10
				oText(i).ReadOnly = false
				oText(i).BackgroundColor = RGB(211,211,211)
			 	oText(i).Border(2)				
			next i
		else
				oText(i).ReadOnly = true
				oText(i).BackgroundColor = RGB(0,0,0)
			 	oText(i).Border(0)
		end if

Re: [Array] gleich mit Elementen vorbelegen - Typ String

Verfasst: Mi, 06.04.2011 14:00
von DPunch
Aloha
opiWahn hat geschrieben:hab das ganze aufgesplittet in oFeld(10) und oText(10) beide als Variant.
Hättest Du nicht gemusst, durch die Deklaration als Variant hättest Du auch mit einem Array arbeiten können.
Übrigens ist die Deklaration

Code: Alles auswählen

oFeld(10)
insofern überflüssig, als dass Dein Array durch die Zuweisung

Code: Alles auswählen

oFeld() = Array("o_anrede", "o_name", "o_titel", "o_strasse", "o_ort", "r_anrede", "r_name", "r_titel", "r_strasse", "r_ort", "langtext")
sowieso neu dimensioniert wird.
Ich vermute auch, dass diese Zeile

Code: Alles auswählen

oText(i).text = Replace(TempText, Chr(10)+ Chr(13), "")
eher gedacht war als

Code: Alles auswählen

oText(i).text = Replace(TempText, Chr(10), "")
Einfache carriage returns bzw linefeeds werden mit Deinem Vorgehen *nicht* ersetzt, sondern nur die Stellen, wo beides hintereinander auftritt. Das

Code: Alles auswählen

Chr(10)+ Chr(13)
bewirkt eine Stringverkettung, der zu ersetzende Teil wird also nur gefunden, wenn genau diese Kombination auftritt.
opiWahn hat geschrieben:Wie spreche ich die Checkbox korrekt an bzw. wie prüfe ich ob sie an oder aus ist.
Per Event. Bei Rechtsklick auf die Checkbox -> Kontrollfeld -> Ereignisse -> Status geändert ein Makro zuweisen, dieses wird immer ausgeführt, wenn sich der Status der Checkbox ändert.

Re: [Array] gleich mit Elementen vorbelegen - Typ String

Verfasst: Mi, 06.04.2011 14:33
von opiWahn
Hallo DPunch,

zunächst mal wieder - vielen Dank für deine sehr hilfreich Erklärung :D
oText(i).text = Replace(TempText, Chr(10)+ Chr(13), "")
war ursprünglich schon so gedacht, und funktionierte auch zusammen.
Das Ergebnis war, daß dieses Memofeld aus der AccessDB im Textfeld so aussah, daß unnötige Leerzeichen genauso gelöscht wurden wie Zeilenumbrüche.
Ich hatte, sofern vorhanden, jeweils eine Zeile Text.
Entweder-Oder funktioniert wie du es vorausgesagt hast.
´Hab mich jetzt für chr(13) entschieden, obgleich es dann immer noch unnötige chr(10) gibt.
Wende ich jedoch chr(10) an zieht er alles in einem Rutsch zusammen.
Aber das ist dann eher ein Schönheitsfehler, mit dem man notfalls leben kann.