utilisation de sqlite 3.0.7 sous C

utilisation de sqlite 3.0.7 sous C - C - Programmation

Marsh Posté le 19-10-2004 à 15:52:19    

Bonjour, je suis actuellement en train de faire un petit programme sous LINUX en C utilisant le base de donnée SQLITE.
J'arrive à ouvrir une base, mettre des données à l'intérieur, créer une base, insérer des données MAIS Je n'arrive pas à afficher (ou mémoriser) le résultat d'une requete. En fait je n'arrive pas à utiliser une fonction du type "callback" comme décrite à l'adresse suivante: http://www.linux-mag.com/cgi-bin/p [...] le=compile
 
Si vous pouviez me donner un petit coup de main, ce serait sympa.
 
farad64

Reply

Marsh Posté le 19-10-2004 à 15:52:19   

Reply

Marsh Posté le 19-10-2004 à 16:00:39    

ben montre ce que tu as deja fais
 
tu connais les pointeurs de fonctions ?

Reply

Marsh Posté le 19-10-2004 à 16:06:32    

Une minute j'envoie ça...

Reply

Marsh Posté le 19-10-2004 à 16:09:11    

voici le code que j'ai pour l'instant:
 
 
#include <stdio.h>
#include "lib/sqlite3.h"
#include <stdlib.h>
 
sqlite3* db;
char *errmsg=NULL;
 
/*------------------------------------------------------------------------------------------------------------------*/
 
void affichage_erreur(char *erreur)
   {
   if (erreur)
      {
      printf("Erreur: %s\n",erreur);
      free(erreur);
      }
   }
   
/*-----------------------------------------------------------------------------------------------------------------*/
 
int afficher_resultats()
   {
   puts("Resultats de la requete" );
   printf("momo\n" );
   return 0;
   }
   
/*------------------------------------------------------------------------------------------------------------------*/
 
void ouverture_base()
   {
   puts("ouverture de la base: base.db" );
   sqlite3_open("base.db",&db);
   puts("la base est ouverte" );
   getchar();
   }
   
/*------------------------------------------------------------------------------------------------------------------*/
 
void creation_table()
   {
   puts("Création de la table: table1" );
   sqlite3_exec(db,"create table table1(one varchar(10),two smallint);",0,0,&errmsg);
   affichage_erreur(errmsg);
   puts("Table créée" );
   getchar();
   }
   
/*------------------------------------------------------------------------------------------------------------------*/
 
void insertion_donnees()
   {
   puts("Insertion de données dans table1" );
   sqlite3_exec(db,"insert into table1 values('vive',10);",0,0,&errmsg);
   affichage_erreur(errmsg);
   sqlite3_exec(db,"insert into table1 values('sqlite',20);",0,0,&errmsg);
   affichage_erreur(errmsg);
   sqlite3_exec(db,"insert into table1 values('et c',30);",0,0,&errmsg);
   affichage_erreur(errmsg);
   puts("Données insérées" );
   getchar();
   }
   
/*------------------------------------------------------------------------------------------------------------------*/
 
void requete()
   {
   sqlite3_exec(db,"SELECT * FROM table1;",afficher_resultats,0,&errmsg);
   affichage_erreur(errmsg);
   }
/*-----------------------------------------------------------------------------------------------------------------*/    
void fermeture_base()
   {
   puts("Fermeture de la base: base.db" );
   sqlite3_close(db);
   affichage_erreur(errmsg);
   puts("Base de données fermée" );
   getchar();
   }
   
/*------------------------------------------------------------------------------------------------------------------*/
 
int main(int argc, char *argv[])
   {
   ouverture_base();
 
   creation_table();
 
   insertion_donnees();
   
   requete();
 
   fermeture_base();
 
   return 0;
 
   }
/*-------------------------------------------------------------------------------------------------*/

Reply

Marsh Posté le 19-10-2004 à 16:10:05    

Je connais un peu les pointeurs mais "pointeur de fonction" ça ne me dit rien.

Reply

Marsh Posté le 19-10-2004 à 16:21:29    

tu définies une fonction
 
int callback(void *pArg, int argc, char **argv, char **columns)
{
 }
 
 
et apres tu passes son adresse (son nom) à une autre fonction
 
sqlite_exec_printf(db, result[1], callback, &rows, &error, arg);
 
qui l'appelera pour traiter chaque ligne de la requete, mais ca doit etre indiquée dans la doc j'imagine
 
edit : tu peux aller voir la declarartion de sqlite_exec_printf dans le fichier d'entete, le parametre correspondant est un pointeur sur une fonction ayant ce prototype


Message édité par cris56 le 19-10-2004 à 16:25:48
Reply

Marsh Posté le 19-10-2004 à 16:26:50    

Et dans tous ces paramètres lequel contient les données ?

Reply

Marsh Posté le 19-10-2004 à 16:32:29    

je dirais result
 
c'est vrai que la doc est assez barbante à lire, regarde si yen a pas une mieux, sinon faut quand meme se la taper

Reply

Marsh Posté le 19-10-2004 à 16:36:18    

l'autre problème c'est que si j'utilise sqlite_exec_printf, gcc me renvoie une erreur "implicit declaration". En consultant la bibliothèque de sqlite je n'ai pas trouvé cette fonction. entre ça et la doc que j'ai du mal à comprendre, je suis un peu perdu...

Reply

Marsh Posté le 19-10-2004 à 16:39:08    

"implicit declaration" ca veut dire qu'il trouve pas la delcaration


Message édité par cris56 le 19-10-2004 à 16:39:24
Reply

Marsh Posté le 19-10-2004 à 16:39:08   

Reply

Marsh Posté le 19-10-2004 à 16:43:34    

ben justement, si la fonction est inexistante dans la bibliothèque, je ne peux pas l'utiliser comme ça et comme dans la doc je ne l'ai vue nulle part non plus, c'est qu'il y a un pb.

Reply

Marsh Posté le 19-10-2004 à 17:28:23    

a ok, ta bibliotheque est à jour ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed