Partage
  • Partager sur Facebook
  • Partager sur Twitter

connexion a une BDD

comment devenir moins nul?

    7 mars 2008 à 14:17:56

    hello tout le monde...
    tout d'abord, bravo et merci a tous les membres qui font vivre ce site et cette communauté! :D

    bon j'ai un projet qui est de faire un programme pour lequel une bdd va etre necessaire. Cela dit, meme si cette BDD devient volumineuse et complexe, j'aimerais commencer par le depart, a savoir, faire des choses simples, avant de faire des choses plus complexes...

    je suis assidument le tuto c++ de m@teo, mais je n'ai pas vraiment saisi s'il compte nous faire un petit tuto sur les BDD en c++, comme il en avait fait un sur le cours de php...

    bref, vous l'aurez compris, je suis un vrai zero!
    j'ai essayé de lire un peu la documentation de Qt, mais lorsqu'ils donnent par exemple le nom de l'hote
    1. db.setHostName("bigblue");

    ca me donne l'impression qu'il s'agit d'une bdd distante sur un hebergeur...(faut peut etre mettre "localhost" pour une bdd locale? ou installer d'autres trucs sur Qt? o_O )
    hors, je souhaiterais faire une bdd locale (ne serait ce que pour faire un truc con, je ne sais pas, un agenda, un carnet de commandes etc...peu importe :) )

    alors en lisant, parce que, quand même, avant d'embêter les autres, j'essaye de trouver... j'entends parler de "server sql" a installer....de différentes méthodes d'accès a une bdd comme mysql++, sqlite, ODBC, du module de Qt....
    la doc de sqlite est pour le moins succinte!! pour un newbie de mon acabit (enfin noob en c++, mais je fais du php grace a ce site depuis quelques années :-° ), autant se tirer une balle tout de suite :(

    alors quelqu'un pourrait il me dire:
    si je dois créer une base de données locale, indépendamment de mon soft, et ensuite les lier tous les deux?et si oui avec quelle interface?
    pour quel type de méthodes doit on installer le sql server? (et le cas echeant quel fichier ou programme faut il et ou le trouver?)
    quel est le rôle d'access la dedans, qui est un gestionnaire de bdd?? puis je m'en servir?

    en gros, il me manque un bon gros tuto pour le nul que je suis, au moins sur les premiers pas a suivre... un truc un peu plus complet que "as tu déjà pensé a utiliser sqlite?"... (mais je suis plein de bonne volonté, et l'anglais ne me rebute pas :p )

    mais j'avoue que je suis un peu perdu la...si on pouvait me donner un fil conducteur, çà m'aiderait beaucoup (je serais déjà content, ne serait ce que de connecter a une bdd locale depuis un soft c++...après pour manipuler la bdd, je pense que la doc expliquera bien ce qu'il faut faire avec le sql...quelle que soit la méthode que je choisisse...)

    si quelqu'un avait la gentillesse de m'aiguiller un peu sur le plan pratique, ca serait gentil ;)
    • Partager sur Facebook
    • Partager sur Twitter
      7 mars 2008 à 14:30:54

      Essaye de faire db.setHostName("127.0.0.1");
      ou : db.setHostName("localhost");

      Je n'ai pas tester, c'est à toi de le faire
      • Partager sur Facebook
      • Partager sur Twitter
        7 mars 2008 à 14:48:10

        et je cree une bdd avec access que je mets dans le meme repertoire que mon projet final? il y a un format particulier a respecter avec Qt?
        • Partager sur Facebook
        • Partager sur Twitter
          7 mars 2008 à 15:09:02

          Je ne sais pas désolé
          • Partager sur Facebook
          • Partager sur Twitter
            8 mars 2008 à 2:24:26

            bon alors...apres quelques essais, voici le code que j'utilise...l'idee etant que si je me connecte a la db, le bouton met youpi, sinon il met beurk (bouton predefini avant...)

            1. QSqlDatabase db = QSqlDatabase::database();
            2.      db.setHostName("127.0.0.1");
            3.      db.setDatabaseName("Contacts.accdb");
            4.      db.setUserName("");
            5.      db.setPassword("");
            6.      bool ok = db.open();
            7.      if (ok==1)
            8.      {
            9.          bouton->setText("youpi!");
            10.      }
            11.      else
            12.      {
            13.          bouton->setText("beurk!");
            14.      }


            je precise que j'ai créé une bdd access qui se nomme Contacts.accdb (peut etre je n'ai pas le droit avec Qt?? si?), et que la bdd est dans le meme repertoire que le test.exe une fois compilé...
            je n'ai pas oublié de rajouter : QT += sql dans le .pro pour que ca ne plante pas a la compile, qui se deroule par ailleurs sans plantage

            j'ai essayé le setHostName avec localhost, ainsi qu'avec mon ip locale (192.168.1.20), puisque j'ai un reseau de plusieurs machines avec chacune une ip definie...

            le bouton met beurk a chaque fois comme on peut l'imaginer... :colere2:

            erreur de creation avec access?? necessité d'un driver Qt ? (j'ai vu une classe QsqlDriver trainer... o_O )
            si quelqu'un a une idee pour arriver a me connecter a ma db...je suis ouvert...

            (peut etre utiliser un SGDB particulier autre que access?? j'ai essayé sqlite3, mais si j'essaye de creer une bdd avec le sqlite3.exe donné, en faisant sqlite3 dbtest.db, ca ne cree aucun fichier... :( )

            je cherche pourtant!! je cherche... :p
            • Partager sur Facebook
            • Partager sur Twitter
              8 mars 2008 à 2:57:41

              Salut,

              Malheureusement, tu ne peut pas utiliser Access comme base de donnée. Il faut absolument un Serveur de base de donnée. Access n'est pas un serveur, il crée des ficher contenant une pseudo base de donnée.
              Voici la liste dans le tableau des Serveur compatible avec Qt : http://doc.trolltech.com/4.3/qsqldatabase.html#QSqlDatabase

              Il faut d'abor que tu installe l'un de ces serveur, et ensuite que tu le spécifie dans QSqlDatabase db = QSqlDatabase::database(****); remplace les **** par ton serveur sql. Par exemple pour MySql->QMYSQL.

              Si tu installe ta base de donnée sur ton ordinateur alors 'localhost' est bon pour db.setHostName("127.0.0.1");
              Pour le reste des donnée, tu n'auras qu'a les noter lors de l'installation de ton Serveur Sql.

              @+
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                8 mars 2008 à 4:36:29

                @kabuto_fr :

                Tu n'es pas obligé d'utiliser un server SQL (surtout si c'est pour faire du localhost, un peu overkill ...). Il existe pas mal de solution embarquable ("Embedded Sql database" dans google), SQLite etant celle qui correspond le mieux ici (Simple, performante, du domaine publique ... et ma preférée ! =)).

                @L'op : Créé ta BDD avec un programme externe (pour ma part, j'utilise SQLite Expert, gratuit en version perso), créé tes tables, tes contraintes, whatever. Ensuite la connection devrait se jouer normalement uniquement sur le setDatabaseName (c'est beau le serverless ...), tu colles ta chaine de connexion, et normalement ca devrait rouler.

                NB : il existe d'autres solutions toutes aussi efficaces mais pas supporté nativement par Qt (apparement ce que tu cherches) à savoir SQL Server Compact edition ('Crosoft, à voir pour la licence), Berkeley DB (Oracle, compatible GPL) etc ...
                • Partager sur Facebook
                • Partager sur Twitter
                  8 mars 2008 à 10:51:49

                  ah ben voila qui m'eclaire un peu, merci de ces conseils, je vais tester ca et je dis quoi...pour sqlite, je m'etais rendu sur la home page, mais j'ai visiblemene loupé le sqlite expert!
                  si j'ai bien compris, sqlite sera plus embarquable , mais par contre un peu plus limité que si je mets un server...qui sera moins portable mais plus performant...

                  a part sqlite, j'avais repere mysql++, qui a l'air de correspondre aussi au c++ pas trop mal mais qui est un peu plus complexe a manipuler... mais qui n'est pas dans la liste de Qt fournit (enfin elle dit que mysql est compatible quand meme....

                  j'ai encore une petite question avant de me lancer...
                  une fois fini, mon soft devrait pouvoir s'installer sur une machine avec windows par exemple, mais si je comprends ce que je viens de lire, pour certaines machines, elles devraient alors avoir le sqlserver d'installé?? ou il y a une maniere de faire qui n'imposerait pas d'installer le server en sus sur toutes les machines ou j'installerais mon soft? (autre que sqlite j'entends! :-° )


                  deja je vais faire quelques tests comme ca, et je vous tiendrai au jus, je ne mets donc pas resolu pour le moment sur le topic...merci pour ces conseils, je vais aller me faire mal au crane avec tout ca tiens! :p
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    8 mars 2008 à 12:58:26

                    Bah si la base est faite pour fonctionner en client/serveur only, oui il faudra l'installer.

                    Pour revenir sur SQLite, c'est pas specialement que tu es plus limité, mais ca correspond à un besoin precis à savoir integrer un moteur SQL leger (la lib fait 500ko, de memoire) dans une appli. Bon forcement, il y a des limitations (pas de transactions multiples, difficile à gerer sur une base distante), mais dans le cas d'une base locale d'appli, ca ne te genera pas.

                    Mais de toutes facons, que tu choisisses MySql, SQLite ou autres, pour toi, ca devrait etre transparent (donc pas plus dur ou simple) puisque le tout est encapsulé (du moins je pense) dans les classes de Qt, donc à la limite le provider sous-jacent, ce n'est pas vraiment important si il est géré par Qt.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 mars 2008 à 14:08:43

                      bon, je sens que je me rapproche!
                      neanmoins, mon petit bouton continue desesperement de marquer beurk! snif!! :'(
                      j'ai donc chargé sqlite expert, fait une petite base que j'ai appellé test.db3, puis fait une table "personnes" dans laquelle j'ai mis un champ index, nom et prenom... ensuite incrementé le tout de deux ou trois lignes pour que la table ne soit pas vide..., placé la table dans mon repertoire du test.exe final compilé, et envoyé le code suivant:

                      1. QSqlDatabase db = QSqlDatabase::database("QSQLITE");
                      2.      db.setHostName("localhost");
                      3.      db.setDatabaseName("Data Source=test.db3;Version=3;");
                      4.      //db.setUserName("");
                      5.      //db.setPassword("");
                      6.      bool ok = db.open();
                      7.      if (ok==1)
                      8.      {
                      9.          bouton->setText("youpi!");
                      10.      }
                      11.      else
                      12.      {
                      13.          bouton->setText("beurk!");
                      14.      }


                      j'ai enlevé les setPassword et setUserName puisqu'il n'y en n'a theoriquement pas besoin (mais de toute maniere j'ai essayé de les remettre tels que, et ca n'a pas marché non plus...)
                      j'ai bien collé la chaine de connexion dans le setDatabaseName... essayé aussi avec 127.0.0.1 a la place de localhost...

                      que fais je de mal??

                      je l'aurai un jour!! je l'aurai!! :pirate:
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 mars 2008 à 17:55:17

                        Salut,

                        En fait je me suis tromper. J'avais pas lu jusqu'au bout. Mais en fait Qt peut utiliser les driver ODBC donc Access est accessible. Bon c'est moi simple a faire mais c'est possible. Vraiment très puissante cette bibliothèque.
                        le lien pour Access : http://doc.trolltech.com/4.3/qsqldatabase.html#setDatabaseName
                        @+
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 mars 2008 à 20:50:21

                          je vais tester cela avec access, ok...je teste et je dis quoi...
                          sinon pour sqlite, je faisais un truc pas bien visiblement...sinon ca aurait marché...une idee de ce que c'etait :-° ??

                          (je sais, je fais chier, mais j'aime bien comprendre... :honte: )

                          bon ca ne marche pas, il me dit que "db undeclared (first use...)"

                          j'ai vu ca dans la doc:
                          Driver Type Description
                          QDB2 IBM DB2
                          QIBASE Borland InterBase Driver
                          QMYSQL MySQL Driver
                          QOCI Oracle Call Interface Driver
                          QODBC ODBC Driver (includes Microsoft SQL Server)
                          QPSQL PostgreSQL Driver
                          QSQLITE SQLite version 3 or above
                          QSQLITE2 SQLite version 2
                          QTDS Sybase Adaptive Server

                          ca voudrait dire que pour access il faut sql server ou j'ai encore compris de travers?? :-°



                          bon!! comme quoi, le fait de demander de l'aide n'est pas inutile...
                          je n'ai pas le droit de repondre deux fois d'affilee... :( alors j'edite pour donner la suite!

                          j'ai trouvé sur qtfr.org le code qui marche pour sqlite, et effectivement, mon bouton marque enfin youpi! :p:p:p

                          voici le code
                          1. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
                          2.     db.setDatabaseName("test.db3");


                          meme pas besoin de s'embeter avec le localhost... :o
                          pour preciser le type de base, il faut faire un addDatabase! (en tous cas avec sqlite...) et non un database...

                          bon cela dit, odbc, j'ai bien l'impression que c'est interessant aussi! j'en ai deja entendu parler... et comme on dit, c'est en en bavant qu'on apprend! donc je retourne me documenter la dessus... (ben oui quoi! vu que m@teo doit etre en train de murir son prochain tuto, faut bien s'occuper... :-°:-° )
                          • Partager sur Facebook
                          • Partager sur Twitter

                          connexion a une BDD

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown