Requête sql qui ne fonctionne pas

Qt

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour, tout le monde, Je veux faire une requête sql qui peut créer une table sans savoir d’abord le nom que cette table devrait avoir ; voici mon code :

#include <QCoreApplication>
#include <QtSql>
#include <QDebug>
#include <QImage>
#include <QFileDialog>
#include <QString>
#include <QStringList>

int main(int argc, char** argv)
{
    QCoreApplication app(argc,argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("mydatabase");
    if(db.open()){

        qDebug("La connexion est établie avec la base de données.");

        QSqlQuery q1;
        q1.prepare("CREATE TABLE :bable (id INT PRIMARY KEY NOT NULL, nom VARCHAR(100) )");
        q1.bindValue(":bable","MyTable");
        if(q1.exec())
            qDebug("Requête réussie.");
        else
            qDebug() << "ERREUR: " << q1.lastError().text();
    }else{

        qDebug() << " ERREUR: ";
    }
    return app.exec();
}

Je ne sais pas pourquoi mon code ne fonctionne pas. Nota: voici le texte d’erreur: ERREUR: " Parameter count mismatch"

Nota: je veux que l’utilisateur saisisse le nom de la table à créer Merci pour votre aide.

Édité par Drux

+0 -0

Bonjour, Tu ne peux pas paramétrer un nom de table dans une requête préparée car ce n’est pas une valeur. Éventuellement ça peut être fait en considérant le texte de la requête comme un chaîne de caractère (avec EXECUTE IMMEDIATE par exemple mais je ne crois pas que ça existe avec SQLite). A priori ça semble une mauvaise idée à moins peut-être de vouloir faire un outil de gestion de bases de données. Le plus simple serait alors de créer la requête dynamiquement.

+1 -0

Salut,

La solution de créer la requête dynamiquement semble la plus adapté. Fait cependant attention à ne pas permettre une injection SQL ! Le mieux étant d’être le plus restrictif possible : vérifier que tout les caractères appartiennent à un ensemble, par exemple [a-zA-Z0-9].

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte