Seite 1 von 1
HSQL und Datum einfügen?
Verfasst: Do, 06.07.2006 12:40
von ykcim
Möglicherweise bin gerade blind

, aber wie füge ein Datum per SQL in Datumsfeld?
Versucht habe ich:
Code: Alles auswählen
Datum=Date
query= "INSERT INTO ""tb1"" (""mzMNr"",""mzNkVor"",""mzDat"") values ("+mNr+","+mNkVor+","+datum+")"
query= "INSERT INTO ""tb1"" (""mzMNr"",""mzNkVor"",""mzDat"") values ("+mNr+","+mNkVor+","+""""+datum+"""""+")"
query= "INSERT INTO ""tb1"" (""mzMNr"",""mzNkVor"",""mzDat"") values ("+mNr+","+mNkVor+","+"'"+datum+"'"+")"
Ich bekomme dann mit executeUpdate immer Fehlermeldungen.
Hat jemand einen Tipp für mich?
mfg
Michael
Verfasst: Do, 06.07.2006 13:14
von pmoegenb
Hallo Michael,
meines Wissens werden die Value-Werte ohne Pluszeichen übergeben. Lediglich die Reihenfolge und Datentyp muss übereinstimmen.
Wenn es sich z. B. bei
mNr um eine Variable handelt, muss
: (Hostvariable) davor gesetzt sein, dafür entfallen die Anführungszeichen.
Beispiel:
Code: Alles auswählen
Datum=Date
query= "INSERT INTO ""tb1"" (""mzMNr"",""mzNkVor"",""mzDat"") values (:mNr, :mNkVor, :datum)"
Verfasst: Do, 06.07.2006 14:06
von ykcim
Wie soll ich den ohne Verbinder (+) aus meinen Variablen ( z.b. mNr ) einen String machen? Ich will einen einen SQL-String mit Werten aus meinen Variablen erzeugen!
mfg
Michael
Verfasst: Do, 06.07.2006 14:33
von pmoegenb
ykcim hat geschrieben:Wie soll ich den ohne Verbinder (+) aus meinen Variablen ( z.b. mNr ) einen String machen? Ich will einen einen SQL-String mit Werten aus meinen Variablen erzeugen!
Hallo Michael,
die gesamte SQL-Anweisung wird doch als String übergeben. So wie die SQL-Anweisung von mir lautet heißt dies übersetzt:
Füge eine Zeile in die DB
tb1 ein. Fülle die Spalten wie folgt aus den den Variablen:
Verfasst: Do, 06.07.2006 14:59
von pmoegenb
pmoegenb hat geschrieben:ykcim hat geschrieben:Wie soll ich den ohne Verbinder (+) aus meinen Variablen ( z.b. mNr ) einen String machen? Ich will einen einen SQL-String mit Werten aus meinen Variablen erzeugen!
Hallo Michael,
die gesamte SQL-Anweisung wird doch als String übergeben. So wie die SQL-Anweisung von mir lautet heißt dies übersetzt:
Füge eine Zeile in die DB
tb1 ein. Fülle die Spalten wie folgt aus den den Variablen:
Ich denke, dass die Anführungszeichen nur bei Base, nicht aber bei Basic benötigt werden. Versuch mal folgende Syntax:
Code: Alles auswählen
Datum=Date
query= "INSERT INTO tb1 (mzMNr, mzNkVor, mzDat) values (:mNr, :mNkVor, :datum)"
Verfasst: Do, 06.07.2006 15:09
von Toxitom
Hallo Michael,
aber wie füge ein Datum per SQL in Datumsfeld?
Ein Datum wird in SQL als String übergeben, und zwar im speziellen Format: Ich glaube: jjjj-mm-tt . Ob die anderen Formate auch funktionieren, weis ich nicht genau. Sicher aber: Du musst Sie als String übergeben, das Feld ist aber dennoch ein Date-Feld. Insofern müsste dein Langstring wie folgt heissen:
Code: Alles auswählen
Datum=Date
query= "INSERT INTO ""tb1"" (""mzMNr"",""mzNkVor"",""mzDat"") values ("+mNr+","+mNkVor+",'"+datum+"')"
Also: mit einfachen Hochzeichen maskiert! Das geht übrigens bei allen Werten, insofern nutze ich gerne einen Array mit Daten und verbinde mit Join:
Code: Alles auswählen
Datum=Date
query= "INSERT INTO ""tb1"" (""mzMNr"",""mzNkVor"",""mzDat"") values ('" & Join(MeinDatenArray(), "', '") & "')"
Gerade bei sehr viel Feldern sehr bequem
Gruss
Thomas
@ Peter: Die doppelten Anführungszeichen sind bei der HSQLDB zwingend notwendig (anderenfalls werden alle Buchstaben in Großbuchstaben umgewandelt!) , bei anderen DB-Engines optional!
Verfasst: Do, 06.07.2006 15:22
von ykcim
:pmoegenb
Es handelt sich um eine HSQL-Datenbank. Und dort sind die Hochkommas in Basic auch nötig! Und durch den Doppelpunkt bei den Werten wird auch wird der Befehl gleich abgebrochen.
Wenn man das Datum mal wegläßt geht es nur so:
Code: Alles auswählen
query= "INSERT INTO ""tbMonatlicheZahlung"" (""mzMNr"",""mzNkVor"") values ("+mNr+","+mNkVor+")"
mfg
Michael
[/quote]
Verfasst: Do, 06.07.2006 15:43
von ykcim
:Toxitom
Hallo Thomas,
in meinen dritten Versuch ist das Datum mit Hochkommas maskiert und es geht nicht.
Die Ursache ist aber das Format. Bei HSQL muß es wirklich jjjj-mm-tt sein!
Bei allen anderen Formaten kommt ein Fehler oder es werden falsche Zahlen eingetragen!
Und date spuckt das Datum in Abhängigkeit der Betriebsystemeinstellungen raus.
Code: Alles auswählen
datu=date
msgbox date
datum=mid(datu,7,4)+"-"+mid(datu,4,2)+"-"+mid(datu,1,2)
query= "INSERT INTO ""tb1"" (""mzMNr"",""mzNkVor"",""mzDat"")
values ("+mNr+","+mNkVor+",'"+datum+"')"
mfg
Michael
Verfasst: Do, 06.07.2006 17:01
von Toxitom
Hey Michael,
Bei HSQL muß es wirklich jjjj-mm-tt sein!
Nicht HSQL - ist SQL typisch! Bei allen anderen erst recht (bsp MySQL)
Im übrigen baue ich meinen Datumsstring anders:
Code: Alles auswählen
datum=year(datu)+"-"+ format(month(datu),"00")+"-"+format(day(datu), "00")
Bin mir nämlich nicht sicher, ob deine Variante bei einstelligen Werten nicht versagt
Gruss
Thomas
Verfasst: Fr, 07.07.2006 11:07
von ykcim
Hi,
Nicht HSQL - ist SQL typisch! Bei allen anderen erst recht (bsp MySQL)
Jein, bei dem meisten läßt es sich abghängig von Sprache einstellen.
Das sollte bei OO gerade mit der eigenen HSQL-Datenbank auch so sein.
So ist die Funktion date sowohl in deutsch wie in englisch nicht direkt mit HSQL zu verwenden. Wohl aber mit ODBC, JDBC, Access und Dbase.
(Mysql habe ich noch nicht probiert).
mfg
Michael
PS.
Bin mir nämlich nicht sicher, ob deine Variante bei einstelligen Werten nicht versagt
Date erzeugt nur zweistellige Werte.
Verfasst: Mo, 17.07.2006 20:44
von Bratmatzen
Hallo,
hab mal euren Code (den ich übrigens überaus hilfreich fand

) ausprobiert. Mir ist aufgefallen das OOO Basic auch wenn
datum als string formatiert ist das zusammensetzen als einen Rechenschritt interpretiert. Zur korrekten übergabe des Datums muss die ganze Formatierung noch in Anführungsstrichen stehen. Hier mein Code:
Code: Alles auswählen
datu=date
datum = ""+year(datu)+"-"+ format(month(datu),"00")+"-"+format(day(datu), "00")+""
query= "INSERT INTO ""tb1"" (""mzMNr"",""mzNkVor"",""mzDat"")
values ("+mNr+","+mNkVor+",'"+datum+"')"
Gruß Matze