Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.7.1 - Qt Creator : 4.2.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Quelques fonctions pour les requetes SQL

Voici les fonctions que j'utilise a coup sur dans les projets avec base de données.

int fen::ouvrirBDD(QSqlDatabase &db)//ouvre une BDD
{
if(!db.open())
{
ajouterInfos("Echec ouverture " + db.databaseName(), "red");
ajouterInfos(db.lastError().text());
return 0;
}
else
{
ajouterInfos("Ouverture " + db.databaseName(), "green");
return 1;
}
}

int fen::fermerBDD(QSqlDatabase &db)//ferme une BDD
{
db.close();
if(db.isOpen())
{
ajouterInfos("Echec fermeture " + db.databaseName(), "red");
return 0;
}
else
{
ajouterInfos("Fermeture " + db.databaseName(), "green");
return 1;
}
}

//execute la requete commande sur la BDD dbCible, retourne le resultat en modifiant la reference requeteRetour et la taille du resultat via la reference tailleRetour
int fen::executerRequete(QString commande, QSqlDatabase &dbCible, QSqlQuery &requeteRetour, int &tailleRetour)
{
requeteRetour = dbCible.exec(commande);
if (requeteRetour.lastError().isValid())
{
ajouterInfos("----------Erreur requete----------", "red");
ajouterInfos(requeteRetour.lastQuery(), "blue");
ajouterInfos(requeteRetour.lastError().text(), "purple");
ajouterInfos("----------------------------------", "red");
tailleRetour = -1;
return 0;
}
else
{
if(!requeteRetour.isSelect())
{
tailleRetour = -1;
return 1;
}

if(requeteRetour.size() < 0)
tailleRetour = tailleRequete(requeteRetour);
else
tailleRetour = requeteRetour.size();

return 1;
}
}

int fen::tailleRequete(QSqlQuery &query)//donne la taille d'un QSqlQuery (utile pour les SGBD ne retournant pas cette nformation)
{

int cpt =0;
query.first();
query.previous();
while(query.next())
{
cpt++;
}
query.first();
query.previous();
return cpt;
}

void fen::ajouterInfos(const QString &info, const QString &color)//pour les messages mes interface graphiques ont toujours un QTextEdit nommé te_infos
{
QString s ="[" + QDateTime::currentDateTime().toString("hh:mm:ss") + "] " + info;
ui->te_infos->append("<FONT color=" + color + ">" + s.toHtmlEscaped() + "</FONT>");
ui->te_infos->verticalScrollBar()->setValue( ui->te_infos->verticalScrollBar()->maximum());
QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
}

void fen::ajouterInfos(const QStringList &lst, const QString &color)
{
ajouterInfos("==============================================", color);
for(int i=0; i<lst.length(); i++)
{
ui->te_infos->append("<FONT color=" + color + ">" + lst.at(i).toHtmlEscaped() + "</FONT>");
}
ajouterInfos("==============================================", color);
ui->te_infos->verticalScrollBar()->setValue( ui->te_infos->verticalScrollBar()->maximum());
QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
}

Réponses

  • Merci de partager ton code :)

    Quelques questions constructives je l’espère:

    Si j'ai un query préparer avec argument je fais comment ?

    Si je veux les erreurs SQL en console en mode debug et en popup en mode release je fais comment ?

    Et si mon projet suit un model MVC je fais comment ?

    Et si je veux afficher uniquement certaine erreurs je fais comment ?

    Pourquoi ne pas avoir fait une classe SQL ?

    Je m’arrête la pour le moment :x
  • Loarwenn said:
    Merci de partager ton code :)

    Quelques questions constructives je l’espère:

    Si j'ai un query préparer avec argument je fais comment ?

    Si je veux les erreurs SQL en console en mode debug et en popup en mode release je fais comment ?

    Et si mon projet suit un model MVC je fais comment ?

    Et si je veux afficher uniquement certaine erreurs je fais comment ?

    Pourquoi ne pas avoir fait une classe SQL ?

    Je m’arrête la pour le moment :x

    Dans ces cas il ne faut pas utiliser ces fonctions, elles ne servent que pour des cas de requêtes simples et elle suffisent dans mes projets... quand j'ai des cas différents, je vois en fonction du cas.
Connectez-vous ou Inscrivez-vous pour répondre.