Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-07-2008
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Poder: 17
MON___ Va por buen camino
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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Buscar en resultado de consulta SQL alvarocastillo SQL 6 06-11-2007 17:28:54
Añadir a una celda de documento excel el resultado de una consulta MySQL trucutrucu PHP 3 21-09-2007 23:43:45
Consulta a tabla mysql remota y copiar datos en modo local coletaun Varios 1 29-12-2006 15:49:45
Consulta de Union y tabla temporal en el nuevo Mysql 5.. ctronx MySQL 2 03-01-2006 17:57:41
Visualizar el resultado de una consulta en un TXT dsa132132 Varios 11 26-10-2004 23:46:02


La franja horaria es GMT +2. Ahora son las 08:37:13.


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
Copyright 1996-2007 Club Delphi