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 :

Insérer des lignes dans QSqlTableModel


Sujet :

Bases de données

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 58
    Points
    58
    Par défaut Insérer des lignes dans QSqlTableModel
    Dans mon application, je dois intégrer une base de données assez légère afin de garantir une meilleure performance, est ce que je peux intégrer SQlite avec Qt et si oui est elle efficace et performante?
    Quelqu'un pourrait me donner des liens et des exemples simples de Qt intégrant une base de données SQlite ou SQL?

  2. #2
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par maroua_mm Voir le message
    Dans mon application, je dois intégrer une base de données assez légère afin de garantir une meilleure performance, est ce que je peux intégrer SQlite avec Qt et si oui est elle efficace et performante?
    Oui, le plugin est fourni avec Qt (et compilé par défaut)
    Citation Envoyé par maroua_mm Voir le message
    Quelqu'un pourrait me donner des liens et des exemples simples de Qt intégrant une base de données SQlite ou SQL?
    Tout les exemples de bases de données livrés avec Qt l'utilise.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    J'ai débuté à travailler avec Sql mais je n'arrive pas à créer la connexion avec la base de données crée ni à l'afficher avec QTableView.
    Quelqu'un pourra m'éclaircir où je dois mettre la méthode CreateConnectionDatabase() celle qui figure dans les exemples de Qt afin d'établir la connextion.
    mon code est le 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
    FirewallView::FirewallView()
    {
    	uiFirewall.setupUi(this);
     
    	InitializeModelRules(modelRules);
     
    	uiFirewall.tableViewRules->setModel(modelRules);
    	uiFirewall.verticalLayout_4->addWidget(uiFirewall.tableViewRules);
    	uiFirewall.Rules->setLayout(uiFirewall.verticalLayout_4);
     
     
     
    	uiFirewall.widget_1->setLayout(uiFirewall.verticalLayout_1);
     
    }
    void FirewallView::InitializeModelRules(QSqlTableModel *modelRules)
    {
    	modelRules->setTable("tableViewRules");
        modelRules->setEditStrategy(QSqlTableModel::OnManualSubmit);
        modelRules->select();
     
        modelRules->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
        modelRules->setHeaderData(1, Qt::Horizontal, QObject::tr("Source"));
        modelRules->setHeaderData(2, Qt::Horizontal, QObject::tr("Destination"));
        modelRules->setHeaderData(3, Qt::Horizontal, QObject::tr("Service"));
        modelRules->setHeaderData(4, Qt::Horizontal, QObject::tr("Interface"));
        modelRules->setHeaderData(5, Qt::Horizontal, QObject::tr("Direction"));
        modelRules->setHeaderData(6, Qt::Horizontal, QObject::tr("Action"));
        modelRules->setHeaderData(7, Qt::Horizontal, QObject::tr("Options"));
        modelRules->setHeaderData(8, Qt::Horizontal,
    QObject::tr("Commentaires"));
    }
    et le code de CreateConnectionDatabase()
    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
    #ifndef CONNECTIONDATABASE_H_
    #define CONNECTIONDATABASE_H_
     
    #include <QApplication>
    #include <QMessageBox>
    #include <QSqlDatabase>
    #include <QSqlError>
    #include <QSqlQuery>
     
    static bool CreateConnectionDatabase()
    {
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName(":memory:");
        if (!db.open()) {
            QMessageBox::critical(0, qApp->tr("Cannot open database"),
                qApp->tr("Unable to establish a database connection.\n"
                         "This example needs SQLite support. Please read "
                         "the Qt SQL driver documentation for information how "
                         "to build it.\n\n"
                         "Click Cancel to exit."), QMessageBox::Cancel);
            return false;
        }
     
        QSqlQuery query;
        query.exec("create table Iptables (nameFirewall varchar(20) primary key,id int secondary key "
                   "adresseIPFirewall varchar(20), masqueReseauFirewall varchar(20),"
                   "adresseMACFirewall varchar(20), descriptionFirewall varchar(100))");
     
        query.exec("create table tableViewRules (id int primary key, "
                   "Source varchar(20), Destination varchar(20),"
                   "Service varchar(20), Interface varchar(20),"
                   "Direction varchar(20), Action varchar(20),"
        		   "Options varchar(20), Commentaires varchar(50))");
     
        query.exec("create table tableViewNAT (id int primary key, "
                   "Source originale varchar(20), Destination originale varchar(20),"
                   "Service original varchar(20), Source traduite varchar(20),"
                   "Destination traduite varchar(20), Service traduit varchar(20),"
        		   "Options varchar(20), Commentaires varchar(50))");
     
     return true;
    }
    #endif /* CONNECTIONDATABASE_H_ */

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Août 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 41
    Points : 47
    Points
    47
    Par défaut
    Pour afficher ta table avec QTableView je pense que le mieux est de creer une QSqlTableModel a partir de ta base de données et de l'afficher dans QTableView grace a la methode setModel.

    Il y a un exemple ici:
    http://www.developpez.net/forums/d68...l/#post3978942

    J'espere que ca pourra t'aider...

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 58
    Points
    58
    Par défaut Insérer des lignes dans QSqlTableModel
    J'ai tant cherché à trouver une méthode qui m'insère des lignes vides dans QSqlTableModel et je n'ai trouvé que insertRows mais elle ne marchait pas quelqu'un pourra m'aider
    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
     
    modelRules = new QSqlTableModel(this);
    	modelRules->setTable("ViewRules");
    	modelRules->setEditStrategy(QSqlTableModel::OnFieldChange);
    	modelRules->select();
     
    	modelRules->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
    	modelRules->setHeaderData(1, Qt::Horizontal, QObject::tr("Source"));
    	modelRules->setHeaderData(2, Qt::Horizontal, QObject::tr("Destination"));
    	modelRules->setHeaderData(3, Qt::Horizontal, QObject::tr("Service"));
    	modelRules->setHeaderData(4, Qt::Horizontal, QObject::tr("Interface"));
    	modelRules->setHeaderData(5, Qt::Horizontal, QObject::tr("Direction"));
    	modelRules->setHeaderData(6, Qt::Horizontal, QObject::tr("Action"));
    	modelRules->setHeaderData(7, Qt::Horizontal, QObject::tr("Options"));
    	modelRules->setHeaderData(8, Qt::Horizontal, QObject::tr("Commentaires"));
     
    	modelRules->insertRows(1,10);

  6. #6
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    J'ai remarqué qu'avec insertRows , on ne peut ajouter qu'une seule ligne et ça marchait

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Août 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 41
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par maroua_mm Voir le message
    J'ai remarqué qu'avec insertRows , on ne peut ajouter qu'une seule ligne et ça marchait
    Doc :

    bool QSqlTableModel::insertRows ( int row, int count, const QModelIndex & parent = QModelIndex() ) [virtual]
    Inserts count empty rows at position row. Note that parent must be invalid, since this model does not support parent-child relations.
    Only one row at a time can be inserted when using the OnFieldChange or OnRowChange update strategies.
    The primeInsert() signal will be emitted for each new row. Connect to it if you want to initialize the new row with default values.
    Returns false if the parameters are out of bounds; otherwise returns true.
    Reimplemented from QAbstractItemModel.
    See also primeInsert() and insertRecord().

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 40
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Oui, le plugin est fourni avec Qt (et compilé par défaut)
    donc pas la peine de le télécharger

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Tu dois mettre la méthode CreateConnectionDatabase() juste apres le setupUi()

    Ton QSqlTableModel dois avoir une connection valide pour lire la table

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

Discussions similaires

  1. Insérer des lignes dans une matrice
    Par you_go dans le forum Fortran
    Réponses: 2
    Dernier message: 21/08/2009, 12h10
  2. [XL-2007] Insérer des lignes dans un classeur
    Par toinou62 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/05/2009, 19h22
  3. Insérer des lignes dans une table efficacement
    Par newbie82 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/07/2007, 17h01
  4. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  5. Insérer des lignes dans une StringGrid
    Par da_latifa dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/09/2005, 12h45

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