/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Error de Violacion de segmento con MySQL

 
      Índice del Foro elrincondelc.com -> Bases de datos en C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
xpfcgx



Registrado: 31 Oct 2009
Mensajes: 12
Ubicación: Asunción, Paraguay

MensajePublicado: 28/12/2009 7:41 am
Título: Error de Violacion de segmento con MySQL

Hola, estoy desarrollando un sistema que necesita consultar una base de datos en MySQL. Los datos de autenticación los tomo de un archivo txt.

El problema es que cuando el programa intenta conectarse a la base de datos se despliega un error Violación de segmento. Este es el código del programa

Código:

signed char Extraer_Datos(char *MSISDN,char *Comercio,char *Tarjeta,char *Pin, char *Nombre)
{
   
   
   //printf("\nSe accedio a la subrutina de MySQL, Antes de crear las variables tipo MySQL");//PFCG Con fines de detección de errores
   
   
   // Tipos de Mysql
   MYSQL *conexion;
   MYSQL_RES *R;
    MYSQL_ROW COL;

   
        char servidor[16];
   char bd[16];
   char tabla[16];
   char usuario[16];
   char clave[16];
   char comando[LONGMAX_MSJ_ERROR];
   unsigned char error;
   signed char resultado=0;

   //printf("\nSe accedio a la subrutina de MySQL. Antes de buscar los datos de autenticacion");//PFCG Con fines de detección de errores
   error=datos_autenticacion_BD(servidor,bd,tabla,usuario,clave);

   if (error)
   {
      printf("No se pudo acceder al archivo de datos de autenticacion\n");
      resultado=0;
   }

   else
   {
      //printf("\n%s\n%s\n%s\n%s\n%s",servidor,bd,tabla,usuario,clave);//PFCG Con fines de detección de errores
      
      
      //PFCG comando=SELECT Codigo_Comercio, Tarjeta, PIN, Nombre FROM BD WHERE MSISDN='5989xnnnnnn'
      strcpy(comando, "SELECT Codigo_Comercio, Tarjeta, PIN, Nombre FROM ");
      strcat(comando,bd);
      strcat(comando," WHERE MSISDN= '");
      strcat(comando,MSISDN);
      strcat(comando,"'");
      
      //printf("\nAntes de inicializar MySQL");//PFCG Con fines de detección de errores
      if (!(conexion = mysql_init(NULL)))
      {
         printf("No se pudo crear objeto MySQL\n");
         resultado=0;
      }

      else
      {
         printf("La direccion de memoria de 'conexion' es: %p \n", conexion);
               
         printf("\nAntes de realizar la conexion");//PFCG Con fines de detección de errores
         

         if (!mysql_real_connect(conexion,servidor, usuario, clave, bd, MYSQL_PORT, NULL, 0))
         {
            printf("No se establecer conexion con el servidor MySQL\n");
            resultado=0;
         }
         //mysql_real_connect(conexion,"192.168.3.141", "PosWAP", "claveBD", "BD", 0, NULL, 0);//PFCG Con fines de detección de errores

   
         printf("\nAntes de enviar la solicitud");//PFCG Con fines de detección de errores
         // Consulta de la tabla, en esta y la linea a anterio igual podria usarse una varaible STRING para el Query
         mysql_query(conexion,comando);

         
         R =mysql_use_result(conexion);

         if ((COL =mysql_fetch_row(R)) != NULL)
         {
            strcpy(Comercio,COL[0]);
            strcpy(Tarjeta,COL[1]);
            strcpy(Pin,COL[2]);
            strcpy(Nombre,COL[3]);
            resultado=1;
         }
         else
         {
            resultado=-1;
         }

         mysql_close(conexion);
      
      
      }
   }
   return (resultado);

}


Estuve consultando la web y respuestas a casos similares en los foros pero no encuentro una solución a este caso. Por favor si alguien sabe como solucionar este problema le pediría su ayuda.
Desde ahora muchas gracias por su ayuda
Pablo
Volver arriba
eagleoneraptor



Registrado: 20 May 2008
Mensajes: 187
Ubicación: Buenos Aires(Argentina)

MensajePublicado: 28/12/2009 9:27 pm
Título:

Hola, tengo una pregunta en cuanto a tu problema.

¿El error "Violación de segmento" lo despliega el sistema operativo antes de cerrarse tu programa o es del servidor MySQL?
¿En que parte ocurre exactamente, en mysql_real_connect?


Vi el código y a simple vista no vi ninguna falla excepto en la consulta:
Mira, la consulta que quieres generar es esta:

SELECT Codigo_Comercio, Tarjeta, PIN, Nombre FROM BD WHERE MSISDN='5989xnnnnnn'

¿No debería ser así?

SELECT Codigo_Comercio, Tarjeta, PIN, Nombre FROM tabla WHERE MSISDN='5989xnnnnnn'


Suerte
Un Saludo!
_________________
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson
Volver arriba
xpfcgx



Registrado: 31 Oct 2009
Mensajes: 12
Ubicación: Asunción, Paraguay

MensajePublicado: 29/12/2009 3:27 am
Título:

Hola, gracias por responder.

Si, efectivamente, el error "Violación de segmento" lo despliega el sistema operativo justo cuando se ejecuta la instrucción mysql_real_connect y entonces finaliza el programa.

Por otro lado si, me equivoqué en la consulta, debería ser

Código:
SELECT Codigo_Comercio, Tarjeta, PIN, Nombre FROM tabla WHERE MSISDN='5989xnnnnnn'


Esta es la pantalla que aparece cuando se ejecuta el programa. ¿Sabes como se puede solucionar este problema?.

Cita:
[root@desarrollo Consultar_MySQL]# consultar_mysql
Favor ingresar MSISDN= 59898111111
La direccion de memoria de 'conexion' es: 0x9daed78

Antes de realizar la conexion
Violación de segmento
[root@desarrollo Consultar_MySQL]#


Desde ahora muchas gracias
Pablo
Volver arriba
eagleoneraptor



Registrado: 20 May 2008
Mensajes: 187
Ubicación: Buenos Aires(Argentina)

MensajePublicado: 29/12/2009 5:04 am
Título:

Hola, puede que tengas problemas al obtener los datos con datos_autenticacion_BD.
Usando esta línea comentada:

Código:
mysql_real_connect(conexion,"192.168.3.141", "PosWAP", "claveBD", "BD", 0, NULL, 0);


¿anda bien?

Sino prueba de usar una estructura MYSQL estática.

Es raro, tu código no parece tener problemas.

Un Saludo!
_________________
"Aquel que hace una bestia de si mismo se libra del dolor de ser un hombre". Dr. Johnson
Volver arriba
xpfcgx



Registrado: 31 Oct 2009
Mensajes: 12
Ubicación: Asunción, Paraguay

MensajePublicado: 29/12/2009 11:17 am
Título:

Hola, gracias de nuevo

Si, ya probé, de hecho la línea

Código:
//mysql_real_connect(conexion,"192.168.3.141", "PosWAP", "claveBD", "BD", 0, NULL, 0);//PFCG Con fines de detección de errores


es justamente un intento con valores fijos sin tomarlos de un archivo (solamente que le llamé BD a la tabla, y PosWAP a la base de datos, por eso quizás sea confuso, aunque ya es tarde para cambiar eso)

Probé con estos valores fijos y obtuve el mismo resultado

También imprimí los datos tomados del archivo para comprobarlos y eran correctos

Disculpa mi ignorancia, pero ¿cómo sería utilizando estructura MYSQL estática?
Muchas Gracias
Pablo
Volver arriba
      Índice del Foro elrincondelc.com -> Bases de datos en C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com