J'écris un programme à Qt et j'ai un problème avec la rédaction d'une requête SQL Select.
J'ai une table simple qui contient des colonnes comme: id, nom_or_nickname, nom de famille, profession. J'ai 3 variables que je veux utiliser dans la requête: Je veux exécuter cette requête en utilisant ces variables: p> Cependant, Ne fonctionne pas et que la fonction iSactive () renvoie false, il y a donc quelque chose qui ne va pas avec la requête - probablement avec les supports. Pourriez-vous me montrer un exemple comment devrais-je m'occuper? Merci d'avance! P> =========================================== ================================= P> mainwindow.h: p> mainwindow.cpp p> personne.h: p> Je poste ici le code nécessaire: h1>
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
4 Réponses :
Vous avez oublié de mettre des citations doubles à la fin de la déclaration
la vôtre: p> devrait être: p>
Ouais, bien sûr, mais j'ai fait cette erreur que ici, sur Stackoverflow. Dans mon programme, je l'ai. Qu'est-ce que tu fais?
J'ai ajouté ces supports, mais ça ne marche pas. Que conseillez-vous?
Ok, j'ai résolu le problème. Merci beaucoup pour votre aide :-)
essayez ce code: strong>
Cela n'a pas aidé. Isactive () retourne toujours faux :-( Que suggérez-vous d'autre?
Vous n'utiliserez pas Isactive () pour connaître le nombre de noms que le comte sera stocké dans la variable des rangées.
Je sais, je l'utilise pour voir au début si la requête est bonne
Meilleure utilisez la requête avec les paramètres pour éviter différentes problèmes de convertissement de type dans SQL
QString execute = "SELECT COUNT(name) FROM table1 WHERE surname=? AND occupation=?;"; QSqlQuery query; query.prepare(execute); query.bindValue(0, surname); query.bindValue(1, occupation); query.exec(); if (query.next()) { rows= query.value(0).toInt(); } else { qDebug() << query.lastError(); //check your error here }
Eh bien, j'ai reçu ceci: Qsqlerror ("", "Mismachatch du nombre de paramètres", "")
Que conseillez-vous?
La requête a l'air bien ... peut-être essayer de citer vos noms de champs. Comme "Select Count ('Nom') ...". Peut-être que les SGB que vous utilisez a un mot-clé système appelé nom code>
Pour être honnête, je viens de mettre le nom simple de cette variable, juste pour vous permettre de voir comment cela fonctionne - le nom complet est: nom_or_nickname, donc je ne pense pas que le SGBD peut le savoir ;-) Toutes les autres idées?
Ok, j'ai résolu le problème. Merci beaucoup pour votre aide :-)
Pour être honnête, je ne sais pas pourquoi aucune des méthodes suggérées ci-dessus n'a fait le travail. p>
qstring exécuteur = "Sélectionnez le nombre (*) à partir de table1 où (nom_or_nickname = '" + nom + "') et (nom =" "+ nom de famille +" '+ Occupation + "') ; "; p>
Merci pour toute votre aide. P>
Ajout de supports manquants à la fin de la ligne avec QString Execute, ne fonctionne toujours pas réellement ...
Je vois que vous utilisez
qsqldatabase _sql; code> mais dans quelle partie définissez-vous la configuration et ouvrez la connexion? "
Eh bien, j'ai 2 classes - Mainwindow et personne. J'ai défini la configuration dans le constructeur de MAINWINDOW et passe le paramètre _SQL lors de la création d'objets de personne dans la classe MainWindow. Donc, je pense que tout devrait fonctionner bien
Eh bien, comme vous n'avez pas signalé dans votre question pour moi, c'est un point qui peut causer l'erreur.
Mais que peut causer ce problème? J'ai même déjà essayé de transmettre ce paramètre par la référence, mais cela n'a rien changé. D'autres suggestions?
Si la connexion n'est pas ouverte, vous ne pouvez pas faire de requête, donc ma recommandation si vous souhaitez obtenir de l'aide est que vous fournissez un exemple de reproductible minimal et que vous partagez le fichier .db
J'ai mis à jour le code - s'il vous plaît, regardez la section PS en bas.
Votre code n'est pas un exemple de reproductible minimal , veuillez lire le lien afin de comprendre ce que je veux dire
Ok, juste un moment, je vais faire ça
Cela a pris un moment pour moi, mais j'ai téléchargé le code.
Changer
qsqldatabase sql = qsqldatabase :: addDatabase ("qsqlite", "db") code> to
sql = qsqldatabase :: adddatabase ("qsqlite", "db") code>
Changé, toujours rien ne se passe ...
D'accord, mais c'est une erreur car vous vous chevauchez avec une variable locale qui a le même nom qu'un attribut de la classe, je vais tester votre code dans un instant
Oui, il ne devrait pas y avoir une autre déclaration de variable SQL
Quoi qu'il en soit, la suppression, cela n'a pas aidé ni :-(
Qu'est-ce que search_in_database?
Une partie de mon programme - une méthode dans laquelle je recherche si un élément existe dans le tableau et effectue des opérations supplémentaires, qui ne sont pas importantes concernant ce problème.
Dans quelle partie de votre code appelez-vous search_in_table?
En fait, j'ai résolu le problème. J'apprécie vraiment votre aide. Merci!