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

Bases de données Discussion :

Connexion SQL : problème de compréhension


Sujet :

Bases de données

  1. #1
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut Connexion SQL : problème de compréhension
    Bonjour,

    Ayant pour but de développer une application en Qt avec une gestion importante des données, j'ai regardé le tutoriel rédigé par Alain Defrance sur L'accès aux données avec Qt : http://alain-defrance.developpez.com/articles/Qt/SGBD/

    Seulement, La partie concernant La création d'un DSN (uniquement pour ODBC) pour créer sa source de données me laisse perplexe !

    Le problème ne réside pas dans le contenu qui est très clair mais dans la manière de faire. En effet, ayant développé déjà sous .NET avec SQL Server 2005, je ne comprends pas pourquoi il nous suffirait pas de créer la base de données sous SQL Server et ensuite d'appeler la base avec le module adapté de Qt ? (comme on ferait l'appel en C# ou VB.NET)

    Merci !

  2. #2
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Le problème est que QT, à ma connaissance, ne fournit pas de driver spécifique pour MsSql, cela t'oblige à utiliser la couche ODBC comme intermédiaire entre ton code et la source de données.

    Quand tu programmais en .Net, tu utilisais un driver Ado.net (SqlClient) qui permettait un accès natif, ici les choses sont différentes. Tu dois d'abord configurer une source de données ODBC, et ensuite te connecter à cette source de données avec ton code Qt.

  3. #3
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Merci _skip pour la clarté de ta réponse !

    Cependant, étant donné que le passage doit se faire par la couche ODBC, une fois les manipulations des données faites sous l'application en Qt connectée à la base, peut-on voir les résultats (avec select * from ... par exemple) sur SQL Server ?

    Aussi, on peut lire dans le tutoriel fournit en lien la phrase suivante :
    L'utilisation d'ODBC en production est suicidaire en terme de performance
    Qu'est-ce que vous en pensez ?

  4. #4
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Citation Envoyé par betsprite Voir le message
    Merci _skip pour la clarté de ta réponse !
    De rien ça me fait plaisir d'être utile

    Cependant, étant donné que le passage doit se faire par la couche ODBC, une fois les manipulations des données faites sous l'application en Qt connectée à la base, peut-on voir les résultats (avec select * from ... par exemple) sur SQL Server ?
    Je suis pas sûr de bien comprendre ce qui t'inquiète, ODBC c'est qu'un moyen de connexion, les requêtes que tu y feras affecterons naturellement les données comme si tu les tapais dans Sql management studio ou autre. Ton applications sera un client comme un autre de la base.
    C'est comme si tu codais en .Net en utilisant OdbcConnection comme classe au lieu de SqlConnection (de mémoire), le résultat sera le même.

    Aussi, on peut lire dans le tutoriel fournit en lien la phrase suivante :
    Qu'est-ce que vous en pensez ?
    ODBC est pas la manière préférée d'attaquer une base de donnée mais plutôt le choix faute de mieux . Ca ajoute un niveau d'indirection par rapport à un accès direct comme celui dont vous profitiez en .Net ce qui déjà n'est pas vraiment souhaitable quand on recherche la vitesse. Ensuite vient un autre problème, les drivers ODBC de certaines bases de données sont effectivement lamentables en terme d'implémentation et de performance.

    Par chance, celui de msSQL est probablement l'un des moins pires en la matière. Ceci n'exclut pas qu'il est fortement conseillé de faire quelques tests de performance sur votre base avant de vous lancer à plein régime dans le développement.

    Je vous conseille pour cela de lancer, depuis une application de test bidon, des requêtes retournant des GROS resultsets, ainsi que vos procédures stockées ou requête les plus *douloureuses* pour votre serveur de base de donnée.

  5. #5
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Merci encore _skip !

    Cependant, il me reste encore deux points à éclaircir :

    *
    Je suis pas sûr de bien comprendre ce qui t'inquiète, ODBC c'est qu'un moyen de connexion, les requêtes que tu y feras affecterons naturellement les données comme si tu les tapais dans Sql management studio ou autre. Ton applications sera un client comme un autre de la base.
    Ce que je voulais dire par là, c'est que quand j'ouvrais SQL Server Management, je pouvais directement créer une base dedans et après manipulations via SQLClient, je pouvais faire mes requêtes côté SQL pour voir les résultats (exemple select * from table pour voir le remplissage d'une table après insertion dans l'application).
    Or ici, si je passe par ODBC, ma base existera via un serveur, mais ne sera pas directement observable comme sous SQL Server Management 2005 par exemple...

    J'aurais donc juste à l'importer sur SQL Server Management pour pouvoir faire mes requêtes d'observation ou autre ?

    *
    ODBC est pas la manière préférée d'attaquer une base de donnée mais plutôt le choix faute de mieux. [...]
    Par chance, celui de msSQL est probablement l'un des moins pires en la matière.
    Avec Qt on doit se contenter de ces drivers ?

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 753
    Par défaut
    Citation Envoyé par betsprite Voir le message
    Avec Qt on doit se contenter de ces drivers ?
    Justement non. Si tu as la possibilité d'avoir des drivers sous forme de plug-ins, c'est aussi et surtout pour que tu puisses toi-même en écrire un. Par contre, je n'ai pas vraiment de doc sous la main là-dessus... Si tu le fais, ça serait très apprécié pour QExtend !

    Pour les autres questions, je passe mon tour, vu que ma connaissance des SGBD se limite aux requêtes de base en SQL (quand même les jointures...) !
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  7. #7
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Citation Envoyé par betsprite Voir le message
    Ce que je voulais dire par là, c'est que quand j'ouvrais SQL Server Management, je pouvais directement créer une base dedans et après manipulations via SQLClient, je pouvais faire mes requêtes côté SQL pour voir les résultats (exemple select * from table pour voir le remplissage d'une table après insertion dans l'application).
    Or ici, si je passe par ODBC, ma base existera via un serveur, mais ne sera pas directement observable comme sous SQL Server Management 2005 par exemple...
    Tu peux créer ta base de donnée et tes tables sur SQL management studio, configurer ta source de données ODBC et faire des requêtes depuis ton code QT dessus. Rien de cela ne t'empêchera de te connecter à cette base sur SQLMS et d'y effectuer tout ce que tu as envie comme requête.
    Une base SQL server est une base SQL server, le media de connexion, que ce soit ODBC, OleDb ou SQL native client ne change absolument rien à cet état des choses.

    Avec Qt on doit se contenter de ces drivers ?
    Nokia n'offre pas de driver natif pour mssql, mais comme dit dourouc05, tu peux fabriquer le tien en implémentant les interfaces de Qt, voir ici :
    http://qt.developpez.com/doc/4.6/sql...atabase-driver

    C'est largement faisable, ils en ont bien fabriquer un chez PHP (c'est dire), Mais je ne pense pas que ce soit complétement trivial, à vous de voir. Perso j'essaierai plutôt d'en acheter un à une autre entreprise qui soit testé et éprouvé plutôt que passer du temps à en fabriquer un.

    Sinon, hors Qt il existe des solutions natives comme celle-ci :
    http://www.sqlapi.com/
    mais elles sont hors de l'écosystème confortable de Qt.

  8. #8
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Bonjour,

    Tout d'abord, merci dourouc05 pour votre réponse !

    dourouc05 :
    Si tu as la possibilité d'avoir des drivers sous forme de plug-ins, c'est aussi et surtout pour que tu puisses toi-même en écrire un. Par contre, je n'ai pas vraiment de doc sous la main là-dessus... Si tu le fais, ça serait très apprécié pour QExtend !
    Ce serait intéressant mais je pense ne pas encore avoir assez de connaissance pour pouvoir me lancer là-dedans :s

    Aussi, merci _skip pour tes conseils.

    _skip :
    Tu peux créer ta base de donnée et tes tables sur SQL management studio, configurer ta source de données ODBC et faire des requêtes depuis ton code QT dessus. Rien de cela ne t'empêchera de te connecter à cette base sur SQLMS et d'y effectuer tout ce que tu as envie comme requête.
    Ok je vois mieux ! Et une fois la base créée sous SQLMS, comment la configurer pour que le driver ODBC puisse permettre la communication avec ma base sur un serveur qui l'heberge ?

    Merci !

  9. #9
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Toutes les étapes sont détaillées dans le cours que tu as mentionné dans ton premier post dans le chapitre :
    III-B. La création d'un DSN (uniquement pour ODBC)

    Quand il te demande à quel serveur SQL tu souhaites te connecter, tu lui indiques simplement le nom DNS ou l'IP du serveur qui l'héberge selon le format utilisé habituellement dans les chaînes de connexion:

    \\computer_name_or_ip\instance_name

  10. #10
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Ok donc si je suis les étapes du lien, j'obtiens une source de données nommée "monDSN" par exemple et avec un nom de serveur SQL pour la connection (comment savoir laquelle prendre d'ailleurs ?).

    Ensuite, avant de lancer SQLMS pour etablir une connection par authentification SQL (qui requiert un mot de passe), je dois effectuer la connection côté Qt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        db.setDatabaseName("monDSN"); // DSN que nous venons de créer.
        db.setUserName("alain.defrance");
        db.setPassword("plop");
    Et enfin, si j'ouvre SQLMS avec connection par authentification SQL avec le nom de serveur que j'ai indiqué au début et le mot de passe que je viens de donner, ça devrait le faire non?

    (En fait au final, "monDSN" est une base créée sur le serveur SQL précisé au début et accessible par le driver ODBC ??)

    Merci !

    Edit : bon en fait, je crois avoir mieux compris maintenant avec un peu de recul.
    ODBC va permettre le lien entre le client et la base de données. Pour se faire, on doit déclarer une source de données qu'on va configurer pour qu'elle soit associé à une base donnée d'un serveur SQL défini à sa création. Ensuite, si on dit que l'accés se fait par authentification SQL, il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        db.setDatabaseName("monDSN"); // DSN que nous venons de créer.
        db.setUserName("alain.defrance");
        db.setPassword("plop");
    Avec le bon username et le bon password pour accéder au serveur.

    Je crois que cette fois c'est bon non ?

Discussions similaires

  1. [MySQL] Problème de connexion SQL depuis 1 script distant chez Free
    Par metalfire77 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 23/04/2006, 07h26
  2. Problème de connexion SQL Server 2005
    Par kanko dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/02/2006, 17h14
  3. [SQL-Server] Problème avec odbc et ma connexion SQL Server
    Par vodevil dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/12/2005, 10h04
  4. [VB.NET] Problème de connexion à SQL Server
    Par Nesmontou dans le forum ASP.NET
    Réponses: 8
    Dernier message: 29/07/2005, 10h12
  5. [MFC] Problème Socket + Connexion SQL
    Par BananaUltra3C dans le forum MFC
    Réponses: 6
    Dernier message: 20/05/2005, 16h41

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