Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Inesperado resultado en una consulta SQL en una tabla MySQL (https://www.clubdelphi.com/foros/showthread.php?t=58104)

MON___ 08-07-2008 19:53:51

Inesperado resultado en una consulta SQL en una tabla MySQL
 
Estoy escribiendo una función en C++ Builder para obtener un valor incrementable. La estoy probando sobre una tabla muy sencilla, con tan sólo dos campos: Campo1 varchar(26), Campo2 smallint(6).
La función requiere el nombre de la tabla y del campo numérico.
Éste es el código de la función:

Código:

#include <winsock.h>
#include <mysql\mysql.h>
#include <vcl.h>

int IncrementarCampo(char * tabla, char *campo)
{
 MYSQL * MySQL;
  MYSQL_RES * RES;
  MYSQL_ROW ROW;
  int x;

  // iniciar MySQL
  MySQL = mysql_init(NULL);
  if(!MySQL)
  {
  MessageBox(NULL, "No se ha podido establecer una conexión con MySQL", "ERROR", MB_ICONINFORMATION +
        MB_OK + MB_APPLMODAL);
  return 0;
  }

  // establecer conexión con el servidor
  if(!mysql_real_connect(MySQL, "localhost", "root", "mi clave", NULL, MYSQL_PORT, NULL, 0))
  {
      MessageBox(NULL, "No se ha podido establecer una conexión con el servidor MySQL", "ERROR", MB_ICONINFORMATION +
        MB_OK + MB_APPLMODAL);
      mysql_close(MySQL);
      return 0;
  }

  // conectar con la base de datos
  if(mysql_select_db("MI_DB"))
  {
      MessageBox(NULL, Format("No se ha conectado con la base de datos. Se ha producido el error: %s",
          ARRAYOFCONST((mysql_error(MySQL)))).c_str(), "Error", MB_ICONINFORMATION + MB_OK + MB_APPLMODAL);
      mysql_close(MySQL);
      return 0;
  }

  // ejecutar la consulta
  AnsiString SQL = Format("SELECT MAX(%S) FROM %S",
      ARRAYOFCONST((campo, tabla)));
  if(mysql_query(MySQL, SQL.c_str()))
  {
      MessageBox(NULL, Format("No se ha ejecutado la consulta. Se ha producido el error: %s",
          ARRAYOFCONST((mysql_error(MySQL)))).c_str(), "Error", MB_ICONINFORMATION + MB_OK + MB_APPLMODAL);
      mysql_close(MySQL);
      return 0;
  }

  // obtener el número de filas
  RES = mysql_store_result(MySQL);
  if(!RES)
  {
      MessageBox(NULL, Format("No se ha podido acceder a los datos de la consulta. Se ha producido el error: %s",
          ARRAYOFCONST((mysql_error(MySQL)))).c_str(), "Error", MB_ICONINFORMATION + MB_OK + MB_APPLMODAL);
      mysql_close(MySQL);
      return 0;
  }

  // Comprobar número de filas y si es 0 (no hay registros)
  x = mysql_num_rows(RES);
  if( x == 0)
  {
      x++;
      mysql_free_result(RES);
      mysql_close(MySQL);
      return x;
  }
      // si es uno, obtener el valor máximo e incrementar
  if(x == 1)
  {
      ROW = mysql_fetch_row(RES);
      x = (int)ROW[0];        // ¿está aquí el error????????
      x++;
      mysql_free_result(RES);
      mysql_close(MySQL);
      return x;
  } 
}

¿Cuál es mi problema? Pues que el valor que obtengo (MAX) es 9.461.800 en lugar de 20, que es el valor MÁXIMO asignado a uno de los registros.
¿Dónde está el error?
Saludos a todos


La franja horaria es GMT +2. Ahora son las 13:04:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi