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

MFC Discussion :

SQLite et l'environnement VC++ 6


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 37
    Points : 37
    Points
    37
    Par défaut [Résolu] SQLite et l'environnement VC++ 6
    Bonjour à tous, je re-débute en C/C++ et je tente actuellement de recompiler SQLite pour Visual Studio C++ 6 selon les indications disponibles ici http://www.sqlite.org/cvstrac/wiki?p=HowToCompile section : MSVC and SQLite DLL, mais sans succès.

    Je suis en mesure d'obtenir une DLL mais lorsque je créé un petit prog test :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <sqlite3.h>
     
    static int callback(void *NotUsed, int argc, char **argv, char **azColName){
    	int i;
    	for(i=0; i<argc; i++){
    			printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    		}
    	printf("\n");
    	return 0;
    }
     
    int main(int argc, char **argv){
    	sqlite3 *db;
    	char *zErrMsg = 0;
    	int rc;
     
    	if( argc!=3 ){
    		fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    		exit(1);
    	}
    	rc = sqlite3_open(argv[1], &db);
    	if( rc ){
    		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    		sqlite3_close(db);
    		exit(1);
    	}
    	rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
    	if( rc!=SQLITE_OK ){
    		fprintf(stderr, "SQL error: %s\n", zErrMsg);
    	}
    	sqlite3_close(db);
    	return 0;
    }
    et que je tente de faire mon build le tout j'obtiens :

    --------------------Configuration: test_SQLite - Win32 Release--------------------
    Linking...
    test_SQLite.obj : error LNK2001: unresolved external symbol _sqlite3_exec
    test_SQLite.obj : error LNK2001: unresolved external symbol _sqlite3_close
    test_SQLite.obj : error LNK2001: unresolved external symbol _sqlite3_errmsg
    test_SQLite.obj : error LNK2001: unresolved external symbol _sqlite3_open
    Release/test_SQLite.exe : fatal error LNK1120: 4 unresolved externals
    Error executing link.exe.

    test_SQLite.exe - 5 error(s), 0 warning(s)
    Est-ce que quelqu'un peut m'apporter aide et conseils?

    Merci d'avance

  2. #2
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    n'oublie pas de crée le fichier lib comme indiqué dans le site, (Section : MSVC and SQLite DLL). ensuite dans les propriétés du projet, ajoute ce fichier, aux autres fichier lib standard (kernel32.lib...)
    C'est le devoir de chaque homme de rendre au monde au moins autant qu'il en a reçu -- Albert Einstein

    Mon blog: http://blackhorus.blogspot.com

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 37
    Points : 37
    Points
    37
    Par défaut
    Merci blackhorus pour ta réponse rapide mais c'est partie ce qui me bloque. Je ne comprends pas comment effectuer cette manip

    J'ai fait quelques recherches mais à part ce post http://www.developpez.net/forums/vie...hlight=lib+def

    je n'ai pas trouver comment le faire facilement. Je mentionne ce post parce que je suis présentement en train de tenter l'application des indications mentionnés mais c'est plus compliqué que le seule indication mentionnée sur le site SQLite à savoir :

    LIB /DEF:sqlite.def
    Je ne sais pas où et comment utiliser cette instruction... honte à moi pour vous embêtez avec ces pacotilles

    Merci encore pour votre aide

  4. #4
    Membre actif Avatar de blackhorus
    Inscrit en
    Février 2003
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 209
    Points : 226
    Points
    226
    Par défaut
    pour générer le fichier lib, essaye cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    link -lib -machine:X86 -def:sqlite.def -out:sqlite.lib
    . si en tapant cette comande dans le console, il te sort commande inconnu, essaye de lancer d'abord vcvars32.bat dans le repertoire ou se trouve le compilo.

    puis tu rajoute le fichier lib, dans la champ lib, comme indiqué sur cette photo...
    C'est le devoir de chaque homme de rendre au monde au moins autant qu'il en a reçu -- Albert Einstein

    Mon blog: http://blackhorus.blogspot.com

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 37
    Points : 37
    Points
    37
    Par défaut
    Encore merci blackhorus, je suis en mesure d'obtenir le fichier sqlite.lib mais son inclusion dans le projet n'a aucun effet

    Est-ce que ce fichier doit se trouver dans le même répoertoir que mon fichier source?

    Est-ce que se fichier doit être "enregistré" (similaire à une dll)?

    Dans l'image de la fenêtre que tu m'as fournis, est-ce que c'est dans la section Objects/Libary modules qu'il me faut rajouter sqlite.lib ou dans la section Projects options?

    J'ai tenté les deux séparement et les deux en même temps sans succès

    Je suis un peu dans le brouillard je crois... et j'espère qu'il n'y en pas trop dans ma caboche

    Merci infiniment pour ton aide

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 37
    Points : 37
    Points
    37
    Par défaut
    Pour commencer, je voudrais remercier blackhorus pour ses indications qui m'ont permis d'éclaicir le comment du pourquoi concernant les points suivant :

    utiliser un fichier .DEF pour créer un fichier .LIB

    et inclure ce fichier .LIB dans un projet VC++ 6

    Voici le parcours qui m'a amené à rencontrer ces petits problèmes, je veux utiliser SQLite (www.sqlite.org)
    pour faire une petite application de gestion de notes et de dossiers personnelles.

    J'ai donc téléchargé :

    - les sources pour Win32 (http://www.sqlite.org/sqlite-source-3_2_7.zip) à titre de références
    - sqlitedll.zip (http://www.sqlite.org/sqlitedll-3_2_7.zip)
    - sqlite3.exe (http://www.sqlite.org/sqlite-3_2_7.zip)

    lu les instruction pour utiliser SQLite avec Visual C++ 6 (http://www.sqlite.org/cvstrac/wiki?p=HowToCompile) qui mentionne ceci :

    MSVC and SQLite DLL

    Creation of an import library from the sqlitedll.zip for MS Visual C++ is achieved by the following command:

    LIB /DEF:sqlite.def

    This makes the files sqlite.lib and sqlite.exp files. The sqlite.lib can then be used to link your programs against the SQLite DLL.
    J'ai créé le répertoire suivant : C:\test_SQLite

    J'ai copié dans ce répertoire les fichiers suivants :
    - sqlite3.def
    - sqlite3.dll
    - sqlite3.exe

    ensuite je créé un dossier source dans lequel j'extrait le contenu de sqlite-source-3_2_7.zip.

    Par la suite j'ai utilisé cette commande dans un prompt DOS :

    C:\test_SQLite>link -lib -machine:X86 -def:sqlite3.def -out:sqlite3.lib (merci blackhorus)

    pour obtenir le fichier sqlite3.lib et sqlite3.exp.

    Ensuite je démarre VC++ 6 et je créé un nouveau projet Win32 Console Application
    que je nomme SQLite_Exemple dont le répertoire de création se trouve sous C:\test_SQLite.

    Je choisi l'option Empty Project et je clique finish.

    J'ai créé un fichier test_SQLite.c avec le code suivant :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <sqlite3.h>
     
    static int callback(void *NotUsed, int argc, char **argv, char **azColName){
    	int i;
    	for(i=0; i<argc; i++){
    			printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    		}
    	printf("\n");
    	return 0;
    }
     
    int main(int argc, char **argv){
    	sqlite3 *db;
    	char *zErrMsg = 0;
    	int rc;
     
    	if( argc!=3 ){
    		fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    		exit(1);
    	}
    	rc = sqlite3_open(argv[1], &db);
    	if( rc ){
    		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    		sqlite3_close(db);
    		exit(1);
    	}
    	rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
    	if( rc!=SQLITE_OK ){
    		fprintf(stderr, "SQL error: %s\n", zErrMsg);
    	}
    	sqlite3_close(db);
    	return 0;
    }
    Dans Projects->Settings je choisi Settings For : All Configurations (coin haut gauche) et ensuite :

    - Onglet C/C++ -> Category : Preprocessor -> Additionnal include directories : c:/test_SQLite/source.
    - Onglet Link -> Category : Input -> Objects/library modules -> j'ajoute sqlite3.lib à la toute fin
    -> Additional library path -> c:/test_SQLite/

    Maintenant je peux construire l'exécutable.

    Pour fin de test, j'exécute dans un prompt DOS les commandes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C:\test_SQLite\sqlite3 test.db  "create table t1 (t1key INTEGER PRIMARY KEY,data TEXT,num double,timeEnter DATE);
     
    C:\test_SQLite\sqlite3 test.db  "insert into t1 (data,num) values ('Exemple de données',3);"
    C:\test_SQLite\sqlite3 test.db  "insert into t1 (data,num) values ('Plus de données',6);"
    C:\test_SQLite\sqlite3 test.db  "insert into t1 (data,num) values ('Encore plus de données',9);"
    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
    C:\test_SQLite\SQLite_Exemple\Debug\SQLite_Exemple.exe test.db "select * from t1"
    t1key = 4
    data = Exemple de données
    num = 3
    timeEnter = NULL
     
    t1key = 5
    data = Plus de données
    num = 6
    timeEnter = NULL
     
    t1key = 6
    data = Encore plus de données
    num = 9
    timeEnter = NULL
    Je copie sqlite3.dll dans le même répertoire que mon nouvel exec et maintenant je suis prêt à tester ma mini application en entrant la commande suivante dans un prompt DOS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    C:\test_SQLite\SQLite_Exemple\Debug\SQLite_Exemple.exe C:\test_SQLite\test.db "select * from t1"
    t1key = 4
    data = Exemple de données
    num = 3
    timeEnter = NULL
     
    t1key = 5
    data = Plus de données
    num = 6
    timeEnter = NULL
     
    t1key = 6
    data = Encore plus de données
    num = 9
    Et maintenant tout fonctionne

    MERCI MERCI MERCI

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut ,
    a noter qu'il existe des wrappers C++ pour sql lite:
    http://dev.int64.org/sqlite.html
    http://www.codeproject.com/database/CppSQLite.asp

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 37
    Points : 37
    Points
    37
    Par défaut
    C'est vraiment sympathique de ta part farscape de m'avoir fourni cette information surtout celle-ci :

    http://www.codeproject.com/database/CppSQLite.asp

    L'info est très détaillées et simple à comprendre. Pour me remettre au C/C++ j'avais l'intention de plus ou moins faire la même chose pour mon projet mais c'est clair que je vais pouvoir me consacrer à autre chose....

    Mille merci

  9. #9
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Points : 855
    Points
    855
    Par défaut
    Citation Envoyé par il_a_ri Voir le message
    Pour commencer, je voudrais remercier blackhorus pour ses indications qui m'ont permis d'éclaicir le comment du pourquoi concernant les points suivant :

    utiliser un fichier .DEF pour créer un fichier .LIB

    et inclure ce fichier .LIB dans un projet VC++ 6

    Voici le parcours qui m'a amené à rencontrer ces petits problèmes, je veux utiliser SQLite (www.sqlite.org)
    pour faire une petite application de gestion de notes et de dossiers personnelles.

    J'ai donc téléchargé :

    - les sources pour Win32 (http://www.sqlite.org/sqlite-source-3_2_7.zip) à titre de références
    - sqlitedll.zip (http://www.sqlite.org/sqlitedll-3_2_7.zip)
    - sqlite3.exe (http://www.sqlite.org/sqlite-3_2_7.zip)

    lu les instruction pour utiliser SQLite avec Visual C++ 6 (http://www.sqlite.org/cvstrac/wiki?p=HowToCompile) qui mentionne ceci :



    J'ai créé le répertoire suivant : C:\test_SQLite

    J'ai copié dans ce répertoire les fichiers suivants :
    - sqlite3.def
    - sqlite3.dll
    - sqlite3.exe

    ensuite je créé un dossier source dans lequel j'extrait le contenu de sqlite-source-3_2_7.zip.

    Par la suite j'ai utilisé cette commande dans un prompt DOS :

    C:\test_SQLite>link -lib -machine:X86 -def:sqlite3.def -out:sqlite3.lib (merci blackhorus)

    pour obtenir le fichier sqlite3.lib et sqlite3.exp.

    Ensuite je démarre VC++ 6 et je créé un nouveau projet Win32 Console Application
    que je nomme SQLite_Exemple dont le répertoire de création se trouve sous C:\test_SQLite.

    Je choisi l'option Empty Project et je clique finish.

    J'ai créé un fichier test_SQLite.c avec le code suivant :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <sqlite3.h>
     
    static int callback(void *NotUsed, int argc, char **argv, char **azColName){
    	int i;
    	for(i=0; i<argc; i++){
    			printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    		}
    	printf("\n");
    	return 0;
    }
     
    int main(int argc, char **argv){
    	sqlite3 *db;
    	char *zErrMsg = 0;
    	int rc;
     
    	if( argc!=3 ){
    		fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
    		exit(1);
    	}
    	rc = sqlite3_open(argv[1], &db);
    	if( rc ){
    		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
    		sqlite3_close(db);
    		exit(1);
    	}
    	rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
    	if( rc!=SQLITE_OK ){
    		fprintf(stderr, "SQL error: %s\n", zErrMsg);
    	}
    	sqlite3_close(db);
    	return 0;
    }
    Dans Projects->Settings je choisi Settings For : All Configurations (coin haut gauche) et ensuite :

    - Onglet C/C++ -> Category : Preprocessor -> Additionnal include directories : c:/test_SQLite/source.
    - Onglet Link -> Category : Input -> Objects/library modules -> j'ajoute sqlite3.lib à la toute fin
    -> Additional library path -> c:/test_SQLite/

    Maintenant je peux construire l'exécutable.

    Pour fin de test, j'exécute dans un prompt DOS les commandes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C:\test_SQLite\sqlite3 test.db  "create table t1 (t1key INTEGER PRIMARY KEY,data TEXT,num double,timeEnter DATE);
     
    C:\test_SQLite\sqlite3 test.db  "insert into t1 (data,num) values ('Exemple de données',3);"
    C:\test_SQLite\sqlite3 test.db  "insert into t1 (data,num) values ('Plus de données',6);"
    C:\test_SQLite\sqlite3 test.db  "insert into t1 (data,num) values ('Encore plus de données',9);"
    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
    C:\test_SQLite\SQLite_Exemple\Debug\SQLite_Exemple.exe test.db "select * from t1"
    t1key = 4
    data = Exemple de données
    num = 3
    timeEnter = NULL
     
    t1key = 5
    data = Plus de données
    num = 6
    timeEnter = NULL
     
    t1key = 6
    data = Encore plus de données
    num = 9
    timeEnter = NULL
    Je copie sqlite3.dll dans le même répertoire que mon nouvel exec et maintenant je suis prêt à tester ma mini application en entrant la commande suivante dans un prompt DOS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    C:\test_SQLite\SQLite_Exemple\Debug\SQLite_Exemple.exe C:\test_SQLite\test.db "select * from t1"
    t1key = 4
    data = Exemple de données
    num = 3
    timeEnter = NULL
     
    t1key = 5
    data = Plus de données
    num = 6
    timeEnter = NULL
     
    t1key = 6
    data = Encore plus de données
    num = 9
    Et maintenant tout fonctionne

    MERCI MERCI MERCI
    Bonjour,

    Je remonte un vieux poste, mais merci pour le mini-tuto !!!
    "Phylactère temporaire" = tooltips

    Votre problème a été résolu ? Alors utilisez sur et

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Environnement graphique et portabilité
    Par viddak dans le forum Linux
    Réponses: 3
    Dernier message: 11/06/2003, 13h57
  2. Virer l environnement...
    Par Kukrapok dans le forum DirectX
    Réponses: 1
    Dernier message: 18/11/2002, 05h47
  3. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31
  4. nom de fichier et variables d'environnement
    Par joebarthib dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2002, 15h21
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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