Seite 1 von 1

CURDATE() in SQL zum Schreiben per Basic nutzen

Verfasst: Mo, 15.01.2018 12:09
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

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

Verfasst: Mo, 15.01.2018 15:48
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

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

Verfasst: Mo, 15.01.2018 17:46
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

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

Verfasst: Di, 16.01.2018 09:43
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