Formular: via Checkbox die Values von Textfeldern ändern

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Formular: via Checkbox die Values von Textfeldern ändern

Re: Formular: via Checkbox die Values von Textfeldern ändern

von gogo » Sa, 02.04.2011 17:01

Hat das Anlegen des Arrays irgendwelche nachteilige Auswirkungen?
nein, ausser es braucht so viel Speicher, dass Dein System in die Knie geht ;)
Kann ich es auch global anlegen, um solche Aktionen in jeder Routine (Sub) bequem mit einer Schleife zu lösen ...
ja, die Definition (DIM) muss sich dann aber logischerweise außerhalb der Sub befinden.
Ich gehe mal davon aus, daß der selbstsprechende Arrayname schon anders lauten sollte, als das was dann drin ist.
Das wäre zweckmässig, allerdings kann ein Name einer Variablen (oder Konstanten) jeder beliebige String sein, mit einigen kleinen Einschränkungen (maximal 255 Zeichen, muss mit Buchstabe oder Unterstrich beginnen, darf kein Basic-Schlüsselwort sein, keine Leerzeichen und mit den Sonderzeichen eher vorsichtig ;) ...)

g

Re: Formular: via Checkbox die Values von Textfeldern ändern

von opiWahn » Sa, 02.04.2011 10:18

Hallo DPunch,

Danke für die Info.
Hat das Anlegen des Arrays irgendwelche nachteilige Auswirkungen?
Kann ich es auch global anlegen, um solche Aktionen in jeder Routine (Sub) bequem mit einer Schleife zu lösen oder muß das Array in jeder Sub neu erstellt werden?
Ich gehe mal davon aus, daß der selbstsprechende Arrayname schon anders lauten sollte, als das was dann drin ist.

Re: Formular: via Checkbox die Values von Textfeldern ändern

von DPunch » Sa, 02.04.2011 08:47

Aloha
opiWahn hat geschrieben:Bisher sieht das bei mir so aus, wobei ich schon vermute, daß das mit der Schleife so nicht funktioniert:
Natürlich kann das nicht funktioneren.

Code: Alles auswählen

oText(i).ReadOnly
Nur weil Du Deine Variablen oText1 bis oTextx benannt hast, gibt es noch lange kein Array mit diesen Variablen, die Du über den Index i ansprechen könntest.
Wenn dann müsstest Du ein entsprechendes Array deklarieren und die Variablen dort unterbringen

Code: Alles auswählen

Dim oText(12)
oText(2) = oForm.getByName("o_anrede")
oText(3) = oForm.getByName("o_name")
oText(4) = oForm.getByName("o_titel")
...
Dann würde Deine Schleife funktionieren.

Re: Formular: via Checkbox die Values von Textfeldern ändern

von gogo » Sa, 02.04.2011 01:01

also...

Ich würde das immer über Filter machen.

Wenn "freie Eingabe" die Erfassung eines NEUEN Datensatzes ist, und "Daten kommen aus DB" die Bearbeitung eines bestehenden Datensatzes ist, dann:

bei "freier Eingabe":

Code: Alles auswählen

oForm.moveToInsertRow 'geht zum neuen Datensatz 
und bei "Daten kommen aus DB": nach der Abfrage der Auftragsnummer, nach ebendieser filtern:

Code: Alles auswählen

oForm.Filter="(key = " & oANr & ")"
oForm.ApplyFilter = true
oForm.Reload 'filtert das Formular und zeigt nur den Datensatz mit der Nummer oANr an
Den Status des Formulars und seiner Steuerelemente (Bearbeiten/Nicht bearbeiten) kannst Du über das Ereignis "Status geändert" Deiner Checkbox steuern, ich würde da ein separates Makro schreiben, in dem alle gewünschten Änderungen mal so, und mal in die andere Richtung geändert werden.

g

Formular: via Checkbox die Values von Textfeldern ändern

von opiWahn » Fr, 01.04.2011 21:20

Hallo,

hab mir vorgenommen mein Formular durch ein Komfortmerkmal zu erweitern.
Derzeit wird der Inhalt für bestimmte Textfelder nur aus einer DB gelesen, die Textfelder sind ReadOnly, Hintergrundfarbe weiss und ohne Rahmen.
Es soll nun mittels Aktivierung einer Checkbox (Standard ist: aus) je nach Modus (freie Eingabe o. Daten aus DB) folgende "Funktionen" realisiert werden:
a) Freie Eingabe: State (1), Checkbox an, Felder ggf. leeren, ReadOnly: false. BackGround: grau und Rahmen (2). Wird die Checkbox deaktiviert, bleibt die bisherige Eingabe bestehen und der alte (optische) Zustand wird wieder hergestellt. Die Textfelder sind wieder ReadOnly.
b) Daten kommen aus DB: der User entscheidet sich aktiv für die Änderung der gezogenen Daten in dem er die Checkbox aktiviert. Dann erfolgt das gleiche wie schon bei a), außer daß vorhandene Felder nicht gelöscht werden. Auch hier: Wird die Checkbox deaktiviert, bleibt die bisherige Eingabe bestehen und der alte (optische) Zustand wird wieder hergestellt. Die Textfelder sind wieder ReadOnly.

