IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

c++ sqlite3 ,lecture des enregistrement ?


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Par défaut c++ sqlite3 ,lecture des enregistrement ?
    Hello

    je tente en c++ de lire une base de donnée , pour ce qui est de ouvrire cree.inserer fermer. il semblerai que j'ai compris. par contre pour ce qui est de la lecture d'un enregistrement sa passe pas a l'execution ??

    voici le code , note que des variable globale son là que pour une question de faciliter le code sera par la suite utiliser dans une classe qui va bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    #include <iostream>
    #include <string>
     
    #include <sqlite3.h>
     
     
    sqlite3_stmt* _pStmt;
    sqlite3 *db_handle;
     
    const std::string  CreateTableNom="CREATE TABLE NOM (login varchar(30));";
    const std::string  InsertLogin="INSERT INTO NOM(login) VALUES(?) ;";
    const std::string  SelectNomlogin="SELECT  login from NOM ;";
     
    int setOpenBdSql 	(const std::string &);
    void setInsert		(const std::string &);
    void setCreateTable ();
    void getValueNom 	();
    void setCloseBd 	();
     
    void setCloseDb() {
    	if (db_handle != NULL)
    	{
    		sqlite3_close(db_handle);
    		db_handle=NULL;
    	}
    }
     
    int setOpenBdSql (const std::string & dataPath){
    	if (db_handle != NULL)
    	{
    		std::cout << "Veuillez fermer la base de donnée précédante:" << db_handle <<std::endl;
    		return 0;
    	}
    	return  sqlite3_open(dataPath.c_str(), &db_handle);
    }
     
    void setCreateTable (){
     
    	if(sqlite3_prepare_v2(db_handle, CreateTableNom.c_str(), CreateTableNom.length(), &_pStmt, NULL) != SQLITE_OK)
    	{
    		std::cout <<"Erreur dans la préparation de requette:"  << std::endl;
    	}
     
    	if (sqlite3_step(_pStmt) == SQLITE_DONE)
    	{
    	std::cout << "La requete est correctement executé !\n" << sqlite3_sql(_pStmt) << std::endl;
    	}
    	sqlite3_finalize(_pStmt);
    }
     
    void setInsert(const std::string & Valeur){
    	if(sqlite3_prepare_v2(db_handle, InsertLogin.c_str(), InsertLogin.length(), &_pStmt, NULL) != SQLITE_OK)
    	{
    		std::cout <<"Erreur dans la préparation de requette:"  << std::endl;
    	}
    	sqlite3_bind_text(_pStmt, 1, Valeur.c_str(), Valeur.length(), SQLITE_TRANSIENT);
    	if (sqlite3_step(_pStmt) == SQLITE_DONE)
    	{
    	std::cout << "La requete est correctement executé !\n" << sqlite3_sql(_pStmt) << std::endl;
    	}
    	sqlite3_finalize(_pStmt);
    }
    void getValueNom(){
    	if(sqlite3_prepare_v2(db_handle, SelectNomlogin.c_str(), SelectNomlogin.length(), &_pStmt, NULL) != SQLITE_OK)
    	{
    		std::cout <<"Erreur dans la préparation de requette:"  << std::endl;
    	}
    	const unsigned char *s1 =sqlite3_column_text(_pStmt, 0);
    	if (sqlite3_step(_pStmt) == SQLITE_DONE)
    	{
    	std::cout << "La requete est correctement executé !\n" << sqlite3_sql(_pStmt) << std::endl;
    	std::cout << "La Valeur :" << s1 << std::endl;
    	}
    	else
    	{
    		std::cout << "Erreur  !\n" << sqlite3_sql(_pStmt) << std::endl;
    		std::cout << "La Valeur :" << s1 << "\n" << std::endl;
    	}
    	sqlite3_finalize(_pStmt);
     
    }
     
    int main()//(int argc, char *argv[])
    {
     
    		setOpenBdSql("./mebd.sql");// ouverture
    		setCreateTable();// creation de la table
    		setInsert("Sqlite");// insertion
    		getValueNom();//lecture du premier enregistrement Bug ?
    		setCloseDb();//fermeture 
     
        return 0;
    }
    un make file pour ceux que sa interesse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    SRC=$(wildcard *.cpp)
    #SRC=main.cpp
    OBJ=${SRC:.cpp=.o}
    OUT=main
     
    CXX=c++
    CXXFLAGS=-lsqlite3 -Wall -Wextra -pedantic
    #CXXFLAGS=-lsqlite3 -Wall -Wextra -pedantic -static
     
     
    all: $(OUT)
     
    $(OUT): $(OBJ)
    	$(CXX) $^ -o $@ $(CXXFLAGS)
     
    .cpp.o:
     
    exe: all
    	./$(OUT) "sqlite3.sql"
     
    clean:
    	@rm -v *.o
    	true
     
    mrproper: clean
    	@rm $(OUT)
    le tout est coder sous debian squeez 6.0 (linux)
    Merci d'avance

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Déjà, tu ne testes pas ton statement (_pStmt) avant de la passer à sqlite3_column_text.
    Ensuite, tu dois d'abord faire un sqlite3_step, puis un sqlite3_colummn_text, et enfin refaire un sqlite3_step. De façon plus générique, ça donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if (pStatement != NULL)
    {
    	int iColumnCount = sqlite3_column_count( pStatement);
    	int iResult;
    	std::string strValue;
    	while ((iResult = sqlite3_step( pStatement)) != SQLITE_DONE)
    	{
    		if (nResult == SQLITE_ROW)
    		{
    			for (int i = 0 ; i < iColumnCount ; i++)
    			{
    				strValue = (char *)sqlite3_column_text( pStatement, i);
    				// Traitement de la valeur.
    			}
    		}
    	}
    }
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Par défaut
    Merci pour ta réponse

    d'après ce que tu as dit j'ai donc corriger le tir

    voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    if(sqlite3_prepare_v2(db_handle, SelectNomlogin.c_str(), SelectNomlogin.length(), &_pStmt, NULL) != SQLITE_OK)
    {
    		std::cout <<"Erreur dans la préparation de requette:"  << std::endl;
    }
    if (_pStmt != NULL)
    {
    	int iColumnCount = sqlite3_column_count( _pStmt);
    	int iResult=0;
    	std::string strValue="";
    	while ((iResult = sqlite3_step( _pStmt)) != SQLITE_DONE)
    	{
    		if (iResult == SQLITE_ROW)
    		{
    			for (int i = 0 ; i < iColumnCount ; i++)
    			{
    				strValue = (char *)sqlite3_column_text( _pStmt, i);
    				// Traitement de la valeur.
    				std::cout << "La Valeur :" << strValue << "\n" << std::endl;
    			}
    		}
    	}
    }
    sa devrai aider plus de monde

    il me reste un petit problème comment savoir si la table existe déjà ?
    car je pourrait traiter l'erreur si elle ce produit aux ca ou elle existe déja m'enfin c'est pas très propre il doit bien y avoir une alternative
    la doc sure site de sqlite est un peux longue a lire

Discussions similaires

  1. Réponses: 11
    Dernier message: 12/02/2015, 14h07
  2. [AC-2007] Lecture des enregistrements d'une table
    Par Gringo59 dans le forum VBA Access
    Réponses: 6
    Dernier message: 13/12/2011, 14h51
  3. [Windows]lecture des fichier lnk (raccourcis)
    Par Tiaps dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 21/10/2009, 19h27
  4. Réponses: 4
    Dernier message: 23/07/2003, 13h07
  5. Enlever tous les M&Mme des enregistrements
    Par marc olivier dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/07/2003, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo