Oui j'ai eu encore des soucis, ça fonctionnait bien avec la première requête LAST_INSERT_ID(), mais avec les suivantes ça buguait et je n'ai pas trouvé pourquoi.
Donc j'ai repris MAX(), et là tout fonctionne correctement, mais je voulais créer une fonction pour alléger mon code et je butte sur une déclaration de type de parametre.
Voici le code sans fonction:
long monId = 0;
long monId2 = 0;
long monId3 = 0;
long monId4 = 0;
time_t epochTime = timeClient.getEpochTime();
struct tm *ptm = gmtime ((time_t *)&epochTime);
sprintf(insert_Sql_1, "INSERT INTO u984373661_prem_db.SensorData (Capteur,Location,Temp,Humid,Press) VALUES ('BME280','Extérieur',%s,%s,%s)", tab_var[0], tab_var[1], tab_var[2]);
sprintf(insert_Sql_2, "INSERT INTO u984373661_prem_db.SensorData (Capteur,Location,Temp,Humid,Press) VALUES ('DHT11','Intérieur',%s,%s,'0')", tab_var[3], tab_var[4]);
sprintf(insert_Sql_3, "INSERT INTO u984373661_prem_db.SensorData (Capteur,Location,Temp,Humid,Press) VALUES ('SHT31','Cave',%s,%s,'0')", tab_var[5], tab_var[6]);
sprintf(insert_Sql_4, "INSERT INTO u984373661_prem_db.SensDate (annee,mois,jour,heure,minute) VALUES (%d,%d,%d,%d,%d)", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, timeClient.getHours(), timeClient.getMinutes());
cursor->execute(insert_Sql_1);
cursor->execute(insert_Sql_2);
cursor->execute(insert_Sql_3);
cursor->execute(insert_Sql_4);
sprintf(insert_Sql_8, "SELECT id_date FROM u984373661_prem_db.SensDate WHERE id_date= (select max(id_date) from u984373661_prem_db.SensDate)");
//-----------------------------------
row_values *row = NULL;
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
cur_mem->execute(insert_Sql_8);
column_names *columns = cur_mem->get_columns();
do {
row = cur_mem->get_next_row();
if (row != NULL) {
monId = atol(row->values[0]);
}
} while (row != NULL);
monId=recup_id(insert_Sql_8
Serial.println(recup_id(insert_Sql_8));
//--------------------------------------------------
sprintf(insert_Sql_9, "INSERT INTO u984373661_prem_db.SensExt (temp_ext,humid_ext,press_ext,id_date,id_lieu) VALUES (%s,%s,%s,%d,'1')", tab_var[0], tab_var[1], tab_var[2], monId);
sprintf(insert_Sql_10, "INSERT INTO u984373661_prem_db.SensInt (temp_int,humid_int,id_date,id_lieu) VALUES (%s,%s,%d,'2')", tab_var[3], tab_var[4], monId);
sprintf(insert_Sql_11, "INSERT INTO u984373661_prem_db.SensCave (temp_cave,humid_cave,id_date,id_lieu) VALUES (%s,%s,%d,'3')", tab_var[5], tab_var[6], monId);
cursor->execute(insert_Sql_9);
sprintf(insert_Sql_12, "SELECT id_ext FROM u984373661_prem_db.SensExt WHERE id_ext= (select max(id_ext) from u984373661_prem_db.SensExt)");
//------------------------------------------------
row = NULL;
MySQL_Cursor *cur_mem1 = new MySQL_Cursor(&conn);
cur_mem1->execute(insert_Sql_12);
columns = cur_mem1->get_columns();
do {
row = cur_mem1->get_next_row();
if (row != NULL) {
monId2 = atol(row->values[0]);
}
} while (row != NULL);
Serial.println(monId2);
//-------------------------------------------------------------
cursor->execute(insert_Sql_10);
sprintf(insert_Sql_13, "SELECT id_int FROM u984373661_prem_db.SensInt WHERE id_int= (select max(id_int) from u984373661_prem_db.SensInt)");
//--------------------------------------------------------------------
row = NULL;
MySQL_Cursor *cur_mem2 = new MySQL_Cursor(&conn);
cur_mem2->execute(insert_Sql_13);
columns = cur_mem2->get_columns();
do {
row = cur_mem2->get_next_row();
if (row != NULL) {
monId3 = atol(row->values[0]);
}
} while (row != NULL);
Serial.println(monId3);
//------------------------------------------------
cursor->execute(insert_Sql_11);
sprintf(insert_Sql_14, "SELECT id_cave FROM u984373661_prem_db.SensCave WHERE id_cave= (select max(id_cave) from u984373661_prem_db.SensCave)");
//------------------------------------------------------
row = NULL;
MySQL_Cursor *cur_mem3 = new MySQL_Cursor(&conn);
cur_mem3->execute(insert_Sql_14);
columns = cur_mem3->get_columns();
do {
row = cur_mem3->get_next_row();
if (row != NULL) {
monId4 = atol(row->values[0]);
}
} while (row != NULL);
Serial.println(monId4);
//----------------------------------------------------------
sprintf(insert_Sql_15, "INSERT INTO u984373661_prem_db.ManagementTHP (id_ext,id_int,id_cave) VALUES (%d,%d,%d)", monId2, monId3, monId4);
cursor->execute(insert_Sql_15);
j'ai définis la fonction comme ça, mais je n'arrive pas a trouver le bon type pour mon paramètre pour la faire fonctionner voir "type" dans le paramètre, j'ai essayer long, char char[], mais rien ne fonctionne :
long recup_id("type" requeteSQL) {
long monId = 0;
row_values *row = NULL;
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
cur_mem->execute(requeteSQL);
column_names *columns = cur_mem->get_columns();
do {
row = cur_mem->get_next_row();
if (row != NULL) {
monId = atol(row->values[0]);
}
} while (row != NULL);
return(monId);
}