CURDATE() in SQL zum Schreiben per Basic nutzen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

CURDATE() in SQL zum Schreiben per Basic nutzen

Beitrag von Stephan »

Hallo,

ich versuche CURDATE() oder CURRENT_DATE() in einem SQL-Ausdruck zu verwenden, um per Basic einen DAtensatz in eine Datentabelle zu schreiben.

ich verwende derzeitig ersatzweise folgenden Code:

Code: Alles auswählen

Sub Test()
'...
oDataSource = oBaseContext.getByName(DB_name) 'DB_name, siehe Modul "_info"
oCon = oDataSource.getConnection(sUser, sPassword)
oStatement = oCon.createStatement()
	
akt_Datum = Date_2_SQLDate(DATE())
		
sql_string = "INSERT INTO ""Firma"" (""Firmenname"", ""Abteilung"", ""FPostStrasse""," &_
	"""FPostleizahl"", ""FOrt"", ""FLand"", ""FBsStrasse"", ""FBsPostleizahl""," &_
	"""FBsOrt"", ""FeMail"", ""FUrl"", ""FAdressKategorie"", ""FTelefonZentrale""," &_
	"""FFax"", ""FBemerkung"", ""FGeaendert"") VALUES ('" & var_Firmenname & "', '" & var_Abteilung & "'," &_
	"'" & var_FPostStrasse & "', '" & var_FPostleizahl & "', '" & var_FOrt & "', '" & var_FLand & "'," &_
	"'" & var_FBsStrasse & "', '" & var_FBsPostleizahl & "', '" & var_FBsOrt & "', '" & var_FeMail & "'," &_
	"'" & var_FUrl & "', '" & var_FAdressKategorie & "', '" & var_FTelefonZentrale & "', '" & var_FFax & "'," &_
	"'" & var_FBemerkung & "','" & akt_Datum & "')"
		
oStatement.executeUpdate(sql_string)
End Sub

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



Wie kann ich CURDATE() oderr CURRENT_DATE() in sql_string direkt nutzen? Oder geht das nicht? Ich probiere seit einer Stunde...



Gruß
Stephan
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: CURDATE() in SQL zum Schreiben per Basic nutzen

Beitrag von Toxitom »

Hey Stephan,

zunächst solltest Du testen, ob Deine Datenbank überhaupt die Funktion "CURDATE()" etc unterstützt;) Hast Du es mal auf der Console versucht?

Ansonsten ... was spricht eigentlich gegen die direkte Basic-Methode?

Ich mache das auch über now(), wobei ich das eben entsprechend formatiere, also so: format(now(), "yyyy-mm-dd hh:mm") - das entspricht exakt dem von MySQL erwarteten Format.

Brauchst Du einen Timestamp, kannst Du auch in der Datenbank das Feld als "timestamp" feld definieren und automatisch auffüllen lassen - da kommt dann immer der Datum/zeit Wert rein wenn der Datensatz erzeugt wurde.

Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: CURDATE() in SQL zum Schreiben per Basic nutzen

Beitrag von RobertG »

Hallo Stephan,

Du musst statt

Code: Alles auswählen

,'" & akt_Datum & "')"

Code: Alles auswählen

, CURRENT_DATE)"
schreiben. Also nicht in Hochkommata. Dann gibst Du die Funktion weiter.
CURDATE() ist ein Kürzel, das auf die interne HSQLDB, MySQL und einige andere Datenbanken beschränkt ist. CURRENT_DATE ist der SQL-Standard und z.B. auch für Firebird verfügbar.

Gruß

Robert
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: CURDATE() in SQL zum Schreiben per Basic nutzen

Beitrag von Stephan »

RobertG hat geschrieben: Mo, 15.01.2018 17:46 Hallo Stephan,

Du musst statt

Code: Alles auswählen

,'" & akt_Datum & "')"

Code: Alles auswählen

, CURRENT_DATE)"
schreiben. Also nicht in Hochkommata. Dann gibst Du die Funktion weiter.
CURDATE() ist ein Kürzel, das auf die interne HSQLDB, MySQL und einige andere Datenbanken beschränkt ist. CURRENT_DATE ist der SQL-Standard und z.B. auch für Firebird verfügbar.

Gruß

Robert
Ja, danke es ging nur um die Schreibweise. Ohne Hochkomma war mir klar, aber ich habs irgendwie nicht hinbekommen.

Gruß
Stephan
Antworten