BASE: geänderte Formularfelder in Datenbank speichern

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: BASE: geänderte Formularfelder in Datenbank speichern

Re: BASE: geänderte Formularfelder in Datenbank speichern

von DirkL » So, 18.03.2012 19:44

An F3K Total
Kurz vorab: ich bin die nöchsten Tage unterwegs, melde mich danach.
Der nachfolgende Code läuft.

Code: Alles auswählen

	oColName  = oForm.findColumn("ArGPreis")
	oForm.updateString(oColName,PrsGesamt)
boundfield habe ich noch nicht getestet.

Das Problem mit Currency bleibt

Code: Alles auswählen

Dim PrsEinzel as Currency
..
oFeld1 = oForm.GetByName("fmtArEPreis")
PrsEinzel = oFeld1.text
...
Auch hier wird in Cent umgerechnet. Der Code

Code: Alles auswählen

oColName  = oForm.findColumn("ArEPreis")
PrsEinzel = oForm.getFloat(oColName)
wäre machbar - liefert statt 2,55 den Wert 2,5499999 - , gibt aber den alten Dantenbankwert und nicht den manuell geänderten Feldwert.

Ich bleibe dran
Dirk

Re: BASE: geänderte Formularfelder in Datenbank speichern

von F3K Total » Fr, 16.03.2012 18:38

Hallo
DirkL hat geschrieben:Dazu noch eine Frage : gibt's statt "updateString(3,PrsGesamt)" eine Funktion in der nicht die Spaltennummer sondern der Spaltenname ( hier "fmtArGPreis") genutzt werden kann?
naja, fast, in zwei Schritten, und es gilt der Spaltenname in derTabelle, nicht der Name des Kontrollfeldes:
mit

Code: Alles auswählen

ncolumn = oform.findcolumn("Spaltenname")
bekommst Du den Spaltenindex, erste Spalte = 1 usw.
um dann mit

Code: Alles auswählen

oform.updateString(ncolumn,PrsGesamt)
weiterzumachen.
Du scheinst aber eher die an das Kontrollfeld "fmtArGPreis" gebundene Spalte zu suchen, das geht so:

Code: Alles auswählen

oboundfield = oform.fmtArGPreis.boundfield
oboundfield.update ...
und die zweite Frage:
DirkL hat geschrieben:Wie behalte ich meinen Dezimalwert?
Versuche es mal, indem Du zunächst zwei Currency Variablen deklarierst und den jeweiligen Inhalt der Kontrollfelder dort einliest. Die Multplikation würde ich erst danach machen.

Viel Erfolg
Gruß R

Re: BASE: geänderte Formularfelder in Datenbank speichern

von DirkL » Fr, 16.03.2012 17:51

Danke an F3K Total,
der Link war schon mal sehr gut. Es mussten nur 3 Zeilen an mein Makro angehängt werden.

Code: Alles auswählen

Sub KalkPreis

	Dim odoc as Object
	Dim oForm as Object
	Dim oFeld1 as Object
	Dim oFeld2 as Object
	Dim oFeld3 as Object
	Dim PrsGesamt as Currency
	
	oDoc = ThisComponent
	oForm = oDoc.drawpage.forms.getByName("MainForm")
	oFeld1 = oForm.GetByName("fmtArEPreis")                               ' enthält 2,45
	oFeld2 = oForm.GetByName("fmtArAnz")
	oFeld3 = oForm.GetByName("fmtArGPreis")
	msgbox(val(oFeld1.text))                                                      ' zeigt und rechnet 245
	PrsGesamt = val(oFeld1.text)*val(oFeld2.text)
'	oFeld3.text=PrsGesamt
'	oFeld3.commit(true) 
	oForm.updateString(3,PrsGesamt)
	oForm.UpdateRow()
	oForm.RefreshRow()
	
'	MyFormat = "0.00"
'	MyString = Format(-1579.8, MyFormat)     ' Provides "-1579,80"
 
End  Sub		'KalkPreis
Dazu noch eine Frage : gibt's statt "updateString(3,PrsGesamt)" eine Funktion in der nicht die Spaltennummer sondern der Spaltenname ( hier "fmtArGPreis") genutzt werden kann?

Noch zu meinem Nebenproblem:
im Feld Einzelpreis (Format Dezimal 10.2) ist z.B. der Wert "2,45" eingetragen. Lese ich es über
"oFeld1 = oForm.GetByName("fmtArEPreis")" aus und sete den String in eine Zahl um per "val(oFeld1.text)". "Val" macht aus meinen "2,45" dann den Wer "245". Wie behalte ich meinen Dezimalwert?

Danke Dirk
Dateianhänge
Artikel.odt
Anbei das Formular mit Makro
(9.79 KiB) 44-mal heruntergeladen

Re: per Makro geänderte Formularfelder in Datenbank speicher

von F3K Total » Fr, 16.03.2012 15:58

Hallo,
klar, aber dazu müßte man die Datenbank genauer kennen. Sprich, lade ein Beispieldokument hoch, ggf. verfremdet.
Prinzipiell habe ich die Erfahrung gemacht, das es sicherer ist über die update Befehle des Formulares zu gehen statt die Kontrollfelder auszulesen und wieder zu beschreiben.
Hier einige Informationen dazu:viewtopic.php?f=8&t=47265&start=15#p172750

Gruß R

BASE: geänderte Formularfelder in Datenbank speichern

von DirkL » Fr, 16.03.2012 09:55

Es existiert eine einfache Artikeldatenbank (SQL) mit den Feldern ArId, ArAnzahl, ArEinzelpreis und ArGesamtpreis. Dafür wurde mit eben diesen Feldern ein Formular erstellt und als Textdatei abgespeichert. Im Formular sollen per Makro der Gesammtpreis neu berechnet werden, sobald ich manuell die Anzahl oder den Einzelpreis in den entsprechenden Feldern ändere.
Hauptproblem
Sobald z.B. die Anzahl geändert wird, wird auch der neue Gesamtpreis im Feld notiert und in der Navigationsleiste wird das Speichersymbol aktiviert. Beim Speichern wird jedoch nur das manuell geänderte Feld (hier Anzahl) gespeichert, nicht aber die Gesamtsumme.
Nebenproblem
In der Datenbank sind die Preisfelder als Dezimal (10.2) definiert, sie werden jedoch ohne Berücksichtigung des Dezimaltrenners ausgelesen und auch die Formatanweisung nutzt mir auch nichts.

Ich habe die letzten beiden Tage viel gelesen, aber leider nichts entsprechendes gefunden oder überlesen. Hat jemand eine Idee?
Danke Dirk

Code: Alles auswählen

Sub KalkPreis

	Dim odoc as Object
	Dim oForm as Object
	Dim oFeld1 as Object
	Dim oFeld2 as Object
	Dim oFeld3 as Object
	Dim PrsGesamt as Currency
	
	oDoc   = ThisComponent
	oForm  = oDoc.drawpage.forms.getByName("MainForm")
	oFeld1 = oForm.GetByName("fmtArEPreis")
	oFeld2 = oForm.GetByName("fmtArAnz")
	oFeld3 = oForm.GetByName("fmtArGPreis")
	PrsGesamt  = val(oFeld1.text)*val(oFeld2.text)
	oFeld3.text = PrsGesamt
'	oFeld3.text = Format(PrsGesamt, "0.00")		' Nebenproblem, nutzt nichts
'	oFeld3.commit(true) 						' Hatte ich gelesen, nutzt nichts

End  Sub		'KalkPreis



Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst

Nach oben