Javascript-Hilfe / Datenbankabfrage

  • Moin zusammen,


    ich komm grade mit meinen sehr begrenzten Javascript-Fähigkeiten an meine Grenzen...


    Ich versuche mit dem js-Controller eine Datenbankabfrage.

    Das klappt auch wunderbar soweit. Nun würde ich gerne in der SQL-Anweisung einen Datenpunkt benutzen... und das klappt jetzt nicht mehr...

    Hier mal der vollständige Code:

    Code
    sendTo('sql.0', 'query', 'SELECT * FROM ioBroker.PEPMicha WHERE KW = "0_userdata.0.Dienstplan.KW" ORDER BY KW', function(result) {
    console.log('Rows: ' + JSON.stringify(result.result));
    setState('0_userdata.0.Dienstplan.Micha', JSON.stringify(result.result));
    });

    der Bereich WHERE KW = "0_userdata.0.Dienstplan.KW" funktioniert nicht.


    Original werden Datenpunkte ja in Hochkommas eingefügt '0_userdata.0.Dienstplan.KW' was aber logischerweise nicht klappt, da die ganze SELECT-Anweisung ja in Hochkommas steht.


    Meine Variante mit den Anführungszeichen (in PHP würde es so klappen ^^) funktioniert leider nicht. Es kommt zwar kein Syntax-Error, aber es tut auch einfach nicht was es soll.


    Nehme ich diesen Verweis auf den Datenpunkt raus und setzt testweise eine Zahl direkt in den Code dann klappt es... WHERE KW = 17


    Jemand ne Idee, ob ich die Hochkommas irgendwie escapen muss oder wie das in Javascript richtig verschachtelt werden muss?

    Mein Plan B wäre, den Datenpubnkt vorher in eine Variable einlesen zu lassen und dann in der SQL-Anweisung zu benutzen, dazu reichen aber meine js Kenntnisse nicht aus...

  • Funktionieren die Strings nicht auch in double quotes? Du könntest folgendes versuchen:

    Code
    sendTo('sql.0', 'query', "SELECT * FROM ioBroker.PEPMicha WHERE KW = '0_userdata.0.Dienstplan.KW' ORDER BY KW", function(result)

    Notfalls noch escapen.

    Ich weiß momentan nicht, was Datenpunkte sind (0_userdata.0.Diensplan.KW). Dies ist vermutlich eine Hierarchie-Notation in HomeMatic oder ioBroker. Davon kenne ich nur die Namen. Falls du weißt, wie du an den Wert im Datenpunkt kommst, sollte es einfach sein:

    Code
    sendTo('sql.0', 'query', 'SELECT * FROM ioBroker.PEPMicha WHERE KW = ' + <Zugriff auf den Datenpunktwert> + ' ORDER BY KW', function(result) 

    Mit einer Variablen ginge es nicht anders. Die Kernfrage ist also vermutlich: "Wie kommst du an den Wert des Datenpunktes?"

  • Andersrum funktioniert es leider auch nicht.

    "SELECT * FROM ioBroker.PEPMicha WHERE KW = '0_userdata.0.Dienstplan.KW' ORDER BY KW" produziert genauso eine leere Zeichfolge.

    wobei "SELECT * FROM ioBroker.PEPMicha WHERE KW = 17 ORDER BY KW" wieder funktioniert.


    Vielleicht liegt es wirklich daran, das die Datenpunkte anders ausgelesen werden müssen....


    Und ja, Datenpunkte sind praktisch die Variablen, die ioBroker aus Geräten ausliest oder von verschiedenen Adaptern bekommt, und die zur weiteren Verarbeitung zur Verfügung stehen.