Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. SQL.Adpter: Insert-Befehle innerhalb von 40ms

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    SQL.Adpter: Insert-Befehle innerhalb von 40ms

    This topic has been deleted. Only users with topic management privileges can see it.
    • OliverIO
      OliverIO @haus-automatisierung last edited by

      @haus-automatisierung
      tja wenn wir nur wüssten, was tatsächlich bei der datenbank ankommt. das wissen wir leider ja immer noch nicht.
      aktuell wissen wir nur was vermeintlich abgesendet worden ist, bzw. eine fehlermeldung der datenbank, bei der der befehl gekürzt wurde

      1 Reply Last reply Reply Quote 1
      • haus-automatisierung
        haus-automatisierung Developer Most Active @OliverIO last edited by

        @oliverio sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

        tja wenn wir nur wüssten, was tatsächlich bei der datenbank ankommt. das wissen wir leider ja immer noch nicht.

        Dein Kommentar wurde ja auch erfolgreich ignoriert 🙂 Hier nochmal die Wiederholung:

        @oliverio sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

        ok, also der db meldet nicht den kompletten fehler.
        jetzt noch was bei der db tatsächlich ankommt.
        das kann man über das general query log aktivieren.
        da werden dann alle query requests reingeschrieben.
        https://mariadb.com/kb/en/general-query-log/

        Und hier findet man auf der Synology die Config: https://kb.synology.com/en-in/DSM/tutorial/Can_MariaDB_settings_be_customized_on_Synology_NAS

        N 1 Reply Last reply Reply Quote 0
        • N
          nettekov @haus-automatisierung last edited by nettekov

          Hallo Leute,

          ich habe euch nicht vergessen oder ignorier. ich kann z.Z. halt nicht jeden Tag hier weitermachen.
          Für mich ist die Situation auch nicht leicht und könnte meine Zeit besser verwenden.
          Aber ich finde , das ist ein geiles Forum, der mir von zwei Probleme gelöst hat und möchte gerne auch mal was zurückgeben, was ich denke das ich das auch kann.
          Daher bitte ich euch , um etwas Geduld.
          Wir werden das schaffen!

          @OliverIO : Deinen Ratschlag werde noch beflogen, ich hatte mitte der Woche schon mal mit Wireshark ein Versuche aufgezeichnet.

          1. Ein fehlerhafte Protokoll vom SQL.Adapter zum MySQL -Server:
            Hier sieht man , das trotz vollständig übertragen INSERT-Befehl, der MySQL-Server eine Syntax-Fehlermeldung ausgibt.
            Insert-Befehl_SQL-Adapter_ZUM_MYSQL_Server.png

          2. Dann bin ich hingegangen und haben diesen Befehl kopiert und in einem anderen SQL-Client ausgeführt und wieder mit Wireshark aufgezeichnet.
            Hier ist der selber INSERT-Befehl durchgegangen und es gab keine Fehler:
            90768a0b-192a-4534-a0ad-7a96d933663a-image.png

          Soo. die mariadb und die mysqldb werden jetzt auch geloggt.
          Hier sind schon die ersten Ergebnisse:
          logmariab.png

          Ich versuche morgen mal bescheid zu geben, was das Ergebnis ist.

          Gruss Nettekov

          OliverIO 1 Reply Last reply Reply Quote 0
          • OliverIO
            OliverIO @nettekov last edited by

            @nettekov

            setze deine energie erst mal nicht so sehr in wireshark. das hat seine eigenen untiefen.
            nutze lieber ersteinmal die Möglichkeiten der DB

            N 3 Replies Last reply Reply Quote 0
            • N
              nettekov @OliverIO last edited by nettekov

              @oliverio Anbei die erste Fehlermeldung:
              iobroker_log.png
              und das entsprechende Log: (Die 3 Quittungen kommen von den 3 oberen Queries)
              quit_sql_ada.png
              Logfiel_2023_02_10.png

              Der INSERT-Befehl kommt sauber an.

              Und jetzt den selben INSERT-Befehl nochmal über einen anderen SQL-Client geschickt, dann ist alles OK:
              Selbe_INSERT_ÜBER 172_27_200_100.png

              Gruss Nettekov

              1 Reply Last reply Reply Quote 0
              • N
                nettekov @OliverIO last edited by nettekov

                @oliverio Da gebe ich dir Recht, aber Wireshark war schneller aufzubauen

                1 Reply Last reply Reply Quote 0
                • N
                  nettekov @OliverIO last edited by nettekov

                  @oliverio said in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                  setze deine energie erst mal nicht so sehr in wireshark. das hat seine eigenen untiefen.
                  nutze lieber ersteinmal die Möglichkeiten der DB

                  Da gebe ich dir Recht, aber Wireshark war schneller aufzubauen

                  1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO last edited by

                    @nettekov

                    ok also auch hier sehen die sqls gut aus.
                    dann noch das db error log prüfen

                    https://mariadb.com/kb/en/error-log/

                    also ich sehe da kein syntax error
                    und wenn du die über den client ausführst geht es ja auch.
                    aber warum meldet die db dann einen syntax error?
                    auch die möglichkeit eines eines zeichens, welches im log oder sonst nicht richtig sichtbar ist kann man ausschließen, da es ja nur zahlen sind die da enthalten sind.

                    kannst du da mal die kompatibilitäts einstellungen prüfen ob da was besonderes ist?
                    https://mariadb.com/kb/en/sql-mode/
                    nicht das er da durch eine einstellung doch nicht das mehrfache insert kennt.

                    als workaround könntest du auch den counter deaktivieren, wenn du ihn nicht wirklich brauchst.

                    findest du irgendwo in den logs inserts, bei denen das insert mit mehreren values funktioniert und keinen fehler erzeugt?

                    N 1 Reply Last reply Reply Quote 0
                    • N
                      nettekov @OliverIO last edited by

                      @oliverio
                      anbei die SQL-Mode:

                      STRICT_TRANS_TABLES,
                      ERROR_FOR_DIVISION_BY_ZERO,
                      NO_AUTO_CREATE_USER,
                      NO_ENGINE_SUBSTITUTION
                      

                      Ich glaube nicht das es die DB-Server sind, bzw. erstmals nicht, obwohl es eigentlich Wahrscheinlicher ist, bzw. sonst wäre draußen viel mehr Probleme. Da gehe ich auf jeden fall mit
                      Aber sowohl der MariaDB Server auf der Synology , als auch der MySql auf meinem lokalen PC haben die selben Problematiken und in beiden Fällen stimmt die Syntax (sowohl in den Logs , als auch in Wireshark), bzw wenn ich Sie separat über eine anderen SQL-Client schicke , gehen Diese Durch.

                      1 Reply Last reply Reply Quote 0
                      • N
                        nettekov last edited by nettekov

                        Hallo zusammen,

                        bevor ich weitermachen, wollte ich kurz nochmal die Version checken, nicht das wir doch durch einer veralten Version nach eine Problem suchen, was eigentlich nicht gibt, bzw. ggf. schon durch eine neuere Version gelöst ist.

                        IObroker-Adapter:
                        version1.png

                        SQL-Adapter mit zweiter Version v1.16.1:
                        version2.png

                        IOBroker node:
                        version 3.png

                        MariaDB auf Synology-NAS:
                        version4.png

                        MySQL Server auf lokalen PC(Nur zur Testzwecken: ist veralte von XAMPP, kann ich aber ggf aktualisieren)
                        version5.png

                        Sollte ich eine wichtige Version vergessen haben, sagt kurz Bescheid.

                        Gruss Nettekov

                        Marc Berg 1 Reply Last reply Reply Quote 0
                        • N
                          nettekov last edited by nettekov

                          @haus-automatisierung
                          @OliverIO

                          Hallo zusammen,

                          ich glaube ich habe was gefunden.

                          Das Problem bei mir, das manch ein Insert Befehl von SQL-Server als Syntax-Error angemahnt wird, ist, wenn mehrere Insert-Befehle
                          in einer Transaktion gepackt und weggeschickt werden.
                          Schickt man jeden INSERT-Befehl in einer separaten Transaktion, dann werden Diese dann auch vom SQL-Server akzeptiert, auch wenn ich die Datensätze auf 8 erhöhe.
                          Wenn zwei oder mehrere Insert-Anweisung in einer Transaktion über das node-Module 'mysql' geschickt werden, dann wird anscheinend (und das ganz vorsichtig gesagt) das Protokoll nicht so eingestellt, das es für mehrere SQL-Statements nicht geeignet ist.(Dies ist aber nur eine Mutmaßung).
                          Schickt man die selben angemahnten SQL-Sequenzen unverändert über eine anderen SQL-Client, dann wird die komplette SQL-Sequenz auch in einer Transaktion an den SQL-Server geschickt und Diese werden dann akzeptiert.
                          Bei myphpadmin wird die SQl-Sequenz teilweise gesplittet in mehreren Transaktionen,
                          Bei Heidi-SQL werden Diese generell in einzelne Transaktionen gesplittet.

                          Aber nochmal, das habe ich erstmal nur bei mir festgestellt.

                          ich würde jetzt versuchen, hierfür eine JS-Funktion zu schreiben, damit das Datenloggen bei mir wieder lauffähig wird.
                          Kann sein , das ich da ggf. Euch nochmal was fragen muss.

                          Gruss nettekov

                          Hier die Protokolle:
                          Angemahntes SQL-Sequenz im IOBroker-Log:
                          test1.png

                          Cannot insert INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (5, 1676135872618, 53.32),(5, 1676138387812, 53),(5, 1676138387812, 53),(5, 1676138670902, 52.95);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676138387812, 53, 1, 2, 0),(5, 1676138670902, 52.95, 1, 2, 0);: Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676...' at line 1 (id: LUFTFEUCHTE@William_Martin)
                          

                          Inhalt von SQL_TEST2.js (kopiertes angemahntes SQL-Sequenz vom IOBroker-Protokoll):

                          ar mysql      = require('mysql');
                          var connection = mysql.createConnection({
                            host     : '172.27.110.30',
                            user     : 'iobroker',
                            password : '*********',
                            database : 'iobroker',
                            port     : 3307
                          });
                          
                          
                          connection.connect(function(err) {
                            if (err) throw err;
                            console.log("Connected!");
                            var sql = " INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (5, 1676135872618, 53.32),(5, 1676138387812, 53),(5, 1676138387812, 53),(5, 1676138670902, 52.95);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676138387812, 53, 1, 2, 0),(5, 1676138670902, 52.95, 1, 2, 0);";
                            connection.query(sql, function (err, result) {
                              if (err) throw err;
                              console.log("1 record inserted");
                            });
                          });
                          

                          Ergebnis von node SQL_TEST2.js--> Transaktion wird erwartender Weise angemahnt

                          root@server03:~/test$ node SQL_TEST2.js
                          Connected!
                          /home/root/test/node_modules/mysql/lib/protocol/Parser.js:437
                                throw err; // Rethrow non-MySQL errors
                                ^
                          
                          Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676...' at line 1
                              at Query.Sequence._packetToError (/home/root/test/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
                              at Query.ErrorPacket (/home/root/test/node_modules/mysql/lib/protocol/sequences/Query.js:79:18)
                              at Protocol._parsePacket (/home/root/test/node_modules/mysql/lib/protocol/Protocol.js:291:23)
                              at Parser._parsePacket (/home/root/test/node_modules/mysql/lib/protocol/Parser.js:433:10)
                              at Parser.write (/home/root/test/node_modules/mysql/lib/protocol/Parser.js:43:10)
                              at Protocol.write (/home/root/test/node_modules/mysql/lib/protocol/Protocol.js:38:16)
                              at Socket.<anonymous> (/home/root/test/node_modules/mysql/lib/Connection.js:88:28)
                              at Socket.<anonymous> (/home/root/test/node_modules/mysql/lib/Connection.js:526:10)
                              at Socket.emit (events.js:400:28)
                              at addChunk (internal/streams/readable.js:293:12)
                              --------------------
                              at Protocol._enqueue (/home/root/test/node_modules/mysql/lib/protocol/Protocol.js:144:48)
                              at Connection.query (/home/root/test/node_modules/mysql/lib/Connection.js:198:25)
                              at Handshake.<anonymous> (/home/root/test/SQL_TEST2.js:15:14)
                              at Handshake.<anonymous> (/home/root/test/node_modules/mysql/lib/Connection.js:526:10)
                              at Handshake._callback (/home/root/test/node_modules/mysql/lib/Connection.js:488:16)
                              at Handshake.Sequence.end (/home/root/test/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
                              at Handshake.Sequence.OkPacket (/home/root/test/node_modules/mysql/lib/protocol/sequences/Sequence.js:92:8)
                              at Protocol._parsePacket (/home/root/test/node_modules/mysql/lib/protocol/Protocol.js:291:23)
                              at Parser._parsePacket (/home/root/test/node_modules/mysql/lib/protocol/Parser.js:433:10)
                              at Parser.write (/home/root/test/node_modules/mysql/lib/protocol/Parser.js:43:10) {
                            code: 'ER_PARSE_ERROR',
                            errno: 1064,
                            sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676...' at line 1",
                            sqlState: '42000',
                            index: 0,
                            sql: ' INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (5, 1676135872618, 53.32),(5, 1676138387812, 53),(5, 1676138387812, 53),(5, 1676138670902, 52.95);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676138387812, 53, 1, 2, 0),(5, 1676138670902, 52.95, 1, 2, 0);'
                          }
                          

                          Inhalt von SQL_TEST5.js (kopiertes angemahntes SQL-Sequenz wird in zwei Transaktionen aufgeteilt):

                          var mysql      = require('mysql');
                          var connection = mysql.createConnection({
                            host     : '172.27.110.30',
                            user     : 'iobroker',
                            password : '***************',
                            database : 'iobroker',
                            port     : 3307
                          });
                          
                          
                          connection.connect(function(err) {
                            if (err) throw err;
                            console.log("Connected!");
                            var sql1 = " INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (5, 1676135872618, 53.32),(5, 1676138387812, 53),(5, 1676138387812, 53),(5, 1676138670902, 52.95)";
                            connection.query(sql1, function (err, result) {
                              if (err) throw err;
                              console.log("1 record inserted");
                            });
                              var sql2 = "INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (5, 1676138387812, 53, 1, 2, 0),(5, 1676138670902, 52.95, 1, 2, 0);";
                            connection.query(sql2, function (err, result) {
                              if (err) throw err;
                              console.log("1 record inserted");
                            });
                          });
                          
                          

                          Ergebnis von node SQL_TEST5.js--> Transaktion wird akzeptiert

                          root@server03:~/test$ vi SQL_TEST5.js
                          root@server03:~/test$ node SQL_TEST5.js
                          Connected!
                          1 record inserted
                          1 record inserted
                          

                          Inhalt von SQL_TEST6.js (kopiertes angemahntes SQL-Sequenz wird in zwei Transaktionen aufgeteilt und jeder INSERT-Befehl wurden die Datensätze auf acht erhöht):

                          var mysql      = require('mysql');
                          var connection = mysql.createConnection({
                            host     : '172.27.110.30',
                            user     : 'iobroker',
                            password : '*****************',
                            database : 'iobroker',
                            port     : 3307
                          });
                          
                          
                          connection.connect(function(err) {
                            if (err) throw err;
                            console.log("Connected!");
                            var sql1 = " INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (1235, 1676135872618, 53.32),(1235, 1676138387812, 53),(1235, 1676138387812, 53),(1235, 1676138670902, 52.95),(1236, 1676135872618, 53.32),(1236, 1676138387812, 53),(1236, 1676138387812, 53),(1235, 1676138670902, 52.95);";
                            connection.query(sql1, function (err, result) {
                              if (err) throw err;
                              console.log("1 record inserted");
                            });
                              var sql2 = "INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (1235, 1676138387812, 53, 1, 2, 0),(1235, 1676138670902, 52.95, 1, 2, 0),(1236, 1676138387812, 53, 1, 2, 0),(1236, 1676138670902, 52.95, 1, 2, 0),(1237, 1676138387812, 53, 1, 2, 0),(1237, 1676138670902, 52.95, 1, 2, 0),(1238, 1676138387812, 53, 1, 2, 0),(1238, 1676138670902, 52.95, 1, 2, 0);";
                            connection.query(sql2, function (err, result) {
                              if (err) throw err;
                              console.log("1 record inserted");
                            });
                          });
                          

                          Ergebnis von node SQL_TEST6.js--> Transaktionen werden akzeptiert

                          root@server03:~/test$ vi SQL_TEST6.js
                          root@server03:~/test$ node SQL_TEST6.js
                          Connected!
                          1 record inserted
                          1 record inserted
                          

                          Angemahntes SQL-Sequenz im IOBroker-Log:
                          test3.png

                          	Cannot insert INSERT INTO `iobroker`.ts_counter (id, ts, val) VALUES (47, 1676131245941, 8.04),(47, 1676133519887, 7.82);INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (47, 1676133519887, 7.82, 1, 2, 0),(47, 1676133530714, 7.87, 1, 2, 0);: Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO `iobroker`.ts_number (id, ts, val, ack, _from, q) VALUES (47, 167...' at line 1 (id: TEMPERATUR@AussenHaustuer)
                          

                          Ergebnis über anderen SQL-Client--> Transaktion wird akzeptiert
                          mobile.png
                          test4.png

                          1 Reply Last reply Reply Quote 0
                          • N
                            nettekov last edited by

                            @OliverIO
                            Hallo OliverIO,

                            In der main.js werden mit dieser Funktion die Datenlogs gesendet?

                            function _insertValueIntoDB(query, id, cb) {
                                adapter.log.debug(query);
                            
                                borrowClientFromPool((err, client) => {
                                    if (err) {
                                        returnClientToPool(client);
                                        adapter.log.error(err);
                                        cb && cb(); // BF asked (2021.12.14): may be return here err?
                                    } else {
                                        client.execute(query, (err /* , rows, fields */) => {
                                            returnClientToPool(client);
                                            if (err) {
                                                adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                            } else {
                                                checkRetention(id);
                                            }
                                            cb && cb(); // BF asked (2021.12.14): may be return here err?
                                        });
                                    }
                                });
                            }
                            

                            Gruss Nettekov

                            OliverIO 1 Reply Last reply Reply Quote 0
                            • Marc Berg
                              Marc Berg Most Active @nettekov last edited by Marc Berg

                              @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                              SQL-Adapter mit zweiter Version v1.16.1:
                              version2.png

                              IOBroker node:
                              version 3.png

                              So, wie es aussieht hast du es ja hier mit irgendwelchen Inkompatibilitäten zu tun. Darum verstehe ich nicht, warum nicht erstmal dieser Schiefstand der Adapter-Version sowie ein Update der Node Version angegangen wird?
                              An deiner Stelle würde ich den Adapter löschen und neu installieren sowie Node.js auf die empfohlene Version (16) bringen.

                              N 1 Reply Last reply Reply Quote 0
                              • N
                                nettekov @Marc Berg last edited by

                                @marc-berg Vielen dank für deine Antwort.

                                Weiß Du , wofür die V1.16.1 steht.
                                Bevor ich den SQL-Adapter , deinstalliere und wieder installiere, sollten wir erst wissen, wofür Diese Version steht.

                                Marc Berg 1 Reply Last reply Reply Quote 0
                                • N
                                  nettekov last edited by

                                  Hallo zusammen,

                                  ich habe in die '_insertValueIntoDB' Funktion einfach mal ein Log-Befehl eingebaut, der bei jedem Daten-Loggen das Query anzeigt.

                                  function _insertValueIntoDB(query, id, cb) {
                                      adapter.log.debug(query);
                                  
                                      borrowClientFromPool((err, client) => {
                                          if (err) {
                                              returnClientToPool(client);
                                              adapter.log.error(err);
                                              cb && cb(); // BF asked (2021.12.14): may be return here err?
                                          } else {
                                              client.execute(query, (err /* , rows, fields */) => {
                                                  returnClientToPool(client);
                                  
                                                  adapter.log.error(`Hallo Welt --> ${query}`); // Nettekov
                                                  
                                                 if (err) {
                                                      adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                                  } else {
                                                      checkRetention(id);
                                                  }
                                                  cb && cb(); // BF asked (2021.12.14): may be return here err?
                                              });
                                          }
                                      });
                                  }
                                  
                                  

                                  Wenn man jetzt im Protokollbereich von IOBroker nachschauen, sieht man , da die meine Datenlog' in der SQL-Transaktion nur ein SQl-Statement haben.
                                  Wenn zwei SQL-Statements in einer Transaktion auftauchen, dann kommt auch der Syntax-Error.

                                  iolog.png

                                  Gruss nettekov

                                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                                  • haus-automatisierung
                                    haus-automatisierung Developer Most Active @nettekov last edited by

                                    @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                                    Wenn zwei SQL-Statements in einer Transaktion auftauchen, dann kommt auch der Syntax-Error.

                                    Eventuell kann @apollon77 was dazu sagen?

                                    apollon77 1 Reply Last reply Reply Quote 0
                                    • Marc Berg
                                      Marc Berg Most Active @nettekov last edited by Marc Berg

                                      @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                                      @marc-berg Vielen dank für deine Antwort.

                                      Weiß Du , wofür die V1.16.1 steht.
                                      Bevor ich den SQL-Adapter , deinstalliere und wieder installiere, sollten wir erst wissen, wofür Diese Version steht.

                                      Ich weiß es nicht, vielleicht es nur ein Anzeigefehler. Genauso gut kann ein Update unvollständig durchgelaufen sein. Ich finde es aber verdächtig, und eine Neuinstallation eines Adapters ist keine Raketentechnologie.

                                      1 Reply Last reply Reply Quote 0
                                      • N
                                        nettekov last edited by nettekov

                                        Hallo zusammen,

                                        ich versuche es mit diesen Code-Schnipsel, das Problem provisorisch zu umgehen. Dient nur zu Testzwecken.

                                                         adapter.log.error(`Hallo Welt --> ${query}`);
                                        
                                                 var start=0;
                                                var ende=0;
                                                var schleife=true;
                                                var sub_query=query;
                                                do{
                                                        start=query.indexOf("INSERT",ende);
                                                        ende=query.indexOf(";INSERT",start);
                                                        if (ende<0){
                                                                ende=query.length ;
                                                                 schleife=false;
                                                        }
                                                        else{
                                                                ende++;
                                                                schleife=true;
                                                        }
                                                        sub_query=query.substring(start,ende);
                                                        client.execute(sub_query, (err /* , rows, fields */) => {
                                                                if (err) {
                                                                        adapter.log.error(`Cannot insert ${query}: ${err} (id: ${id})`);
                                                                } else {
                                                                checkRetention(id);
                                                                }
                                                                cb && cb(); // BF asked (2021.12.14): may be return here err?
                                                        });
                                        
                                        
                                                }while(schleife);
                                                returnClientToPool(client);
                                        
                                        

                                        (Achtung! Kopieren und Einsetzen auf eigene Gefahr! Dies ist nicht mit dem Entwickler abgesprochen und dient nur zur Testzwecken. Ich nehme keinerlei Gewähr!)

                                        Momentan sieht es gut aus, es gibt keine Fehlermeldung mehr, wenn zwei INSERT in einer Transaktion stehen, bzw die Werte werden auch gespeichert.
                                        Ergebnis.png

                                        Gruss nettekov

                                        1 Reply Last reply Reply Quote 0
                                        • OliverIO
                                          OliverIO @nettekov last edited by

                                          @nettekov sagte in SQL.Adpter: Insert-Befehle innerhalb von 40ms:

                                          In der main.js werden mit dieser Funktion die Datenlogs gesendet?

                                          sorry für die verspätung, aber ich glaube du hast es selbst schon herausgefunden.
                                          ja, das ist die funktion, welche für die inserts zuständig ist.
                                          mit client.execute wird der befehl ausgeführt und wenn ein fehler kommt, wird die query (so wie es der adapter erzeugt hat) ausgegeben + die db fehlermeldung + die betroffene id

                                          1 Reply Last reply Reply Quote 0
                                          • apollon77
                                            apollon77 @haus-automatisierung last edited by

                                            @haus-automatisierung Also Wenn da wirklich in einem SQL Statement vom Adapter zwei Queries gesendet werden zusammen dann muss ich schauen warum - weil ich entsinne mich das die SQL Lib das nicht kann .... aber da muss ich reinschauen. Github issue bitte anlegen

                                            haus-automatisierung 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            554
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            64
                                            2900
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo