| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
xpfcgx
Registrado: 31 Oct 2009 Mensajes: 12 Ubicación: Asunción, Paraguay
| Publicado: 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)
| Publicado: 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
| Publicado: 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)
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |