Seite 1 von 1

Datumsfeld in Tabellen-Kontrollfeld - Datum ändern

Verfasst: Sa, 24.03.2007 14:54
von FeG
Hi zusammen,

ich habe schon einiges ver- und gesucht um das folgende Problem zu lösen - bislang leider ohne Erfolg. Es geht um folgendes:

Ich habe ein Formular (OOo Base) mit einem Tabellenkontrollfeld das u.a. zwei Datumsfelder enthält. Es handelt sich hier um Felder einer Rechnung, das erste ist das Rechnungsdatum ("Datum"), das zweit das Feld mit dem "zahlbar bis"-Datum ("ZahlbarBis").

Nun will ich, wenn man das Feld "Datum" verlässt und das "ZahlbarBis"-Feld noch leer ist, in dieses das Datum " 'Rechnungsdatum' + 14" Tage eintragen.

Eigentlich dachte ich, dass das mit folgendem Code gehen müsste:

Code: Alles auswählen

' Prozedur um nach der Eingabe des Rechnungsdatum das Zahlbar-Bis-Datum automatisch zu ergänzen
Sub AutoZahlbarBis
	Dim oDoc as Object, oForm as Object, oTabelle as Object, oDatum as Object, oZahlbarBis as Object
	
	oDoc = ThisComponent
	oForm = oDoc.drawpage.forms(0).getByName("AuftraegeForm").getByName("RechnungenForm")
	oTabelle = oForm.getByName("TabelleRechnungen")
	oDatum = oTabelle.getByName("Datum")
	oZahlbarBis = oTabelle.getByName("ZahlbarBis")
	
	' Nur ergänzen, wenn ZahlbarBis noch nicht eingegeben
	If oZahlbarBis.Date = 0 Then
		oZahlbarBis.Date = CDateToIso(CDateFromIso(oDatum.Date) + 14)
	End If
End Sub
Leider hat dieser Code nicht die gewünschte Auswirkung - das Feld in der Tabelle bleibt leer.
(Bei einem "normalen" Datumsfeld, das nicht in einer Tabelle ist, funktioniert der Code übrigens.)

Auch wenn ich das Feld manuell mit

Code: Alles auswählen

oZahlbarBis.Date = 20050505
setze, erscheint kein Wert in dem Feld.
Intern wird er aber wohl gespeichert, denn ein direktes

Code: Alles auswählen

MsgBox(oZahlbarBis.Date)
zeigt "20050505" an.

Ich hab keine Ahnung, wo hier mein Fehler sein könnte, aber vielleicht kann mir ja jemand von euch weiterhelfen...

Viele Grüße
FeG

Verfasst: Sa, 24.03.2007 17:12
von Toxitom
Hey FeG,

hmm, liegt wohl an der Anzeige. Die Tabellenkontrollfelder zeigen in der Regel ja nur Datensätze an - und dienen eben wirkich nur als Anzeige. Versuch doch mal ein .updateRow() auf den Datensatz - das sollte die Anzeige auch aktualisieren.
Ansonsten - aktuell überfragt.

Gruss
Thomas

Verfasst: Sa, 24.03.2007 17:56
von FeG
Hallo Thomas...
Toxitom hat geschrieben:Versuch doch mal ein .updateRow() auf den Datensatz - das sollte die Anzeige auch aktualisieren.
Hab' ich grad versucht - leider ohne Erfolg... hast du noch 'ne andere Idee?

Viele Grüße
Felix

Verfasst: So, 25.03.2007 17:42
von Bratmatzen
Hallo FeG,

ich auch n bisschen rumgespielt, hab aber auch nicht rausgefunden wie´s funktioniert.
Toxitom hat geschrieben:Die Tabellenkontrollfelder zeigen in der Regel ja nur Datensätze an - und dienen eben wirkich nur als Anzeige.
Das Problem wird wahrscheinlich hier liegen. Schreib doch dein neues Datum, direkt in die Tabelle der Datenbank (also nicht die im Formular, sondern die aus der das Formular die Daten bezieht). Das müsste funktionieren.

Beispiel für Datenbankverbindung:

