Char Array + String

Estimados,

Tengo necesidad de agregar de colocar una variables en un array de char

 char INSERT_SQL[];
INSERT_SQL = 'INSERT INTO sql10237370.DATOS (HUMEDAD,TEMPERATURA,HUMEDADSUELO,EMISOR) VALUES ('+valores+')';

para los valores lo que hago es:

String valores = valores +hum;
  valores = valores + ',';
  valores = valores + temp;
  valores = valores + ',';
  valores = valores + humsuelo;
  valores = valores + ',';
 valores = valores + emisor;

Es evidente que no es correcto, pero no entiendo como se se puede agregar la variable valores en la variable insert_sql

desde ya muchas gracias a todos,
Saludos
juan

Declaras estas variables globales:

char INSERT_SQL[128] = "INSERT INTO sql10237370.DATOS (HUMEDAD,TEMPERATURA,HUMEDADSUELO,EMISOR) VALUES (";

char* insertionPoint = INSERT_SQL + 80; // Desde INSERT hasta el último ( deberían haber 80 caracteres

Y este sería el procedimiento final para insertar los valores:

sprintf(insertionPoint, "%s)", valores.c_str());

Y a partir de ahí ya te queda listo INSERT_SQL para la transacción a la BD.

PD: con sprintf puedes prescindir del uso de String ya que también se puede concatenar; aunque lidiar con float/double en esta función sí es más complicado...

No sera mejor usar snprintf o en este caso no se puede utilizar?

Gracias por las respuestas, les comento que las variables son del tipo :

double hum = 1;
  double temp = 10;
  double humsuelo= 15;
  String emisor = "Emisor";

Como sería??, se puede igual???
gracias!!!
saludos
Juan

Estimados, lo resolví directamente construyendo todo el string a mano y luego asinandolo al array
desde ya muchas gracias,
Saludos
juan

String valores = "INSERT INTO sql10237370.DATOS (HUMEDAD,TEMPERATURA,HUMEDADSUELO,EMISOR) VALUES (";
  valores = valores +hum;
  valores = valores + ',';
  valores = valores + temp;
  valores = valores + ',';
  valores = valores + humsuelo;
  valores = valores + ',';
  valores = valores +"'"+emisor+"')";
  Serial.println(valores);

  char INSERT_SQL[128] = " ";
  sprintf(INSERT_SQL,valores.c_str());

Tato84:
No sera mejor usar snprintf o en este caso no se puede utilizar?

Se puede, solo que si hay recortes en el texto no sería del todo "bonito".
En este caso, el límite de caracteres sería de 128 - 80.

jazpiroz:

double hum = 1;

double temp = 10;
 double humsuelo= 15;
 String emisor = "Emisor";





Como sería??, se puede igual???

Para efectos de sprintf, depende de cómo quieras presentar los datos numéricos. Puedes convertirlos a enteros, pero para presentarlos con decimales... por alguna razón no lo soporta, imprime "???" en vez del valor. Hay dos formas de sobrellevar dicho problema:

  • Con String.
  • Con dtostrf.

Para concatenar cadenas de caracteres con sprintf, estos deben ser punteros de char (se coloca el nombre de la variable de tipo char* o un vector de este). Por esta razón, se utiliza c_str() cuando se introduce un objeto String (o de lo contrario habría error de compilación).

jazpiroz:

String valores = "INSERT INTO sql10237370.DATOS (HUMEDAD,TEMPERATURA,HUMEDADSUELO,EMISOR) VALUES (";

valores = valores +hum;
  valores = valores + ',';
  valores = valores + temp;
  valores = valores + ',';
  valores = valores + humsuelo;
  valores = valores + ',';
  valores = valores +"'"+emisor+"')";
  Serial.println(valores);

char INSERT_SQL[128] = " ";
  sprintf(INSERT_SQL,valores.c_str());

Gasto innecesario de memoria (RAM). Si en valores ya tienes la sentencia completa (llamarlo "query" sería extraño porque realmente no se está consultado), no sería mejor usarlo así como está.
Recuerda, si al insertarlo en el parámetro de una función te genera error de compilación, prueba llamando a c_str().