The First Steps in GDA and GNOME-DB

Firts all let me say that GDA is a library where all the interfaces to the Data Bases are, and Gnome-Db is the library that let you use specialy designed widget to view and edit data, using a GUI program.

GDA arquitecture

GDA (Gnome Data Access), is a set of objects that abstracts the way you read and write data to a Data Base; it has Models for each kind of data you reads and has an API for each one.

Connection and Retrieve Data

Basics

Follow the next basic steps to access data in a Data Base using GDA:

  1. Create a Client.
  2. Open a Connection, using the Client, the DNS, username and password. The DNS could be created using the GDA utilities and/or using the GUI provider by GNOME-DB. The GNOME-DB privides an example DNS and Data Base using the SQLite enbeded in GDA; we'll use this one for our example.
  3. If the Connection is opened, then you can create a Command (GdaCommand), like an SQL.

  4. Execute the command created using the Connection object; if you execute a valid SQL sentence, you'll get back a Data Model, wich has the data you can use and/or update.
  5. Access the Data using the Gda's API to access values in the DataModel, and/or set the Data Model to a Gnome-Db widget to show it.

Hellow World in GDA

The following example used Anjuta to create an standar GNOME project, and then modify the main() function to allow a simple Window setup; however, it is better to call a function out of main() to setup it.

#include <gnome.h>

#include "interface.h"
#include "support.h"
#include <libgnomedb/libgnomedb.h>

int
main (int argc, char *argv[])
{
        GtkWidget *window1;
        GtkWidget *logindlg;
        
        
        #ifdef ENABLE_NLS
          bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
          bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
          textdomain (GETTEXT_PACKAGE);
        #endif
        
          gnome_db_init (PACKAGE, VERSION,
                                                  argc, argv);
        
          /*
           * Create the Main window
           */
          window1 = create_window1 ();
                        
                /*
                        SetUp the Widget to Show the Data:
                        First: Connect to the Server
                */
                
                logindlg = gnome_db_login_dialog_new("Select the Data Base Provider to Login");
                
                if (gnome_db_login_dialog_run(GNOME_DB_LOGIN_DIALOG(logindlg)))
                {
                        
                        
                        GdaClient *client;
                        GdaConnection *cnn;
                        GError *error = NULL;
                        
                        
                
                        client = gda_client_new();

                        // Open the Connection to the Data Base, using the DSN, username and password given by the GnomeDbLoginDialog
                        
                        cnn = gda_client_open_connection(client,
                                                                gnome_db_login_dialog_get_dsn(GNOME_DB_LOGIN_DIALOG(logindlg)),
                                                                gnome_db_login_dialog_get_username(GNOME_DB_LOGIN_DIALOG(logindlg)),
                                                                gnome_db_login_dialog_get_password(GNOME_DB_LOGIN_DIALOG(logindlg)),
                                                        GDA_CONNECTION_OPTIONS_DONT_SHARE,
                                                        &error);
                        // Destroy the Login Dialog not used any more
                         
                        gtk_widget_destroy(logindlg);
                        
                        // Verify the connection
                        
                        if( gda_connection_is_opened (cnn)) {
                                                                
                                GdaDataModel *data_model;
                                GtkWidget *grid;
                                GtkWidget *vbox;
                                gchar *sql;
                                GdaCommand *command;
                        
                                /* 
                                        Now Set the SQL statement to get the data from the Data Base
                                */
                                
                                sql = "SELECT * FROM customers";
                                
                                command = gda_command_new(sql, GDA_COMMAND_TYPE_SQL,GDA_COMMAND_OPTION_STOP_ON_ERRORS);

                                // Execute the Command to get a DataModel
                                
                                data_model = gda_connection_execute_single_command (cnn,
                                                                                        command,
                                                                                        NULL,
                                                                                        &error);
                                        
                                if(GDA_IS_DATA_MODEL(data_model)) {
                                                                                        
                                        /* 
                                        Now Set up the Widget to Show the Data
                                        */
                                        grid = gnome_db_grid_new(data_model);
                                        
                                        gtk_widget_show(grid);
                                        
                                        vbox = lookup_widget(window1, "vbox");
                                                                                
                                        gtk_box_pack_end_defaults(GTK_BOX(vbox), grid);
                                        
                                        /* Show the Main window*/
                                        gtk_widget_show (window1);
                                                                                
                                }
                                else {
                                        GtkWidget *msgdlg;
                                        msgdlg = gtk_message_dialog_new(NULL,
                                                                        GTK_DIALOG_MODAL,
                                                                        GTK_MESSAGE_ERROR,
                                                                        GTK_BUTTONS_OK,
                                                                        "I can't get the Data from to the Data Base!\n\
                                                                        may be the SQL sentences is wrong");
                                        gtk_dialog_run(GTK_DIALOG(msgdlg));
                                        gtk_widget_destroy(msgdlg);
                                                
                                }
                        }
                        else {
                                GtkWidget *msgdlg;
                                msgdlg = gtk_message_dialog_new(NULL,
                                                                GTK_DIALOG_MODAL,
                                                                GTK_MESSAGE_ERROR,
                                                                GTK_BUTTONS_OK,
                                                                "Couldn't Connect to the Data Base!");
                                gtk_dialog_run(GTK_DIALOG(msgdlg));
                                gtk_widget_destroy(msgdlg);
                                
                        }
                                                
                }
                
          
        
          gnome_db_main_run (NULL, NULL);
          return 0;
}

As you can see, we use the gnome_db_init() enstead the gnome_app_init() for Gnome-Db and GDA initiation; at the end you'll find the gnome_db_main_run(), to manage the events in the MainWindow once it is showed in the screen.

It is important that you add a gnome_db_main_quit() function when you destroy the MainWindow or select the Exit option in the File menu.

Projects/GnomeDb/GnomeDb/Tutorials (last edited 2013-11-22 19:46:16 by WilliamJonMcCann)