Error "You must read the column first!" after some time running

Hello, after a while i get this error. My hardware setup is a Arduino DUE and Ethernet shield and i use Mysql Connector to get_columns values from Db. (cur_mem1->get_columns())
Below you can see the code:




///// READ THES ROWS FROM DB /////
void readAndBroadcastData() {

  // read from the database every loopDelay ms
  if (millis() > syncTimer) {
    // connect to database if not connected
    if (!conn.connected()) {
      Ethernet.begin(mac_addr, ip);
      Serial.println("Connecting...");
      delay(50);
      if (!conn.connect(server_addr, 3306, user, password)) {
        Serial.println("Connection failed.");

        connCounter = connCounter + 1;
        Serial.print("connCounter: ");
        Serial.println(connCounter);

        delay(50);
        conn.close();
        return;
      }
    }


    MySQL_Cursor* cur_mem = new MySQL_Cursor(&conn);
    MySQL_Cursor* cur_mem1 = new MySQL_Cursor(&conn);
    //MySQL_Cursor *cur_mem_upd = new MySQL_Cursor(&conn);
    //char query[180];

    syncTimer = millis() + loopDelay;

    sprintf(query, QUERY_READ, dbName_control, room_name_control);

    if (conn.connected()) {
      cur_mem1->execute(query);

      connCounter = 0;
      //checkRoom = true;
    } else {
      Serial.println("Connection failed.");
      delay(50);
      delete cur_mem1;
      conn.close();
      return;
    }

    column_names* cols = cur_mem1->get_columns();


    // Read the rows from DB
    // Broadcast all data read
    row_values* row1 = NULL;
    do {
      row1 = cur_mem1->get_next_row();

      if (row1 != NULL) {

        ////////Client 1////////
        char* mTableCentralComp = row1->values[1];
        if (strcmp(mTableCentralComp, "1") == 0) {
          cl1[0] = "1";
          statusChange1[0] = 1;
        } else if (strcmp(mTableCentralComp, "0") == 0) {
          cl1[0] = "0";
          statusChange1[0] = 0;
        }

        char* secretPassage = row1->values[2];
        if (strcmp(secretPassage, "1") == 0) {
          cl2[0] = "1";
          statusChange2[0] = 1;
        } else if (strcmp(secretPassage, "0") == 0) {
          cl2[0] = "0";
          statusChange2[0] = 0;
        }

        char* magicLamp = row1->values[3];
        if (strcmp(magicLamp, "1") == 0) {
          cl3[0] = "1";
          statusChange3[0] = 1;
        } else if (strcmp(magicLamp, "0") == 0) {
          cl3[0] = "0";
          statusChange3[0] = 0;
        }

        char* magicCarpet = row1->values[4];
        if (strcmp(magicCarpet, "1") == 0) {
          cl3[1] = "1";
          statusChange3[1] = 1;
        } else if (strcmp(magicCarpet, "0") == 0) {
          cl3[1] = "0";
          statusChange3[1] = 0;
        }

        char* first_chest = row1->values[5];
        if (strcmp(first_chest, "1") == 0) {
          cl2[1] = "1";
          statusChange2[1] = 1;
        } else if (strcmp(first_chest, "0") == 0) {
          cl2[1] = "0";
          statusChange2[1] = 0;
        }

        char* second_chest = row1->values[6];
        if (strcmp(second_chest, "1") == 0) {
          cl3[2] = "1";
          statusChange3[2] = 1;
          cl2[2] = "1";
          statusChange2[2] = 1;
          cl4[1] = "1";
          statusChange4[2] = 1;
        } else if (strcmp(second_chest, "0") == 0 && chest2Bp == false) {
          cl2[2] = "0";
          statusChange2[2] = 0;
        }

        char* stairsComp = row1->values[7];
        if (strcmp(stairsComp, "1") == 0) {
          cl4[0] = "1";
          statusChange4[0] = 1;
        } else if (strcmp(stairsComp, "0") == 0) {
          cl4[0] = "0";
          statusChange4[0] = 0;
        }

        char* third_chest = row1->values[8];
        if (strcmp(third_chest, "1") == 0) {
          cl2[3] = "1";
          statusChange2[3] = 1;
        } else if (strcmp(third_chest, "0") == 0) {
          cl2[3] = "0";
          statusChange2[3] = 0;
        }

        char* risingColumn = row1->values[9];
        if (strcmp(risingColumn, "1") == 0) {
          cl5[0] = "1";
          statusChange5[0] = 1;
        } else if (strcmp(risingColumn, "0") == 0) {
          cl5[0] = "0";
          statusChange5[0] = 0;
        }

        char* secretPassage2 = row1->values[10];
        if (strcmp(secretPassage2, "1") == 0) {
          cl5[1] = "1";
          statusChange5[1] = 1;
        } else if (strcmp(secretPassage2, "0") == 0) {
          cl5[1] = "0";
          statusChange5[1] = 0;
        }

        char* bigDrawer = row1->values[11];
        if (strcmp(bigDrawer, "1") == 0) {
          cl6[0] = "1";
          statusChange6[0] = 1;
        } else if (strcmp(bigDrawer, "0") == 0) {
          cl6[0] = "0";
          statusChange6[0] = 0;
        }

        char* risingComp = row1->values[12];
        if (strcmp(risingComp, "1") == 0) {
          cl7[0] = "1";
          statusChange7[0] = 1;
        } else if (strcmp(risingComp, "0") == 0) {
          cl7[0] = "0";
          statusChange7[0] = 0;
        }

        char* keyRelease = row1->values[13];
        if (strcmp(keyRelease, "1") == 0) {
          cl3[3] = "1";
          statusChange3[3] = 1;
        } else if (strcmp(keyRelease, "0") == 0) {
          cl3[3] = "0";
          statusChange3[3] = 0;
        }

        char* exitDoor = row1->values[14];
        if (strcmp(exitDoor, "1") == 0) {
          cl1[1] = "1";
          statusChange1[1] = 1;

        } else if (strcmp(exitDoor, "0") == 0) {
          cl1[1] = "0";
          statusChange1[1] = 0;
        }


        char* reset_btn = row1->values[15];
        if (strcmp(reset_btn, "1") == 0 && checkRst == false) {
          rst = "1";
          checkRst = true;
          checkActiveRst = true;
          cl2[4] = "0";
          cl3[4] = "0";
          cl2[2] = "0";
          cl4[1] = "0";
          chest2 = "0";
        } else if (strcmp(reset_btn, "0") == 0 && checkRst == true) {
          rst = "0";
          checkRst = false;
          //checkActiveRst  = true;
        }


        char* start = row1->values[17];
        if (strcmp(start, "1") == 0 && checkAct == false && rst == "0") {
          activeSt = "1";
          checkActiveRst = true;
          checkAct = true;
          //Serial.println("Start!");
        } else if (strcmp(start, "0") == 0 && checkAct == true) {
          activeSt = "0";
          checkAct = false;
          checkActDb = false;
          checkActiveRst = true;
        }


        //        char* test = row1->values[19];
        //        if (strcmp(test, "1") == 0 && checkTest == false) {
        //          checkTest = true;
        //          testMillis = currentMillis;
        //          activeSt = "1";
        //          checkActiveRst = true;
        //          Serial.println("Test Mode");
        //        } else if (strcmp(test, "0") == 0) {
        //          checkTest = false;
        //        }


   

        statusChange();
        
        //cur_mem1->free_row_buffer();

      }

    } while (row1 != NULL);

    delete cur_mem1;
    delete cur_mem;

    //delete cur_mem_upd;
  }
}

//// END OF READ COLUMNS ////

What could be the issue?

Any help woulb be much appreciated!

1 Like

I suspect that it will be very helpful if you post your code so people can check it. If you think that it is too big, write a small program that exhibits the behaviour.

I can't help you further as I have no experience with Mysql connector.

I can think of a lot of reasons but without knowing what you have I will not spend the time. Post your code.

i attached a part of the code above

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.