Re: different data types between clist and mysql.
- From: Arthur 1989 <arthur19891106 gmail com>
- To: Shawn Bakhtiar <shashaness hotmail com>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: different data types between clist and mysql.
- Date: Fri, 23 Apr 2010 19:59:15 +0800
thanks.
now i have another question. i use treeview to store data, and when i get a
cell data with gtk_tree_model_get(model, &iter2, 1, &s, -1),the data type of
what i get is always a string.How to convert string into MYSQL_TYPE before i
write it back into mysql.
On Wed, Apr 21, 2010 at 4:05 AM, Shawn Bakhtiar <shashaness hotmail com>wrote:
Ran into same problem.
I use a structure like
_IsiField {
int type,
int pos,
int ....
}
Then create my own list with
_IsiList {
GList Fields;
GList rows;
}
Every time retrieve a set of values, I have a routing which sets type to a
G_TYPE, which corresponds to the MYSQL_TYPE
Here is what I do:
GList *
isi_database_fetch_fields(IsiDatabase *self)
{
MYSQL_FIELD *field;
IsiFields *l;
GList *gl = NULL;
guint column = 0;
/* Sanity Check */
g_return_val_if_fail(self != NULL, NULL);
g_return_val_if_fail(self->priv != NULL, NULL);
g_return_val_if_fail(self->priv->dispose_has_run != TRUE, NULL);
g_return_val_if_fail(self->priv->res != NULL, NULL);
/* Rewind the feild set */
mysql_field_seek(self->priv->res,0L);
while((field = mysql_fetch_field(self->priv->res)))
{
/* Initialize a new IsiFields structure */
//l = (IsiFields*) g_new0(IsiFields, 1);
l = g_new0(IsiFields, 1);
/* Set the values */
l->alias = g_strdup(field->name);
l->name = g_strdup(field->org_name);
l->length = field->length;
/* always make fields visable */
l->hidden = FALSE;
l->sortable = FALSE;
l->pos = column++;
switch (field->type){
/* Integer types */
case MYSQL_TYPE_TINY:
case MYSQL_TYPE_SHORT:
case MYSQL_TYPE_INT24:
/* Check for signage */
if (field->flags & UNSIGNED_FLAG)
l->type = G_TYPE_UINT;
else
l->type = G_TYPE_INT;
break;
/* Long types */
case MYSQL_TYPE_LONG:
case MYSQL_TYPE_LONGLONG:
/* Check for signage */
if (field->flags & UNSIGNED_FLAG)
l->type = G_TYPE_ULONG;
else
l->type = G_TYPE_LONG;
break;
/* Decimal types */
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE:
l->type = G_TYPE_DOUBLE;
break;
/* Bit types */
case MYSQL_TYPE_BIT:
l->type = G_TYPE_BOOLEAN;
break;
/* ENUM types */
case MYSQL_TYPE_ENUM:
l->type = G_TYPE_ENUM;
break;
/* All other types */
default:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_BLOB:
case MYSQL_TYPE_SET:
case MYSQL_TYPE_TIMESTAMP:
case MYSQL_TYPE_DATE:
case MYSQL_TYPE_TIME:
case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_YEAR:
case MYSQL_TYPE_GEOMETRY:
case MYSQL_TYPE_NULL:
if(l->length <= 1){
l->type = G_TYPE_CHAR;
}else{
l->type = G_TYPE_STRING;
}
break;
}
/*DEBUG*/
//g_print("%s %d %d \n", l->alias,l->type,l->length);
/* Save pointer to list */
gl = g_list_append(gl,(gpointer)l);
}
return gl;}
now convert the row data to a GList and you have two GLists in your one
lists, one with the field header info, the other with the data.
and create the liststore like this:
GtkTreeModel *
isi_display_liststore_create(IsiDisplay *self, GList *fields)
{
guint num_fields, i;
IsiFields *l;
GtkTreeModel *model;
GType *types;
guint search_col_adj = 0;
/* Sanity Check */
g_return_val_if_fail(self != NULL, NULL);
g_return_val_if_fail(self->priv != NULL, NULL);
g_return_val_if_fail(self->priv->dispose_has_run != TRUE, NULL);
/* Get the number of fields */
if(fields != NULL){
num_fields = g_list_length(fields);
/* Initialize values based on number of columns */
types = (GType*) g_new0( GType, num_fields);
for(i=0;i<num_fields;i++){
l = (IsiFields*)g_list_nth_data(fields,i);
types[i] = l->type;
}
/* create the model store for data input */
model = (GtkTreeModel*) gtk_list_store_newv(num_fields,types);
g_free(types);
for(i=0;i<num_fields;i++){
l = (IsiFields*)g_list_nth_data(fields,i);
/* Setup sorting functions for the modle */
switch(l->type){
case G_TYPE_INT:
l->sortable=TRUE;
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
l->pos, sort_by_int,(gpointer) l->pos, NULL);
break;
case G_TYPE_UINT:
l->sortable=TRUE;
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
l->pos, sort_by_uint,(gpointer) l->pos, NULL);
break;
case G_TYPE_LONG:
l->sortable=TRUE;
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
l->pos, sort_by_long,(gpointer) l->pos, NULL);
break;
case G_TYPE_ULONG:
l->sortable=TRUE;
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
l->pos, sort_by_ulong,(gpointer) l->pos, NULL);
break;
case G_TYPE_DOUBLE:
l->sortable=TRUE;
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
l->pos, sort_by_double,(gpointer) l->pos, NULL);
break;
case G_TYPE_STRING:
l->sortable=TRUE;
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
l->pos, sort_by_string,(gpointer) l->pos, NULL);
break;
}
}
return model;
}
return NULL;}
Hope this helps,
Shawn
EMAILING FOR THE GREATER GOOD
Join me
Subject: Re: different data types between clist and mysql.
From: ebassi gmail com
To: gtk-app-devel-list gnome org
Date: Tue, 20 Apr 2010 15:49:20 +0100
On Tue, 2010-04-20 at 21:15 +0800, Arthur 1989 wrote:
Hello, I used *clist* to display data iI fetch from mysql server,but
when
writing data back into the table of database, I got this question: the
data
type of clist is always *gchar **, while there are quite a lot of other
data
types in mysql. What can I do to get this question solved? Any tips
will be
appreciated.
CList is *beyond* deprecation - you should not be using it.
look at GtkListStore and GtkTreeView; there's also a tutorial here:
http://scentric.net/tutorial
ciao,
Emmanuele.
--
W: http://www.emmanuelebassi.name
B: http://blogs.gnome.org/ebassi
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
--
---------------------
Best regards
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]