Code: Alles auswählen

	'Verbindung zur DB herstellen
	DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
	DataSource = DatabaseContext.getByName("Name Datenbank")
	Connection = DataSource.GetConnection("","")
	Statement = Connection.createStatement()
	Statement.executeQuery("Insert INTO ""Rechnung"" (""Zahltermin"") VALUES ('"Datum+14"') WHERE Nr = 10 ")
allerdings ohne gewährleistung für korrekte Syntax im SQL Befehl, hab den auch bloß rauskopiert. Natürlcih musst du auch noch die ID deines Datensatzes auslesen uns alles an der richtigen Stelle einfügen.
Vielleicht hilft´s dir n bisschen weiter

Gruß Matze

Verfasst: Mo, 26.03.2007 19:07
von FeG
Hi Matze,

ja, daran habe ich auch schon gedacht - das Problem ist nur: das berechnete "Zahlbar bis"-Datum ist nur ein "Vorschlag", den ich auch noch abändern können will...

Gibt es nicht irgendeine Möglichkeit so zu tun, als hätte der Benutzer das Datum eingegeben?

Ich hab nämlich ein ähnliches Problem an einer anderen Stelle. Auch hier berechne ich ein Datum auf der Grundlage eines anderen Datums das aus der Datenbank gelesen wird und schreibe es in ein (normales, nicht in einem Tabellen-Kontrollfeld liegendes) Datumsfeld.
Obwohl allein ein eingegebenes Datum zum Abspeichern des Datensatzes genügt bietet er mir diese Option aber nicht an, ich kriege 'ne Fehlermeldung à la "Das Feld Datum darf nicht leer sein".

Irgendwie alles n bisschen komisch :? Dabei sollte mir das Makro doch nur die Eingaben abnehmen, die ich sowieso berechnen muss :(

Vielleicht hat ja jemand noch eine Idee dazu...

Viele Grüße
FeG

Verfasst: Di, 27.03.2007 17:41
von Toxitom
Hi FeG,
Obwohl allein ein eingegebenes Datum zum Abspeichern des Datensatzes genügt bietet er mir diese Option aber nicht an, ich kriege 'ne Fehlermeldung à la "Das Feld Datum darf nicht leer sein".
wie ich schon mal erwähnte: das Formular zeigt nur einen "View" auf den Datensatz an, das Ändern eines Anzeigewertes ändert keineswegs den Inhalt eines Datensatzes! Aber genau das tust du, wenn du die Anzeige in den Formularfeldern per Makro setzt. Richtig wäre, den Datensatz direkt zu ändern (das machst du bsp mit den "update()" -Funktionen) und dann den Datensatz erneut anzeigen zu lassen.
Alternativ kannst du natürlich auch die Formularfelder per Makro voreingeben und dann über einen Button "Datensatz speichern" diese Werte per Makro auslesen und daraus einen neuen Datensatz erzeugen - also alles "per Hand" erledigen.
Für alles gibt es Beispiele - es sind aber verschiedene Wege. Welchen du letztendlich einschlägst bleibt dir überlassen, Arbeit sind beide ;-)

Gruss
Thomas

Verfasst: Sa, 31.03.2007 21:45
von FeG
Hallo Thomas,

anscheinend hab ich mich da noch nicht verständlich genug ausgedrückt ;)

Ich will keinen bestehenden Datensatz ändern, sondern einen neuen anlegen. Ich bin mir auch bewusst, dass das reine Ändern eines Kontrollfelds noch nichts in der Datenbank ändert.

Die Beschreibung deines zweiten Ansatzes trifft es eigentlich ganz gut: Das Makro setzt ein paar Vorgabewerte in bisher leere Kontrollfelder (u.a. in einem Formular, das sowieso nur dazu dient, neue Daten anzulegen und alles andere nicht ermöglicht).
Der Benutzer soll dann eventuelle Änderungen vornehmen können (muss er aber nicht) und den Datensatz dann - per Hand - abspeichern.

Wenn du mir da ein knappes Beispiel nennen könntest wäre das super. Wie gesagt, ich will die Felder wirklich nur vorbelegen, abspeichern soll der Benutzer sie schließlich.

Ich hoffe, jetzt ist es verständlicher ;)

Viele Grüße + Dank für alle Bemühungen...

FeG