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:
  • mzMNr mit mNr
    u.s.w.

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:
  • mzMNr mit mNr
    u.s.w.
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) :wink:

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 :wink: ) 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