Autor
|
Tema: como conectar mysql en c usando gtk (Leído 3,450 veces)
|
Drewermerc
|
Hola a todos. buen es que apenas me inicie en la programacion de api's en c usando gtk y bueno como se manejar mysql con c sin api's pues quise ver si era el mismo metodo usando gtk pero no pude me dise violacion del segmento a la hora de ejecutar el programa y estuve buscando informacion para tan solo poder hacer la conexion pero no e encontrado nada, bueno queria saber si me podria ayudar o orientar como le podria hacer para hacer o de algun tutoria que me pueda ayudar y bueno espero que me puedan ayudar.
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Así de primeras veo que tienes un problema en la línea 258, debajo del comentario del if... no estás inicializando el puntero...
Más o menos eso es lo que te podría decir si tuviese acceso a la parte conflictiva del código... pero va a ser que con lo que aportas poco te puedo decir.
|
|
|
En línea
|
|
|
|
Drewermerc
|
hola eferion. bueno mira pues aqui esta el codigo que intente hacer. 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include </usr/include/mysql/mysql.h> 4 #include <gtk/gtk.h> 5 #define server "localhost" 6 #define user "root" 7 #define password "" 8 #define database "datos" 9 void consulta(MYSQL *conn, MYSQL_RES *res, MYSQL_ROW row); 10 void hello(GtkWidget *Widget, gpointer data); 11 gint delete_event (GtkWidget *Widget, GdkEvent *event , gpointer data); 12 void destroy(GtkWidget *widget, gpointer data); 13 int main (int argc, char *argv[]) 14 { 15 MYSQL *conn; 16 MYSQL_RES *res; 17 MYSQL_ROW row; 18 GtkWidget *ventana; 19 int wich; 20 GtkWidget * etiqueta; 21 res=0; 22 row=0; 24 25 conn = mysql_init(NULL); 26 if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) 27 fprintf(stderr , "%s\n",mysql_error (conn )); 28 consulta(conn, res, row); 29 mysql_free_result(res); 30 mysql_close(conn); 31 gtk_init(&argc, &argv); 32 33 34 ventana = gtk_window_new(GTK_WINDOW_TOPLEVEL); 35 g_signal_connect(G_OBJET(ventana), "delete_event") 36 G_CALLBACK((delete_event), NULL); 37 G_CALLBACK((destroy), NULL); 38 gtk_container_set_border_with(GTK_CONTAINER(ventana), 10); 39 40 etiqueta = gtk_label_new( "error"); 41 gtk_container_add (GTK_CONTAINER(ventana), etiqueta); 42 43 gtk_widget_show(ventana); 44 gtk_widget_show(etiqueta); 45 46 gtk_main(); 47 return 0; 48 } 49 50 void consulta (MYSQL *conn, MYSQL_RES *res, MYSQL_ROW row) 51 { 52 if (mysql_query(conn, "SELECT * FROM datos")) 53 fprintf(stderr , "%s\n", mysql_error (conn )); 54 res = mysql_use_result(conn); 55 printf("id\t nombre\tedad\n"); 56 while ((row = mysql_fetch_row(res)) != NULL) 57 printf("%s\t%s\t%s\t\n", row [0], row [1], row [2]); 58 } 59 void hello (GtkWidget *widget, gpointer data) 60 { 61 g_print("hola mundo \n"); 62 } 63 gint delete_event (GtkWidget *Widget, GdkEvent *event , gpointer data) 64 { 65 g_print("delete_event\n"); 66 67 return TRUE; 68 } 69 void destroy(GtkWidget *widget, gpointer data) 70 { 71 gtk_main_quit(); 72 }
esta es una segunda forma de como lo quise hacer pero no tampoco me funciono. 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include </usr/include/mysql/mysql.h> 4 #include <gtk/gtk.h> 5 #define server "localhost" 6 #define user "root" 7 #define password "" 8 #define database "datos" 9 void consulta(MYSQL *conn, MYSQL_RES *res, MYSQL_ROW row); 10 void hello(GtkWidget *Widget, gpointer data); 11 gint delete_event (GtkWidget *Widget, GdkEvent *event , gpointer data); 12 void destroy(GtkWidget *widget, gpointer data); 13 int main (int argc, char *argv[]) 14 { 15 MYSQL *conn; 16 MYSQL_RES *res; 17 MYSQL_ROW row; 18 GtkWidget *ventana; 19 int wich; 20 GtkWidget * etiqueta; 21 res=0; 22 row=0; 24 25 conn = mysql_init(NULL); 26 if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) 27 fprintf(stderr , "%s\n",mysql_error (conn )); 28 consulta(conn, res, row); 29 mysql_free_result(res); 30 mysql_close(conn); 31 gtk_init(&argc, &argv); 32 if (wich == 1) 33 { 34 ventana = gtk_window_new(GTK_WINDOW_TOPLEVEL); 35 g_signal_connect(G_OBJET(ventana), "delete_event") 36 G_CALLBACK((delete_event), NULL); 37 G_CALLBACK((destroy), NULL); 38 gtk_container_set_border_with(GTK_CONTAINER(ventana), 10); 39 40 etiqueta = gtk_label_new( "error"); 41 gtk_container_add (GTK_CONTAINER(ventana), etiqueta); 42 43 gtk_widget_show(ventana); 44 gtk_widget_show(etiqueta); 45 } 46 gtk_main(); 47 return 0; 48 } 49 50 void consulta (MYSQL *conn, MYSQL_RES *res, MYSQL_ROW row) 51 { 52 if (mysql_query(conn, "SELECT * FROM datos")) 53 fprintf(stderr , "%s\n", mysql_error (conn )); 54 res = mysql_use_result(conn); 55 printf("id\t nombre\tedad\n"); 56 while ((row = mysql_fetch_row(res)) != NULL) 57 printf("%s\t%s\t%s\t\n", row [0], row [1], row [2]); 58 } 59 void hello (GtkWidget *widget, gpointer data) 60 { 61 g_print("hola mundo \n"); 62 } 63 gint delete_event (GtkWidget *Widget, GdkEvent *event , gpointer data) 64 { 65 g_print("delete_event\n"); 66 67 return TRUE; 68 } 69 void destroy(GtkWidget *widget, gpointer data) 70 { 71 gtk_main_quit(); 72 } 69,1 Final
bueno espero que me puedas ayudar y gracias por tu respuesta.
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
mysql_init puede devolver null y no lo estás comprobando. Lo mismo te pasa en otras tantas partes del código... conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))
ventana = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJET(ventana), "delete_event")
etiqueta = gtk_label_new( "error"); gtk_container_add (GTK_CONTAINER(ventana), etiqueta);
Siguiendo con los punteros, lo más normal es inicializarlos al principio para detectar problemas. Tú los tienes sin inicializar, pero esto es una sugerencia. MYSQL *conn; MYSQL_RES *res; GtkWidget *ventana;
MYSQL_RES *res creo que tiene un uso incorrecto aquí: void consulta (MYSQL *conn, MYSQL_RES *res, MYSQL_ROW row) { if (mysql_query(conn, "SELECT * FROM datos")) fprintf(stderr , "%s\n", mysql_error (conn )); res = mysql_use_result(conn);
Básicamente res es un puntero sí... pero dentro si modificas el valor del puntero dentro de consulta ( ojo, me refiero a la dirección de memoria apuntada por res ), necesitas pasar a "consulta" un puntero a puntero. Pasando un puntero simple puedes modificar el contenido de la memoria apuntada por el puntero... pero no puedes hacer que el puntero apunte a otro sitio, ya que esa información no viaja de vuelta al salir de la función.
|
|
|
En línea
|
|
|
|
Drewermerc
|
hola eferion.
bueno ya inicie las variables y si no me equivoco lo que me quisiste decir es que en lugar de decirle a la funcion que se recivira como argumento un puntero le dijiera que se resiviria una direccion de memoria en este caso de la variable res osea cambiar "*" por "&" pero me a este error
Unknown database 'datos' MySQL server has gone away id nombre edad Violación de segmento (`core' generado)
ya revise la base de datos y la tabla y todo es tambien el nombre y los datos de la conexion tambien y nose que podria ser y lo de violacion de segmento me lo da al iniciar el proceso de crear la ventana espero que me peuda ayudar gracias.
|
|
|
En línea
|
|
|
|
Drewermerc
|
hola ya encontre el error mi error era que esta poniendo argumentos de una funcion separados y eran estos. g_signal_connect(G_OBJET(ventana), "delete_event") G_CALLBACK((delete_event), NULL);
en realida iba asi g_signal_connect(G_OBJET(ventana), "delete_event", G_CALLBACK(delete_event), NULL);
y bueno pues gracias eferion por contestar.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Cómo utilizo C# para conectar y operar con una BD MySQL?
Programación General
|
<< Lucas, ¿quién más? >>
|
3
|
6,924
|
21 Mayo 2010, 17:17 pm
por << Lucas, ¿quién más? >>
|
|
|
Crear tabla usando como nombre el campo de otra MYSQL [Solucionado]
Bases de Datos
|
Graphixx
|
1
|
4,421
|
1 Diciembre 2010, 06:48 am
por Graphixx
|
|
|
como guardo la informacion de SELECT y usarla en otro lado usando MySQL y C?
Programación C/C++
|
Belial & Grimoire
|
2
|
2,669
|
5 Febrero 2011, 23:39 pm
por Belial & Grimoire
|
|
|
Cómo puedo conectarme a mysql usando éstos parámetros?
.NET (C#, VB.NET, ASP)
|
luison
|
2
|
2,873
|
19 Agosto 2011, 20:37 pm
por Meta
|
|
|
Generar nuevo TimeSpan usando un dato Time de mysql como parametro. VB.Net
.NET (C#, VB.NET, ASP)
|
Legnak
|
1
|
2,021
|
11 Marzo 2014, 01:57 am
por Legnak
|
|