GELÖST Datumsfeld per Makro in Datenbank schreiben

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

GELÖST Datumsfeld per Makro in Datenbank schreiben

Beitrag von WSO »

Ich moechte per Makro ein Datumsfeld einer Base-Tabelle manipulieren.
Habe keine Doku gefunden, wie das Datumsfeld im Makro formatiert sein muss und laufe immer auf folgenden Fehler:

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Wrong data type: java.lang.IllegalArgumentException.

Kann mir bitte jemand einen Hinweis geben?

Hier das kleine Makro :

Code: Alles auswählen

sub udddatum ()
    
		DIM oDatasource AS OBJECT
		DIM oConnection AS OBJECT
		
		oDatasource = thisComponent.Parent.CurrentController
		IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
		oConnection = oDatasource.ActiveConnection()
		
		DIM oSQL_Statement AS OBJECT
		' das Objekt, das den SQL-Befehl ausführt
		DIM stSql AS STRING
		' Text des eigentlichen SQL-Befehls
		DIM oResult AS OBJECT
		' Ergebnis für executeQuery
		DIM iResult AS INTEGER
		' Ergebnis für executeUpdate
		oSQL_Statement = oConnection.createStatement()
		
	
		dim iDatu as date		
		iDatu = now
		
		msgbox (iDatu)
		
			
		stSql = "INSERT INTO ""tTest"" (""datu"") VALUES('"+iDatu+"')"
	
		msgbox ("SQL = " + stSql)

		oSQL_Statement.executeUpdate(stSql)
		iResult = oSQL_Statement.executeUpdate(stSql)
		
		msgbox ("Result = " + iResult)
		
		oSQL_Statement.close()
		
end sub


Moderation:
[​code]…[​/code] Tags repariert.
lorbass, Moderator
Zuletzt geändert von WSO am Mo, 14.07.2014 23:42, insgesamt 1-mal geändert.
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datumsfeld per Makro in Datenbank schreiben

Beitrag von RobertG »

Hallo WSO,

wie sieht das Datum aus, dass Du einfügen willst?

Code: Alles auswählen

 "INSERT INTO ""tTest"" (""datu"") VALUES('"+iDatu+"')"
iDatu müsste folgendermaßen aussehen: '2014-04-24'.
So etwas kannst Du aus der Jahresangabe, der Monatsangabe und der Tagesangabe zusammenbauen.

Hast Du eine Datumsvariable, dann geht die Umwandlung so:

Code: Alles auswählen

FUNCTION Date_2_SQLDate(d AS DATE) AS STRING
	DIM stMonth AS STRING
	DIM stDay AS STRING
	IF Month(d) < 10 THEN
		stMonth = "0" + Trim(Str(Month(d)))
	ELSE
		stMonth = Trim(Str(Month(d)))
	END IF
	IF Day(d) < 10 THEN
		stDay = "0" + Trim(Str(Day(d)))
	ELSE
		stDay = Trim(Str(Day(d)))
	END IF
	Date_2_SQLDate = Trim(Str(Year(d))) +"-"+ stMonth +"-"+ stDay
END FUNCTION
Mit SQL_Datum = Date_2_SQLDate(iDatu) dürftest Du dann das Datum haben, was Du per SQL einfügen kannst.

Du kannst auch direkt mit einem entsprechendem Wert das Formularfeld füllen - siehe den folgenden Code.

Code: Alles auswählen

SUB Datum_aktuell
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT
	DIM unoDate
	oDoc = thisComponent
	oDrawpage = oDoc.drawpage
	oForm = oDrawpage.forms.getByName("Formular") 
	oFeld=oForm.getByName("Datum") 	
	unoDate = createUnoStruct("com.sun.star.util.Date")
	unoDate.Year = Year(Date)
	unoDate.Month = Month(Date)
	unoDate.Day = Day(Date)
	oFeld.BoundField.updateDate(unoDate)
END SUB
Gerade bei Datumsvariablen ist es irgendwann wichtig, mit welcher Office-Version Du arbeitest. Das trifft nicht auf den obigen Code zu, aber wenn da einmal cDateToIso auftaucht, dann gibt es Unterschiede zwischen LO 4.1 und später und allen anderen Officeversionen incl AOO, OOo.

Gruß

Robert
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: Datumsfeld per Makro in Datenbank schreiben

Beitrag von WSO »

Danke, da haette ich noch lange probierren koennen.
Gruss,
Wolfram
Antworten