Bisher sieht das bei mir so aus, wobei ich schon vermute, daß das mit der Schleife so nicht funktioniert:

Code: Alles auswählen

' Database
Dim Context As Object, DB As Object, Connection As Object, QueryErg As Object
Dim DBName As String, SQL As String
Dim Statement As Variant

' FormObjects
Dim oForm As Object
Dim aOpt1(), aOpt2(), aOpt3(), aOpt4()
Dim s1_1 As String, s1_2 As String, s2_1 As String, s2_2 As String, s3_1 As String, s3_2 As String, s4_1 As String, s4_2 As String

' ErrorProof
Dim grpfail1 As Variant, grpfail2 As Variant, grpfail3 As Variant, grpfail4 As Variant 
Dim errormsg1 as String

' save odt/PDF 
Dim datname As String, path As String, extension As String, odturl As String, pdfurl As String

' addForm
dim document   as object
dim dispatcher as object


'--------------------------------------------------------------------------------------------- Baustelle!
'Sub clearForm

'end Sub


'--------------------------------------------------------------------------------------------- Teilbaustelle! 
' Daten über Input aus DB ziehen
 
Sub Value_ANr

'clearForm  
  
	oANr = inputBox ("Auftragsnummer","Eingabe erforderlich","Bitte Auftragsnummer eingeben")
	oForm = thisComponent.drawpage.forms.getbyindex(0)
'	oText1 = oForm.getByName("auftnr")
	oText2 = oForm.getByName("o_anrede")
	oText3 = oForm.getByName("o_name")
	oText4 = oForm.getByName("o_titel")
	oText5 = oForm.getByName("o_strasse")
	oText6 = oForm.getByName("o_ort")
	oText7 = oForm.getByName("r_anrede")
	oText8 = oForm.getByName("r_name")
	oText9 = oForm.getByName("r_titel")
	oText10 = oForm.getByName("r_strasse")
	oText11 = oForm.getByName("r_ort")
	oText12 = oForm.getByName("langtext")
	oEdit = oForm.getByName("chk_edit")
	
   		DBName = "REPARATUR"
		Context = createUnoService("com.sun.star.sdb.DatabaseContext")
		DB = Context.GetByName (DBName)
		Connection = DB.GetConnection ("","")
		Sql = "SELECT `key`,`objekt_anrede`,`objekt_name`,`objekt_titel`,`objekt_strasse`,`objekt_ort`,`rechnung_anrede`,`rechnung_name`,`rechnung_titel`,`rechnung_strasse`,`rechnung_ort`,`langtext` FROM `REPARATUR` WHERE `key` = '"+oANr+"';"	
		
		Statement = Connection.CreateStatement
		QueryErg = Statement.ExecuteQuery(SQL)
'		oText1.text = trim(QueryErg.GetString(1))
		oText2.text = trim(QueryErg.GetString(2))
		oText3.text = trim(QueryErg.GetString(3))
		oText4.text = trim(QueryErg.GetString(4))
		oText5.text = trim(QueryErg.GetString(5))
		oText6.text = trim(QueryErg.GetString(6))
		oText7.text = trim(QueryErg.GetString(7))
		oText8.text = trim(QueryErg.GetString(8))
		oText9.text = trim(QueryErg.GetString(9))
		oText10.text = trim(QueryErg.GetString(10))
		oText11.text = trim(QueryErg.GetString(11))
		TempText12 = trim(QueryErg.GetString(12))
		oText12.text = Replace(TempText12, Chr(10)+ Chr(13), "")		
		Connection.Close()
		
		if oEdit.state(1) then
			for i = 2 to 11
				oText(i).ReadOnly = false
			        oText(i).BackgroundColor = RGB(211,211,211)
			        oText(i).Border(2)				
			next i
		end if
	
End Sub

'--------------------------------------------------------------------------------------------- Baustelle!
Sub freeInsert

' clearForm

	oForm = thisComponent.drawpage.forms.getbyindex(0)
	oEdit = oForm.getByName("chk_edit")
	oEdit.enabled = true
		for i = 2 to 11
			oText(i).ReadOnly = false
			oText(i).BackgroundColor = RGB(211,211,211)
			oText(i).Border(2)			
		next i
			
End Sub

Nach oben